[gelöst] Dritte Ebene nur bei aktiver 2. Ebene anzeigen

Wie verwendet man Templates oder erstellt Navigationen und passt diese an.

[gelöst] Dritte Ebene nur bei aktiver 2. Ebene anzeigen

Beitragvon backes » 22. Aug 2007, 11:26

Hallo zusammen,

habe gestern begonnen das erste Projekt mit Redaxo umzusetzen. Soweit bin ich auch schon recht zufrieden mit dem Ergebnis. :)

Nun sitze ich an der Navigation, diese soll auf der Seite an 2 Stellen stehen.

Die erste Navigation enthält in diesem Fall die erste und zweite Ebene der Struktur. Und die andere Navigation soll die dritte Ebene enthalten.

Soweit funktioniert die darstellung auch, leider wird die dritte Ebene immer angezeigt, sobald ich in einer Hauptkategorie bin, wo eine Dritte Ebene vorhanden ist. Ich möchte die zugehörige dritte aber erst angezeigt bekommen, wenn die ein Punkt in 2. Ebene angeklickt wurde.

Folgenden Code habe ich gefunden, und ein wenig angepasst, also HTML-Einrückungen für die Formatierung und etwas andere Namen etc.

Code: Alles auswählen
<?php
// EXPLODE PATH
$PATH = explode("|",$this->getValue("path").$this->getValue("article_id")."|");

// GET CURRENTS
$path1 = $PATH[1];
$path2 = $PATH[2];
$path3 = $PATH[3];

// Hauptebene Kategorien

$mainNav .= "\n\t".'<ul class="nav1st">'."\n";
foreach (OOCategory::getRootCategories() as $lev1) {
   if($lev1->isOnline()):
      if($lev1->getId() == $path1) {
         // Level 1 aktiver Link
         $mainNav .= "\t\t".'<li class="active1st"><a class="current" href="'.$lev1->getUrl().'">'.$lev1->getName().'</a>'."\n";
      } else {
         // Level 1 nicht aktiver Link
         $mainNav .= "\t\t".'<li><a href="'.$lev1->getUrl().'">'.$lev1->getName().'</a>'."\n";
      }
      
      // Wenn erste Ebebe Unterkategorien hat weitermachen
      $lev1Size = sizeof($lev1->getChildren());
      if($lev1->getId() == $path1) {
         if($lev1Size != "0"):
            $mainNav .= "\t\t".'<ul class="nav2nd">'."\n";
            //Level 2 Kategorien ausgeben
            foreach($lev1->getChildren() as $lev2):
               if($lev2->isOnline()):
                  if($lev2->getId() == $path2) {
                     //Level 2 aktiver Link
                     $mainNav .= "\t\t\t".'<li class="active2nd"><a class="current" href="'.$lev2->getUrl().'">'.$lev2->getName().'</a>';
                  } else {
                     //Level 2 nicht aktiver Link
                     $mainNav .= "\t\t\t".'<li><a href="'.$lev2->getUrl().'">'.$lev2->getName().'</a>';
                  }
                  //Wenn zweite Ebene Unterkategorien hat weitermachen
                  $lev2Size = sizeof($lev2->getChildren());
                  if($lev2Size != "0"):
                     $subNav .= "\t\t\t".'<ul class="nav3rd">'."\n\t\t\t".'<li>'.$lev2->getName()."\n";
                     $subNav .= "\t\t\t".'<ul>'."\n";
                     //Level 3 Kategorien ausgeben
                     foreach($lev2->getChildren() as $lev3):
                        if($lev3->isOnline()):
                           if($lev3->getId() == $path3) {
                              //Level 3 aktiver Link
                              $subNav .= "\t\t\t\t".'<li class="active3rd"><a href="'.$lev3->getUrl().'">'.$lev3->getName().'</a></li>'."\n";
                           } else {
                              //Level 3 nicht aktiver Link
                              $subNav .= '<li><a href="'.$lev3->getUrl().'">'.$lev3->getName().'</a></li>'."\n";
                           }
                        endif; //Ende Level 3 isOnline
                     endforeach; //Ende Level 3 foreach
                     $subNav .= "\t\t\t".'</ul>'."\n";
                     $subNav .= "\t\t\t".'</li>'."\n";
                     $subNav .= "\t\t\t".'</ul>'."\n";
                  endif; //Ende Level 3 gibts da überhaupt was
                  
                  $mainNav .= "\t\t".'</li>';
               endif; //Ende Level 2 isOnline
            endforeach; //Ende Level 2 foreach
            
            $mainNav .= "\t\t".'</ul>';
         endif; //Ende Level 2 gibts da überhaupt was
      }
      
      $mainNav .= "\t\t".'</li>';
   endif; //Ende Level 1
}

$mainNav .= "\t".'</ul>';


Ich hoffe ihr versteht was ich bezecken möchte und kennt eine Lösung, die Suche hat mir nicht das gebracht was ich wollte. Vielleicht auch falsche Suchkombinationen. :(

Vielen dank schonmal,

backes
Zuletzt geändert von backes am 22. Aug 2007, 16:19, insgesamt 1-mal geändert.
backes
 
Beiträge: 40
Registriert: 22. Aug 2007, 11:18

lösung

Beitragvon backes » 22. Aug 2007, 16:19

Problem doch noch selbst gefunden.

Das Brett war mal wieder größer als alles andere!

Man musste nur den Block, der die 3. Ebene erstellt dahin verschieben, wo per if der Aktiv Status der 2. Ebene gesetzt wird.

hier der vollständige Code:

Code: Alles auswählen
<?php
// EXPLODE PATH
$PATH = explode("|",$this->getValue("path").$this->getValue("article_id")."|");

// GET CURRENTS
$path1 = $PATH[1];
$path2 = $PATH[2];
$path3 = $PATH[3];

// Hauptebene Kategorien

$mainNav .= "\n\t".'<ul class="nav1st">'."\n";
foreach (OOCategory::getRootCategories() as $lev1) {
   if($lev1->isOnline()):
      if($lev1->getId() == $path1) {
         // Level 1 aktiver Link
         $mainNav .= "\t\t".'<li class="head"><a class="headlink" href="'.$lev1->getUrl().'">'.$lev1->getName().'</a>'."\n";
      } else {
         // Level 1 nicht aktiver Link
         $mainNav .= "\t\t".'<li class="head"><a class="headlink" href="'.$lev1->getUrl().'">'.$lev1->getName().'</a>'."\n";
      }
      
      // Wenn erste Ebebe Unterkategorien hat weitermachen
      $lev1Size = sizeof($lev1->getChildren());
      if($lev1->getId() == $path1) {
         if($lev1Size != "0"):
            $mainNav .= "\t\t".'<ul class="nav2nd">'."\n";
            //Level 2 Kategorien ausgeben
            foreach($lev1->getChildren() as $lev2):
               if($lev2->isOnline()):
                  if($lev2->getId() == $path2) {
                     //Level 2 aktiver Link
                     $mainNav .= "\t\t\t".'<li class="active">'.$lev2->getName().'';
                     
                     //Hier neu eingefügt
                     //Wenn zweite Ebene Unterkategorien hat weitermachen
                     $lev2Size = sizeof($lev2->getChildren());
                     if($lev2Size != "0"):
                        //ab hier mainNav in subNav ändern
                        $subNav .= "\t\t\t".'<ul class="nav3rd">'."\n\t\t\t".'<li class="head"><a class="headlink" href="'.$lev2->getUrl().'">'.$lev2->getName().'</a>'."\n";
                        $subNav .= "\t\t\t".'<ul>'."\n";
                        //Level 3 Kategorien ausgeben
                        foreach($lev2->getChildren() as $lev3):
                           if($lev3->isOnline()):
                              if($lev3->getId() == $path3) {
                                 //Level 3 aktiver Link
                                 $subNav .= "\t\t\t\t".'<li class="active3rd"><a href="'.$lev3->getUrl().'">'.$lev3->getName().'</a></li>'."\n";
                              } else {
                                 //Level 3 nicht aktiver Link
                                 $subNav .= '<li><a href="'.$lev3->getUrl().'">'.$lev3->getName().'</a></li>'."\n";
                              }
                           endif; //Ende Level 3 isOnline
                        endforeach; //Ende Level 3 foreach
                        $subNav .= "\t\t\t".'</ul>'."\n";
                        $subNav .= "\t\t\t".'</li>'."\n";
                        $subNav .= "\t\t\t".'</ul>'."\n";
                     endif; //Ende Level 3 gibts da überhaupt was
                  } else {
                     //Level 2 nicht aktiver Link
                     $mainNav .= "\t\t\t".'<li><a href="'.$lev2->getUrl().'">'.$lev2->getName().'</a>';
                  }
                  $mainNav .= "\t\t".'</li>';
               endif; //Ende Level 2 isOnline
            endforeach; //Ende Level 2 foreach
            
            $mainNav .= "\t\t".'</ul>';
         endif; //Ende Level 2 gibts da überhaupt was
      }
      
      $mainNav .= "\t\t".'</li>';
   endif; //Ende Level 1
}

$mainNav .= "\t".'</ul>';
?>


Hoffe es kann damit jemand noch etwas anfangen!

backes
backes
 
Beiträge: 40
Registriert: 22. Aug 2007, 11:18


Zurück zu Templates/Navigationen [R3]

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron