Encoder: Trick gesucht

Hallo
Ich such einen eleganten Weg um in meiner Navigationsleiste genau einem Eintrag eine andere Klasse (für die Darstellung) zu geben. Sie wird von jeder Seite eingebunden. Beim Aufruf identifiziert sich die Seite und sorgt damit dafür, dass der jeweilige Link markiert wird.
Bisher mach ich folgende Sauerei.

function showMenu($page)
{
  $marker = array();
  $marker[$page] = "currentPage";

print <<<END
<p class="$marker[0]"><a>Startseite</a></p>
<p class="$marker[1]"><a>Seite 1</a></p>
<p class="$marker[2]"><a>Seite 2</a></p>
usw ...
END;
}

Das blöde ist nur, es wird dauernd auf nicht existente Elemente im Array zugegriffen und das erzeugt ja immer eine Warnung.
Wie kann man das denn schöner machen?
Ich könnte das Array komplett vorbelegen, aber vielleicht weiß ja jemand noch was ganz anderes?
Mit lauter if prüfen oder mir das heredoc (nowdoc?) mit mehr Code zerschießen, möcht ich nicht tun.

  1. Hi,

    Mit lauter if prüfen oder mir das heredoc (nowdoc?) mit mehr Code zerschießen, möcht ich nicht tun.

    Nutze doch einfach eine Schleife zum Erstellen des Menüs.

    MfG ChrisB

    --
    “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
  2. Grüße,
    $seitenliste=Array(...);
    $currentPage="Blümchen";

    foreach($seitenliste as $name){
        echo $out=$name!=$currentPage ? $name : "aie sind hier";
    }

    Irrtümer vorbehalten ich bin länger aus dem Thema raus >_<
    MFG
    bleicher

    --
    __________________________-

    FirefoxMyth
  3. hi,

    Wie kann man das denn schöner machen?

    Mein BreadCrumb baue ich so:

      
    	// Das BreadCrumb Menu  
    	$ha = $fa = explode(".", $folder);  
    	$res = array(); // BreadCrumb Array  
    	foreach($fa as $val){  
    		$h = array_pop($ha);  
    		$res[$h] = implode(".", $fa);  
    		$ind = array_pop($fa);  
    	}  
    	$res = array_reverse($res,1);  
    	// BreadCrumb haben wir  
      
    	foreach($res as $k => $v){  
    		$link = $res[$k];  
    		$menlist[] = "<li class='nav'><a href='/$link.html' title='$link'>".$k."</a></li>";  
    	}  
      
    
    

    Wobei $folder beispielsweise so lautet: Intern.Artikel.Perl.Codeschnippel
    Also split am '.' bei mir.

    Nicht eingebaut hab ich da bisher das Ausblenden (kein <a href>), falls das gewünscht ist, frage die Variable REQUEST_URI dazu ab. Da steht genau die Seite drin, die gerade aufgerufen ist.

    Hotti

    1. hi,

      falls das gewünscht ist, frage die Variable REQUEST_URI dazu ab. Da steht genau die Seite drin, die gerade aufgerufen ist.

      Nein, in REQUEST_URI steht die gesamte URI, also auch die $_GET-Parameter.

      Erstmal muss man sich überlegen, wie die Navigation aufgebaut sein soll, GET oder sprechende URIs, dann kann man sich weiter Gedanken machen.

      mfg

      1. hi,

        falls das gewünscht ist, frage die Variable REQUEST_URI dazu ab. Da steht genau die Seite drin, die gerade aufgerufen ist.

        Nein, in REQUEST_URI steht die gesamte URI, also auch die $_GET-Parameter.

        Eben. Genau deswegen ja.

        Hotti

        1. hi,

          falls das gewünscht ist, frage die Variable REQUEST_URI dazu ab. Da steht genau die Seite drin, die gerade aufgerufen ist.

          Nein, in REQUEST_URI steht die gesamte URI, also auch die $_GET-Parameter.

          Eben. Genau deswegen ja.

          Das bringt doch nichts, wenn du die Gesamte URI hast.
          Nehmen wir an, ich rufe die Seite auf:

          example.com/myscr.php?site=12;show=all

          Willst du jetzt genau zu dieser URI einen bestimmten Content anzeigen, oder eher den Content für den Parameter „site“?
          Ist ja gut möglich, dass der Parameter „show“ den Content der Seite leicht ändert. Mit REQUEST_URI müsste man alle Relevanten möglichkeiten der Parameter berücksichtigen, also (nur mal ein Simples Bsp.)

          example.com/myscr.php?site=12;show=5
          example.com/myscr.php?site=12;show=10
          example.com/myscr.php?site=12;show=15
          example.com/myscr.php?site=12;show=all

          In all diesen Fällen müsste der richtige Content ausgegeben werden, der im Endeffekt mit dem Parameter „site“, „show“ oder dem Scriptname gefiltert werden könnte, statt REQUEST_URI.

          mfg

          1. hi,

            falls das gewünscht ist, frage die Variable REQUEST_URI dazu ab. Da steht genau die Seite drin, die gerade aufgerufen ist.

            Nein, in REQUEST_URI steht die gesamte URI, also auch die $_GET-Parameter.

            Eben. Genau deswegen ja.

            Das bringt doch nichts, wenn du die Gesamte URI hast.
            Nehmen wir an, ich rufe die Seite auf:

            example.com/myscr.php?site=12;show=all

            Willst du jetzt genau zu dieser URI einen bestimmten Content anzeigen,

            Mir ging es darum, den aufgerufenen URI(dentifier) aus der Linkliste (Navigation) auszublenden und genau das funktioniert exakt mit REQUEST_URI,

            guck mal: http://rolfrost.de/cgi-bin/find.cgi
            http://rolfrost.de/cgi-bin/find.cgi?query=aaaaaaaa&find=Suchen+und+Finden&mode=simple_text

            sowie den Rest der Site. Bei meinen statischen HTML-Seiten wird dies bereits bei der Erstellung gemacht, da steht REQUEST_URI (as expected) in der Projektverwaltung.

            Damit hat keine der Seiten einen Link auf sich selbst, was ja nicht nur die Suchmaschinen verwirren könnte sondern auch den Besucher.

            Hotti

            1. hi,

              guck mal: http://rolfrost.de/cgi-bin/find.cgi
              http://rolfrost.de/cgi-bin/find.cgi?query=aaaaaaaa&find=Suchen+und+Finden&mode=simple_text

              Ich glaube, wir schreiben aneinander vorbei ;)
              Der Link "suche" soll nicht verlinkt werden, egal was kommt -- das gilt auch für Parameter.

              Damit hat keine der Seiten einen Link auf sich selbst,

              In deinem Fall ist es wohl ansichtssache. Ich finde schon, dass die Seite auf sich selbst verlinkt, wenn Parameter an die URI drangehangen werden. Und dann stellt sich die Frage, warum?
              Ich befinde mich ja weiterhin auf "find.cgi", warum wird die Seite wieder verlinkt, wenn Parameter dranhängen?

              In diesem Falle verstehe ich natürlich, warum bei dir der Link wieder gesetzt wird -- damit man wieder auf die Default-Suchseite kommt, was auch durchaus Sinn machen kann. Es gibt aber fälle, wo es keinen Sinn macht, und diese überwiegen wohl in der Praxis.

              mfg

              1. hi,

                Der Link "suche" soll nicht verlinkt werden, egal was kommt -- das gilt auch für Parameter.

                Dann guck Dir die PHP Funktion parse_url() an.

                Hotti

                1. hi,

                  Der Link "suche" soll nicht verlinkt werden, egal was kommt -- das gilt auch für Parameter.

                  Dann guck Dir die PHP Funktion parse_url() an.

                  Die kenne ich schon -- aber, warum soll ich sie mir ansehen?
                  Ich "parse" meine "url" bereits auf meine Weise[1] :)

                  mfg
                  [1] Streng genommen auf dedlfix Weise

                  1. hi,

                    Der Link "suche" soll nicht verlinkt werden, egal was kommt -- das gilt auch für Parameter.

                    Dann guck Dir die PHP Funktion parse_url() an.

                    Die kenne ich schon -- aber, warum soll ich sie mir ansehen?

                    Genau. Und warum sollte ich auf einen benutzer- und suchmaschinenfreundlichen Link in meinem Hauptmenu verzichten, wo der Trick mit REQUEST_URI doch ganz einfach ist ;-)

                    Viele Grüße,
                    Horst Trickreich

                    1. hi,

                      Genau. Und warum sollte ich auf einen benutzer- und suchmaschinenfreundlichen Link in meinem Hauptmenu verzichten, wo der Trick mit REQUEST_URI doch ganz einfach ist ;-)

                      Mach's doch wie Google

                      Hotti-Logo
                      hättste noch zusätzlich bissel Farbe auf deiner Seite :)

                      mfg

  4. @@Encoder:

    nuqneH

    Beim Aufruf identifiziert sich die Seite und sorgt damit dafür, dass der jeweilige Link markiert wird.

    Der Link sollte nicht markiert, sondern entfernt werden. „Verlinke niemals auf die aktuelle Seite.“ (Punkt 10 der zehn meist-missachteten Homepage-Design-Richtlinien [Nielsen])

    <p class="$marker[0]"><a>Startseite</a></p>

    Ich vermute kastrierte 'a'-Elemente, in Wirklichkeit haben sie @href-Attribute. Was spricht dagegen, deren @href-Werte jeweils mit dem URI der aktuellen Seite zu vergleichen?

    Qapla'

    --
    Alle Menschen sind klug. Die einen vorher, die anderen nachher. (John Steinbeck)
    1. Der Link sollte nicht markiert, sondern entfernt werden.

      Ich möchte den Text schon da lassen wo er vorher auch war, nur vielleicht nicht mehr als Link und halt anders dargestellt. Sonst irritiert es find ich.

      Ich vermute kastrierte 'a'-Elemente

      Stimmt schon, das sollte halt möglichst unkompliziert auf das eigentliche Problem hinweisen ;-)

      1. @@Encoder:

        nuqneH

        Der Link sollte nicht markiert, sondern entfernt werden.
        Ich möchte den Text schon da lassen wo er vorher auch war

        Ja, nicht den Text entfernen, sondern den Link (die Verlinkung des Textes).

        nur vielleicht nicht mehr als Link und halt anders dargestellt.

        /archiv/2009/9/t191084/#m1274263 > /archiv/2009/9/t190331/#m1268494

        „es sind doch sicher 'li'-Elemente, oder?“

        Markup fürs Menü auf Seite 1:

        <ul id="menu">  
          <li><a href="/">Startseite</a></li>  
          <li>Seite 1</a>  
          <li><a href="/seite2">Seite 2</a></li>  
        </ul>
        

        Qapla'

        --
        Alle Menschen sind klug. Die einen vorher, die anderen nachher. (John Steinbeck)