Navi-Template (3 Ebenen / Online True) von der REDAXO-Seite

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

Navi-Template (3 Ebenen / Online True) von der REDAXO-Seite

Beitragvon svenalbert » 8. Dez 2005, 18:44

3 Ebenen / Online True ...
Stellt bis zu 3 Ebenen dar. Kategorien müssen online sein. Darstellung der Unterkategorie nur, wenn die Oberkategorie aktiv ist.


Eigentlich wollte ich fragen, ob es so eine Navigation schon gibt. Hab dann aber nochmal genau gelesen und hab die ja dann gefunden.

Meine Frage: Brauch ich da Ergänzungen für das CSS-File oder nicht?
Ich glaube (so beim grob drüber weg schauen) wird .menu und .submenu gebraucht.


Danke.
Sven
Benutzeravatar
svenalbert
 
Beiträge: 1295
Registriert: 24. Nov 2005, 16:21
Wohnort: Clausthal-Zellerfeld / lower saxony

Beitragvon Thomas.Blum » 8. Dez 2005, 18:56

Hej Sven,

mehr brauchst du bei dieser Navigation wirklich nicht. Also a.menu bzw a.submenu reicht um die links zu formatieren.

mir fällt aber auf, das dies eine unschöne navigation ist. sie wird nur mit a-tags ausgegeben und nicht als liste. des weiteren hast du keinen bezug auf den aktuellen link.

wer hat die bloss unter downloads veröffentlicht ? :-)

thomas
blumbeet - web.studio - Dresden - 0351 217 6225
webbude - Blog über CSS.XHTML.REX
Ein Wunschzettel
Benutzeravatar
Thomas.Blum
Entwickler
 
Beiträge: 4670
Registriert: 24. Aug 2004, 21:11
Wohnort: Dresden

Beitragvon svenalbert » 9. Dez 2005, 00:02

Ein gewisser Herr von blumbeet - web.studio *G*


Gibt es sowas in der Art ein bißchen moderner? Die Aufteilung in horizontale und vertikale Navi ist ja im Prinzip schon das gleiche in anders. ^^

Mich "stören" ein wenige die Menüpunkte im untermenu, das könnten ja teilweise recht viele werden um von Anfang an, dabei zu stehen.



Sven
Benutzeravatar
svenalbert
 
Beiträge: 1295
Registriert: 24. Nov 2005, 16:21
Wohnort: Clausthal-Zellerfeld / lower saxony

Beitragvon Thomas.Blum » 9. Dez 2005, 00:08

Hej Sven,

ich bastel dir gern ne Navi. Was sollte sie alles können?

- welche art? hori und verti oder nur vertikal?
- nur Cats die Online sind?
- wann sollen die unterpunkte scheinen? immer da oder erst nach klick auf den jeweiligen oberpunkt?
- ...

vg thomas
blumbeet - web.studio - Dresden - 0351 217 6225
webbude - Blog über CSS.XHTML.REX
Ein Wunschzettel
Benutzeravatar
Thomas.Blum
Entwickler
 
Beiträge: 4670
Registriert: 24. Aug 2004, 21:11
Wohnort: Dresden

Beitragvon svenalbert » 9. Dez 2005, 00:41

Gut, im ICQ antworteste nicht, dann schreib ich doch noch kurz hier.


Also in der 3.1 Demo sind ja die zwei Navigationen dabei.

Einmal die sowohl horizontal als auch vertikal ist, und die die nur vertikal ist.
Bei der ersten, kommen erst bei nem Klick auf die Kategorie die enthaltenen Kategorien.

Wenn das auch für ein rein vertikales Menü gehen würde, daß dann halt die Subkategorien unter der Oberkategorie auftauchen, das wär genial. Und die nächste Oberkategorie würde dann halt ganz normal darunter stehen.


kurz:
- nur verti
- nur online
- erst nach klick auf oberpunkt


Sven
Benutzeravatar
svenalbert
 
Beiträge: 1295
Registriert: 24. Nov 2005, 16:21
Wohnort: Clausthal-Zellerfeld / lower saxony

Beitragvon Thomas.Blum » 9. Dez 2005, 01:07

- 3 Ebenen,
- Navigation als ul-Liste,
- nur Online,
- Kind-Kategorie wird angezeigt nach Klick auf Eltern-Kategorie

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];


/* START 1st level categories */
$nav .= '<ul class="nav1st">';
foreach (OOCategory::getRootCategories() as $lev1) {
      
   if ($lev1->isOnline(true)):
      if ($lev1->getId() == $path1) {
         $nav .= '<li class="active"><a class="current" href="'.$lev1->getUrl().'">'.$lev1->getName().'</a>';
      }
      // 2nd level - no active link
      else {
         $nav .= '<li><a href="'.$lev1->getUrl().'">'.$lev1->getName().'</a>';
      }
         
      // 1st level had categories? -> go on
      $lev1Size = sizeof($lev1->getChildren());
   
      if ($lev1->getId() == $path1) {
         if ($lev1Size != "0") {
            $nav .= '<ul class="nav2nd">';

            // START 2nd level categories
            foreach ($lev1->getChildren() as $lev2):
               if ($lev2->isOnline(true)) {
                  // 2nd level - active link
                  if ($lev2->getId() == $path2) {
                     $nav .= '<li class="active"><a class="current" href="'.$lev2->getUrl().'">'.$lev2->getName().'</a>';
                  }
                  // 2nd level - no active link
                  else {
                     $nav .= '<li><a href="'.$lev2->getUrl().'">'.$lev2->getName().'</a>';
                  }
                  
                  // 2nd level had categories? -> go on
                  $lev2Size = sizeof($lev2->getChildren());
   
                  if ($lev2->getId() == $path2) {
                     if ($lev2Size != "0") {
                        $nav .= '<ul class="nav3rd">';

                        // START 3rd level categories
                        foreach ($lev2->getChildren() as $lev3):
                           if ($lev3->isOnline(true)) {
                              // 3rd level - active link
                              if ($lev3->getId() == $path3) {
                                 $nav .= '<li class="active"><a class="current" href="'.$lev3->getUrl().'">'.$lev3->getName().'</a></li>';
                              }
                              // 3rd level - no active link
                              else {
                                 $nav .= '<li><a href="'.$lev3->getUrl().'">'.$lev3->getName().'</a></li>';
                              }
                           }
                        endforeach;
                        // END 3rd level categories
      
                        $nav .= '</ul>';
                     } // END by if ($lev2Size != "0"):
                  }
                  $nav .= '</li>';
               }
            endforeach;
            // END 2nd level categories
      
            $nav .= '</ul>';
         } // END by if ($lev1Size != "0"):
      }
      $nav .= '</li>';

   endif; // END by if ($lev1->isOnline())
}
$nav .= '</ul>';
// END 1st level categories

print $nav;
?>


vg Thomas
blumbeet - web.studio - Dresden - 0351 217 6225
webbude - Blog über CSS.XHTML.REX
Ein Wunschzettel
Benutzeravatar
Thomas.Blum
Entwickler
 
Beiträge: 4670
Registriert: 24. Aug 2004, 21:11
Wohnort: Dresden

Beitragvon svenalbert » 9. Dez 2005, 15:12

Funktioniert spitze.

Hab's mir jetzt noch so angepaßt, daß ich es im Demo-template anstatt der vertikalen Navi nutzen kann.


Danke nochmal.



EDIT:
Kannst Du vielleicht ganz fix (du scheinst da schneller zu sein) den Pfadaufbau für den Breadcrumb-Pfad mit einbauen.
Benutzeravatar
svenalbert
 
Beiträge: 1295
Registriert: 24. Nov 2005, 16:21
Wohnort: Clausthal-Zellerfeld / lower saxony

Beitragvon hawk » 12. Dez 2005, 11:38

hi,
also das Template mit 2 Ebenen funktioniet bei mir. Nur kom ich bei diesem nicht weiter.
3 Ebenen also:

hallo
- hallo2 (unterpunkt hallo)
- hallo 3 (unterpunkt hallo2)

wären für mich auch interessant aber mit dem obigen Code funktioniert das bei mir nicht.
mfg hawk
hawk
 
Beiträge: 15
Registriert: 5. Dez 2005, 14:36

Beitragvon Thomas.Blum » 12. Dez 2005, 11:51

Hej Hawk,

ich verstehe deine Anforderungen an der Navi nicht ganz. Die Unterkatrgorien werden bei diesem Code erst angezeigt, wenn man auf die Kategorie geklickt hat.

Thomas
blumbeet - web.studio - Dresden - 0351 217 6225
webbude - Blog über CSS.XHTML.REX
Ein Wunschzettel
Benutzeravatar
Thomas.Blum
Entwickler
 
Beiträge: 4670
Registriert: 24. Aug 2004, 21:11
Wohnort: Dresden

Beitragvon hawk » 12. Dez 2005, 12:03

hi, ja war mein Fehler - ich wage es kaum zu sagen - aber ich hab vergessen, die Ebene3 Kategorie Online zu aktivieren :)

Die Unterkatrgorien werden bei diesem Code erst angezeigt, wenn man auf die Kategorie geklickt hat.


und das solls ja auch.

Danke für die schnelle Antwort auf diese dumme Frage! :)


--------------------------
Doch noch was:

und zwar wie mach ich das, dass die 3te Ebene im Sitemap übernommen wird? und das breadcrumb nicht nur die Startseite anzeigt?
mfg hawk
hawk
 
Beiträge: 15
Registriert: 5. Dez 2005, 14:36

Beitragvon svenalbert » 12. Dez 2005, 15:26

beim breadcrumb kann ich die helfen, ich hab es soweit gebracht, daß es den pfad mitnimmt.

bei der sitemap mußt du sicherlich das modul erweitern. aber bis zu level 3 bin ich bisher noch nicht gekommen.


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];


/* START 1st level categories */
$navLeftCol .= '<ul class="nav1st">';
foreach (OOCategory::getRootCategories() as $lev1) {
     
   if ($lev1->isOnline(true)):
      if ($lev1->getId() == $path1) {
         $navLeftCol .= '<li class="active"><a class="current" href="'.$lev1->getUrl().'">'.$lev1->getName().'</a>';
         if ($lev1->getId() != "1") {
            $sitePath .= ' ›› <a href="'.$lev1->getUrl().'">'.$lev1->getName().'</a>';
         }
         $titlePath .= ' >> '.$lev1->getName();
      }
      // 2nd level - no active link
      else {
         $navLeftCol .= '<li><a href="'.$lev1->getUrl().'">'.$lev1->getName().'</a>';
      }
         
      // 1st level had categories? -> go on
      $lev1Size = sizeof($lev1->getChildren());
   
      if ($lev1->getId() == $path1) {
         if ($lev1Size != "0") {
            $navLeftCol .= '<ul class="nav2nd">';

            // START 2nd level categories
            foreach ($lev1->getChildren() as $lev2):
               if ($lev2->isOnline(true)) {
                  // 2nd level - active link
                  if ($lev2->getId() == $path2) {
                     $navLeftCol .= '<li class="active"><a class="current" href="'.$lev2->getUrl().'">'.$lev2->getName().'</a>';
                     $sitePath .= ' ›› <a href="'.$lev2->getUrl().'">'.$lev2->getName().'</a>';
                     $titlePath .= ' >> '.$lev2->getName();
                  }
                  // 2nd level - no active link
                  else {
                     $navLeftCol .= '<li><a href="'.$lev2->getUrl().'">'.$lev2->getName().'</a>';
                  }
                 
                  // 2nd level had categories? -> go on
                  $lev2Size = sizeof($lev2->getChildren());
   
                  if ($lev2->getId() == $path2) {
                     if ($lev2Size != "0") {
                        $navLeftCol .= '<ul class="nav3rd">';

                        // START 3rd level categories
                        foreach ($lev2->getChildren() as $lev3):
                           if ($lev3->isOnline(true)) {
                              // 3rd level - active link
                              if ($lev3->getId() == $path3) {
                                 $navLeftCol .= '<li class="active"><a class="current" href="'.$lev3->getUrl().'">'.$lev3->getName().'</a></li>';
                                 $sitePath .= ' ›› <a href="'.$lev3->getUrl().'">'.$lev3->getName().'</a>';
                                 $titlePath .= ' >> '.$lev3->getName();
                              }
                              // 3rd level - no active link
                              else {
                                 $navLeftCol .= '<li><a href="'.$lev3->getUrl().'">'.$lev3->getName().'</a></li>';
                              }
                           }
                        endforeach;
                        // END 3rd level categories
     
                        $navLeftCol .= '</ul>';
                     } // END by if ($lev2Size != "0"):
                  }
                  $navLeftCol .= '</li>';
               }
            endforeach;
            // END 2nd level categories
     
            $navLeftCol .= '</ul>';
         } // END by if ($lev1Size != "0"):
      }
      $navLeftCol .= '</li>';

   endif; // END by if ($lev1->isOnline())
}
$navLeftCol .= '</ul>';
// END 1st level categories

if ($REX['CUR_CLANG'] == 1) $breadcrumb = 'You are here ›› <a href="index.php?clang=1">Home</a> '.$sitePath;
else $breadcrumb = 'Sie sind hier ›› <a href="index.php">Startseite</a> '.$sitePath;

// print $navLeftCol;
?>
Benutzeravatar
svenalbert
 
Beiträge: 1295
Registriert: 24. Nov 2005, 16:21
Wohnort: Clausthal-Zellerfeld / lower saxony

Beitragvon hawk » 12. Dez 2005, 16:25

Hi, svenalbert. Danke, das mit dem Breadcrumb funzt einwandfrei mit dem geposteten Code!

Ich hab das mit dem Sitemap hinbekommen:

Code: Alles auswählen
<?php

echo '<ul class="sitemap1st">';
foreach (OOCategory::getRootCategories() as $lev1):
   $catId = $lev1->getId();

   
   if($lev1->isOnline()):
   
      $lev1Size = sizeof($lev1->getChildren());
      
      print '<li><a href="'.$lev1->getUrl().'">'.$lev1->getName().'</a>';

      $lev1Size = sizeof($lev1->getChildren());
      if($lev1Size != "0"):
         echo '<ul class="sitemap2nd">';
         foreach ($lev1->getChildren() as $lev2):

         if ($lev2->isOnline()):
         print '<li><a href="'.$lev2->getUrl().'">'.$lev2->getName().'</a></li>';
         endif;
         endforeach;

                                                echo '<ul class="sitemap3nd">';
         foreach ($lev2->getChildren() as $lev3):

         if ($lev3->isOnline()):
         print '<li><a href="'.$lev3->getUrl().'">'.$lev3->getName().'</a></li>';
         endif;
                                   endforeach;
         echo '</ul>';

      echo '</ul>';
            
      endif;
        echo '</li>';      
   endif;
endforeach;
echo '</ul>';

?>



bei mir funzt das..
mfg hawk
hawk
 
Beiträge: 15
Registriert: 5. Dez 2005, 14:36

Re: Vielen Dank

Beitragvon Thomas.Blum » 30. Jan 2006, 08:04

Hej,
brans hat geschrieben:Vielen Dank für diese wunderbare Navigation.

DaNichtFür
brans hat geschrieben:Du hast mir als Redaxo-Anfänger damit wirklich sehr geholfen.

Das ist schön zu hören und freut uns natürlich

brans hat geschrieben:Könntest du sie nicht noch in den Downloads zur Verfügung stellen, damit man sie leichter finden kann?

Sollte erledigt sein.

vg Thomas
blumbeet - web.studio - Dresden - 0351 217 6225
webbude - Blog über CSS.XHTML.REX
Ein Wunschzettel
Benutzeravatar
Thomas.Blum
Entwickler
 
Beiträge: 4670
Registriert: 24. Aug 2004, 21:11
Wohnort: Dresden

Beitragvon andre.5tz » 30. Jan 2006, 12:31

Hallo,

ich schließe mich mal dem Dank von Brans an und kann das nur bestätigen. Der Dank gilt natürlich allen Redaxo-Entwicklern und Helfern :)

Zur Navigation, ich habe festgestellt, dass bei vorhandenen offline-geschalteten Kategorien im Quelltext ein <ul></ul> erzeugt wird, so dass der Validator meckert. Daher habe ich nach einigen Tests die Zeilen
Code: Alles auswählen
$nav .= '<ul class="nav2nd">';
verschoben - scheint zu funktionieren.

Die entsprechenden Zeilen sind mit

//*****Zeile <ul... auskommentiert und verschoben
//*****Zeile <ul... nach Prüfung der Kategorie online-true wieder eingefügt

kommentiert.

Vielleicht hilft es ja weiter.

LG
André

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];

/* START 1st level categories */
$nav .= '<ul class="nav1st">';
foreach (OOCategory::getRootCategories() as $lev1) {
     
   if ($lev1->isOnline(true)):
      if ($lev1->getId() == $path1) {
         $nav .= '<li class="active"><a class="current" href="'.$lev1->getUrl().'">'.$lev1->getName().'</a>';
      }
      // 2nd level - no active link
      else {
         $nav .= '<li><a href="'.$lev1->getUrl().'">'.$lev1->getName().'</a>';
      }
         
      // 1st level had categories? -> go on
      $lev1Size = sizeof($lev1->getChildren());
   
      if ($lev1->getId() == $path1) {
         if ($lev1Size != "0") {
//*****Zeile <ul... auskommentiert und verschoben
           //$nav .= '<ul class="nav2nd">';

            // START 2nd level categories
            foreach ($lev1->getChildren() as $lev2):
               if ($lev2->isOnline(true)) {
//*****Zeile <ul... nach Prüfung der Kategorie online-true wieder eingefügt
                  $nav .= '<ul class="nav2nd">';
                  // 2nd level - active link
                  if ($lev2->getId() == $path2) {
                     $nav .= '<li class="active"><a class="current" href="'.$lev2->getUrl().'">'.$lev2->getName().'</a>';
                  }
                  // 2nd level - no active link
                  else {
                     $nav .= '<li><a href="'.$lev2->getUrl().'">'.$lev2->getName().'</a>';
                  }
                 
                  // 2nd level had categories? -> go on
                  $lev2Size = sizeof($lev2->getChildren());
   
                  if ($lev2->getId() == $path2) {
                     if ($lev2Size != "0") {
//*****Zeile <ul... auskommentiert und verschoben
                       //$nav .= '<ul class="nav3rd">';

                        // START 3rd level categories
                        foreach ($lev2->getChildren() as $lev3):
                           if ($lev3->isOnline(true)) {
//*****Zeile <ul... nach Prüfung der Kategorie online-true wieder eingefügt
                               $nav .= '<ul class="nav3rd">';
                              // 3rd level - active link
                              if ($lev3->getId() == $path3) {
                                 $nav .= '<li class="active"><a class="current" href="'.$lev3->getUrl().'">'.$lev3->getName().'</a></li>';
                              }
                              // 3rd level - no active link
                              else {
                                 $nav .= '<li><a href="'.$lev3->getUrl().'">'.$lev3->getName().'</a></li>';
                              }
                           }
                        endforeach;
                        // END 3rd level categories
//*****</ul> wenn die 2. Ebene Online ist - if ... und }
                        if ($lev3->isOnline(true)) {
                        $nav .= '</ul>';
                        }
                     } // END by if ($lev2Size != "0"): && ($lev3->isOnline(true))
                  }
                  $nav .= '</li>';
               }
            endforeach;
            // END 2nd level categories

//*****</ul> wenn die 2. Ebene Online ist - if ... und }
            if ($lev2->isOnline(true)) {
     
            $nav .= '</ul>';
            }
         } // END by if ($lev1Size != "0"): && ($lev2->isOnline(true))
      }
      $nav .= '</li>';

   endif; // END by if ($lev1->isOnline())
}
$nav .= '</ul>';
// END 1st level categories

// print $nav;
?>
andre.5tz
 
Beiträge: 33
Registriert: 28. Nov 2005, 21:20

Nächste

Zurück zu Templates/Navigationen [R3]

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast