highlight der aktuellen seite in der navigation

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • highlight der aktuellen seite in der navigation

    Aktuell binde ich in einer index.php per require_once abhängig von parametern ($lang und $page) Seiteninhalte ein, so z.B. auch eine nav.php mit einem <div> mit der navigation, was aktuell nix anderes enthält als eine zweistufige Liste (ul/li Elemente).

    Das Problem ist nun folgendes:

    Wenn ich eine Seite lade, z.B. per href="index.php?lang=de&page=service", möchte ich gern, dass der Link auf die aktuelle Seite (hier de/service) in der Navigation hervorgehoben wird. Also kryptisch formuliert:

    Wenn §page = href eines <a> elements aus der navi, dann echo id="current"; in eben diesem <a> element, um per css das design definierten zu können.

    Wie krieg ich das allgemeingültig für alle links hin, ohne meine bisher recht saubere nav.php bei jedem einzelnen <a> element mit tonnenweise quellcode zu versehen, bzw. muss ich dafür am besten die links in arrays packen und diese dann mit Schleifen aufbauen?
    Zuletzt geändert von tobibeer; 12.11.2007, 17:09.

  • #2
    Ja, Array + Schleife.

    Kommentar


    • #3
      na klar, schleife

      Original geschrieben von onemorenerd
      Ja, Array + Schleife.
      dacht ich mir... ;-)
      Macht ja irgendwie auch Sinn, schließlich ist php eine Programmiersprache...


      Obwohl etwas wie:

      if (This.href==$string) {This.Attributes.Append("ID","Current"}

      eine schöne Sache wäre, oder soetwas wie:

      if (This.href==$string) {This.Attributes.Modify("target","_parent"}

      oder nicht? ...auch ohne javascript

      Kommentar


      • #4
        falls irgendwen meine Lösung interssiert

        PHP-Code:
        <?php
          
        //lade Übersetzung der Navigation
          
        require_once('inc/navTranslation.php');
          
        //Menü Inhalt laden
          
        $nav file ('inc/nav.txt');
          
          echo 
        '<div ID="nav">
          '
        ;
          
        $iNumNav count($nav);
          
        $currLevel 0;
          for(
        $iNav=0$iNav<$iNumNav$iNav=$iNav+1)
          { 
            
        $bNewLevel=false;
            
        //hole Eintrag in der Form: <EinstelligeNummerFür*Level*><RestrstringFür*page*>
            
        $entry trim($nav[$iNav]);
            
        //bestimme $level und $page des Eintrags
            
        $thisLevel substr($entry,0,1);
            
        $thisPage substr($entry,1,strlen($entry));
            
        //wenn Level gleich Vorgänger-Level
            
        if ($thisLevel==$currLevel)
            {
              
        //letzten Eintrag abschließen
              
        echo '</li>
              '
        ;
            }
            
        //wenn anderes Level als Vorgänger-Level
            
        else
            {
              
        //wenn Unterebene
              
        if ($thisLevel>$currLevel)
              {
                
        //merke, dass neue Ebene
                
        $bNewLevel true;
                
        //wenn mehr als eine Ebene tiefer
                
        if ($thisLevel>($currLevel+1)) {echo "nav.php: config error!";}
                
        //neue liste
                
        echo '<ul>
                '
        ;
                
        //neues level merken
                
        $currLevel $thisLevel;
              }
              
        //wenn Ebene(n) zurück
              
        else
              {
                
        //über alle Ebenen rückwärts
                
        while ($currLevel $thisLevel)
                {
                  
        //dekrementieren und Level abschließen
                  
        $currLevel $currLevel 1;
                  echo 
        '</li>
                  </ul>
                  '
        ;
                }
              }
            }
            
        //Eintrag anlegen
            
        echo '<li><a href="'.$lang.'_'.$page.'.html" ';
            if (
        $page==$thisPage) {echo 'ID="navCurrent"';}
            if (
        $bNewLevel)  {echo 'class="ie5_fix"';}
            echo 
        '>'.$navLang[$thisPage][$lang].'</a>
            '
        ;
            
            
        //wenn letzter Eintrag in Menü
            
        if ($iNav == $iNumNav)
            {
              
        //über alle Ebenen rückwärts
              
        while ($currLevel 0)
              {
                
        //dekrementieren und Level abschließen
                
        $currLevel $currLevel 1;
                echo 
        '</li>
                </ul>
                '
        ;
              }
            }
          }
          echo 
        '</div>';
        ?>
        wobei $lang per GET ausgelesen wurde und navTranslation.php lediglich das zweidimensionale Array für die Spracheinträge $navLang enthält und das Menü selbst in nav.txt mit Einträgen der Form:

        1home
        2news
        2about
        1category1
        1contact

        ..definiert ist, wobei erste Zeichen für die Ebene im Menü steht und der Text danach so eine Art Seitenname ist.

        >>there you go<<
        Zuletzt geändert von tobibeer; 12.11.2007, 19:00.

        Kommentar

        Lädt...
        X