Navigation aufteilen

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

Navigation aufteilen

Beitragvon paddle » 20. Feb 2007, 15:29

Hallo

Gerne will ich die Navigation aufteilen, sprich ein Teil wird oben horizontal (wenn möglich mit Dropdown) angezeigt und der andere Teil links vertikal. Weiter sollte bei der vertikalen Navi bei einer Kategorie bereits die 1. Submenü-Ebene angezeigt werden.

Ich bin bereits am Sachen ausprobieren und habe in der Struktur jeweils eine Kategrie für Navi Top und Navi Links angelegt, worin die weitern Kategorien enthalten sind ...aber es will noch nicht wirklich klappen... bin noch PHP-Anfägner...
Hat jemand ein Tipp, wie ich dies am besten lösen kann? Vielen Dank!!!

Gruss,
Pat
paddle
 
Beiträge: 118
Registriert: 13. Jun 2006, 16:27
Wohnort: Zürich, Schweiz

Beitragvon raybeam » 20. Feb 2007, 15:45

Hallo Pat,

meinst Du so etwas:

http://www.redaxo.de/168-Templatedetail ... late_id=24

Gruß

Peter
Benutzeravatar
raybeam
 
Beiträge: 445
Registriert: 5. Feb 2006, 20:30

Beitragvon paddle » 20. Feb 2007, 16:17

Hello Peter

Danke für deine Antwort!

...nein, nicht ganz, da jeder Benutzer die gleiche Navi sieht...

Es sollte wie folgt aussehen:

Hauptmenü Horizontal (oben - dropdown): Newsletter, Spenden, Werben, Kontakt, etc.

Hauptmenü Vertikal (links): Kanäle, Regionen, Wettbewerbe, Links, etc.

Beim Hauptmenü Vertikal sollten dann z.B. nur bei Kanäle von Anfang die Kinder angezeigt werden, bei den anderen Kategorien nicht.

Gruss,
Pat
paddle
 
Beiträge: 118
Registriert: 13. Jun 2006, 16:27
Wohnort: Zürich, Schweiz

Beitragvon raybeam » 20. Feb 2007, 16:25

Hi Pat,

also getrennte Benutzerbereiche können mit der o.g. Navi bedient werden, müssen aber nicht :wink:

Man kann es also auch als normale Navi nutzen.

Haben die Menüpunkte im Hauptmenü Horizontal auch "Untermenüpunkte"?

Wenn nicht, würde es meiner Meinung nach doch passen.
Benutzeravatar
raybeam
 
Beiträge: 445
Registriert: 5. Feb 2006, 20:30

Beitragvon paddle » 20. Feb 2007, 16:36

Hi

Ja, ein paar davon haben auch Untermenüpunkte... ich schau mir das Template mal genauer an... :wink:

Vielen Dank!

Gruss,
Pat
paddle
 
Beiträge: 118
Registriert: 13. Jun 2006, 16:27
Wohnort: Zürich, Schweiz

Beitragvon paddle » 21. Feb 2007, 13:19

Hi Peter

Hab mir dein Template mal angeschaut aber ich weiss noch nicht so genau, wie ich es in meinem Fall anpassen müsste... :? ... wären die Kategorien in der TopNavi dann Submenüpunkte...?

Ich hab unter folgendem Topic einen Code gefunden, der das Aufteilen der Navi betrifft:
http://forum.redaxo.de/ftopic4338.html

diesen hab ich etwas angepasst... nun werden die Kategorien am richtigen Ort dargestellt aber ich kann die Subkategorien nicht aufrufen... hier der 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];
$path4 = $PATH[4];

/* START 1st level categories */


foreach (OOCategory::getRootCategories() as $lev1)
   {
   if($lev1->getId()==1)
      {
      $navTop .= '<ul>';
      }
   else
      {
      $navLeft .= '<ul>';
      }
   if ($lev1->getId() == $path1)
      {
      $titlePath .= ' >> '.$lev1->getName();
      }
   // 1st level had categories? -> go on
   $lev1Size = sizeof($lev1->getChildren());
   if ($lev1Size != "0")
      :
      // START 2nd level categories
      foreach ($lev1->getChildren() as $lev2)
         :
         if ($lev2->isOnline())
            :
            // 2nd level - active link
            if ($lev2->getId() == $path2)
               {
               if ($lev1-> getId()==1)
                  {
                  $navTop .= '<li><a href="'.$lev2->getUrl().'" class="on" >'.$lev2->getName().'</a></li>';
                  }
               else
                  {
                  $navLeft .= '<li><a href="'.$lev2->getUrl().'" class="on" >'.$lev2->getName().'</a></li>';
                  }
               $sitePath .= ' ›› <a href="'.$lev2->getUrl().'">'.$lev2->getName().'</a>';
               $titlePath .= ' >> '.$lev2->getName();
               }
            // 2nd level - no active link
            else
               {
               if ($lev1-> getId()==1)
                  {
                  $navTop .= '<li><a href="'.$lev2->getUrl().'">'.$lev2->getName().'</a></li>';
                  }
               else
                  {
                  $navLeft .= '<li><a href="'.$lev2->getUrl().'">'.$lev2->getName().'</a></li>';
                  }
               }
         endif;         
      endforeach;
      // END 2nd level categories
    
     // 1st level had categories? -> go on
   $lev2Size = sizeof($lev2->getChildren());
   if ($lev2Size != "0")
      :
      // START 2nd level categories
      foreach ($lev2->getChildren() as $lev3)
         :
         if ($lev3->isOnline())
            :
            // 2nd level - active link
            if ($lev3->getId() == $path3)
               {
               if ($lev1-> getId()==1)
                  {
                  $navTop .= '<li><a href="'.$lev3->getUrl().'" class="on" >'.$lev3->getName().'</a></li>';
                  }
               else
                  {
                  $navLeft .= '<li><a href="'.$lev3->getUrl().'" class="on" >'.$lev3->getName().'</a></li>';
                  }
               $sitePath .= ' ›› <a href="'.$lev3->getUrl().'">'.$lev3->getName().'</a>';
               $titlePath .= ' >> '.$lev3->getName();
               }
            // 2nd level - no active link
            else
               {
               if ($lev1-> getId()==1)
                  {
                  $navTop .= '<li><a href="'.$lev3->getUrl().'">'.$lev3->getName().'</a></li>';
                  }
               else
                  {
                  $navLeft .= '<li><a href="'.$lev3->getUrl().'">'.$lev3->getName().'</a></li>';
                  }
               }
         endif;         
      endforeach;
      // END 2nd level categories

   endif; // END by if ($lev1Size != "0"):
   endif; // END by if ($lev2Size != "0"):
   if($lev1-> getId()==1)
      {
      $navTop .= '</ul>';
      }
   else
      {
      $navLeft .= '</ul>';
      }
}

// END 1st level categories

?>


Ich wäre froh um ein paar Denkanstösse... wahrscheinlich denke ich viel zu kompliziert...

Vielen Dank!

Gruss,
Pat
paddle
 
Beiträge: 118
Registriert: 13. Jun 2006, 16:27
Wohnort: Zürich, Schweiz

Beitragvon raybeam » 21. Feb 2007, 17:46

Hi Pat,

zu Deinem Quellcode kann ich nichts beitragen - vielleicht hilft aber dies weiter:

Ich habe den Quellcode meines Navi-Templates ein wenig angepasst. Wenn Du entsprechend Thomas Vorschlag (in dem von dir benannten Topic) zwei "Hauptkategorien" anlegst, die die Basis der beiden Navigationen deiner Seite sind, dann müsste es mit folgenden Änderungen funktionieren:

1. Ersetze folgenden Quellcode ab Zeile 333 (bzw. kommentiere ihn aus):
Code: Alles auswählen
      // Durch ...::getRootCategories(1) anstatt ...::getRootCategories()
      // werden nur die Root-Kategorien durchlaufen die "online" sind
      $navi=array();
      foreach (OOCategory::getRootCategories(1) as $nav)
      {
        $navi=build_navigation($userTyp, $nav, $path, $subUl);
        $navMain.=$navi[0];
        $navSub.=$navi[1];
      }


mit folgendem:
Code: Alles auswählen
   // Zwei Oberkategorien in zwei Hauptmenüs anzeigen -------
   // hier ID der ersten Kategorie eintragen
   $firstCat = '1';
   // hier ID der zweiten Kategorie eintragen
   $secondCat = '2';

   // Navigation der ersten Kategorie aufbauen
   $nav1 = OOCategory::getCategoryById($firstCat);

   if($path[1]!=$firstCat)
   {
        $firstPath[1] = $firstCat;
     }
     else
     {
        $firstPath = $path;
     }
   $navi1=build_navigation($userTyp, $nav1, $firstPath, $subUl);

   // Navigation der zweiten Kategorie aufbauen
   $nav2 = OOCategory::getCategoryById($secondCat);

   if($path[1]!=$secondCat)
   {
        $secondPath[1] = $secondCat;
     }
     else
     {
        $secondPath = $path;
     }
   $navi2=build_navigation($userTyp, $nav2, $secondPath, $subUl);

   if($subUl=='extra')
   {
      $navMain.=$navi1[1];
      $navSub.=$navi2[1];
   }
   else
   {
      $navMain.=$navi1[0];
      $navSub.=$navi2[0];
   }
      
   //-------------------------------------------------------


Nun musst du noch $subUl auf "extra" umstellen. (Zeile 329)

Code: Alles auswählen
//////////////////////////////////////////////

    $subUl = 'extra';

//////////////////////////////////////////////


Nun kannst Du deine beiden Menüs über die Variablen $navigation und $subNavigation in deinem Seitentemplate "verteilen".

Ich habe es gerade mal bei mir ausprobiert und es funktionierte.

Gruß

Peter
Benutzeravatar
raybeam
 
Beiträge: 445
Registriert: 5. Feb 2006, 20:30

Beitragvon paddle » 22. Feb 2007, 11:59

perfekt!! super, vielen dank :D
... hab ich mal wieder was gelernt!

wünsch dir nen schönen tag und viele grüsse aus dem schon fast sommerlichen zürich!
pat
paddle
 
Beiträge: 118
Registriert: 13. Jun 2006, 16:27
Wohnort: Zürich, Schweiz

Beitragvon raybeam » 22. Feb 2007, 12:34

Freut mich :wink:

Grüße vom (noch) sonnigen Niederrhein

Peter
Benutzeravatar
raybeam
 
Beiträge: 445
Registriert: 5. Feb 2006, 20:30

Beitragvon steri » 21. Sep 2007, 17:17

hallo
ich hab mir gerade diesen beitrag durchgelesen und das mit der aufgeteilten naviagtion ausprobiert.
das template ist wirklich sehr gut gelungen und das man einstellen kann ob ein untermenupunkt sofort sichtbar sein soll oder nicht, finde ich besonders gut!

nun hab ich ein ähnliches problem wie paddle und weiß nicht wie ich das realisiern soll:

meine seite hat einen "öffentlichen" und einen "nur für mitglieder" bereich.
in den "nur für mitglieder" bereich kommt man durch das login.

der "öffentliche" bereich als auch der "nur für mitglieder" bereich soll eine eigene Naviagtion haben, welche ich unterschiedlich in der webseite platzieren kann.

im FRONTEND würde die Navigation z.b. so aussehen:
User ist nicht eingeloggt (es erscheint nur eine Navigation:)

+News
+Produkte
-Produkte 1
-Produkte 2

+Kontakt

User logt sich ein und es erscheint an anderer Stelle noch eine 2te Navigation:

+Angebote
+Kurse
-Kurs 1
-Kurs 2

+Spezielles

(die Unterkategorien sollen erst sichtbar sein, wenn die Überkategorie angeklickt wurde )

im BACKEND könnte ich mir die Struktur so vorstellen:

Oberkategorie (mit id=1) "öffentlich"; dann das eigentliche menu

+News
+Produkte
-Produkte 1
-Produkte 2

+Kontakt

Oberkategorie (mit id=2) "mitglieder"; dann das eigentliche menu

+Angebote
+Kurse
-Kurs 1
-Kurs 2

+Spezielles


d.h. die ersten Oberkategorien "öffentlich" und "mitglieder" dürften eigentlich nicht in den navigationen nicht aufscheinen.



PUHHHHH ich weiß das sind ganz schön hohe ansprüche, aber vielleicht kann mir jemand weiter helfen ....
steri
 
Beiträge: 215
Registriert: 12. Jul 2007, 13:59

lösung stand schon vor meiner nase

Beitragvon steri » 22. Sep 2007, 09:45

Hallo,
die lösung stand ja schon die ganze Zeit vor mir.
es funktioniert genauso wie raybeam es gepostet hat.
bei mir hat die kategorie öffentliche teil die id=1
und der mitgliederbereich die id=2

dann braucht man z.b. im default template der demo nur schreiben:
Code: Alles auswählen
<div id="content">
   <div id="content2">
      <div id="navigation">
         <div id="navigation_public">
                      <?php
         print $navigation."\n";
         ?>
                       </div>
                       <div id="navigation_mitglieder">
                     <?php
                        print $subNavigation."\n";
                        ?>
                        </div>
                   <?php    
      // Login-Template einbinden
         
                      include $REX['INCLUDE_PATH']."/generated/templates/5.template";
         ?>


grosses danke an raybeam für das tolle template
steri
 
Beiträge: 215
Registriert: 12. Jul 2007, 13:59

Beitragvon revod » 7. Okt 2007, 15:59

@raybeam & co.:

Die genannte Navigation von hier funktioniert einwandfrei. Danke vielmals!

http://www.redaxo.de/168-Templatedetails.html?template_id=24


Nun möchte ich aber die 3. Navigationsebene ebenfalls separat ausgeben (sowie die 2. Ebene bei $subUl = 'extra' )

Wie mach ich das?
Ich habe versucht die 3. Navigationsebene in eine separate Variable zu schreiben (Bsp. subSubNavigation) - bin aber nicht zum Ziel gekommen.

Danke für deine/eure Hilfe!
revod
 
Beiträge: 9
Registriert: 7. Okt 2007, 15:47

Beitragvon raybeam » 7. Okt 2007, 16:31

Hallo revod,

revod hat geschrieben:@raybeam & co.:

...
Nun möchte ich aber die 3. Navigationsebene ebenfalls separat ausgeben (sowie die 2. Ebene bei $subUl = 'extra' )

Wie mach ich das?
Ich habe versucht die 3. Navigationsebene in eine separate Variable zu schreiben (Bsp. subSubNavigation) - bin aber nicht zum Ziel gekommen.


Ups, jetzt wird's aufwändig :wink:

In dem Template findest Du immer wieder folgende Blöcke:

Code: Alles auswählen
if($pathIndex>1 && $subUl=='extra')
                        {
                           $subNavigation.= ...;
                        }


Die müsstest Du, wenn ich es mir recht überlege, entsprechend anpassen und erweitern. Für die zweite Ebene $pathindex=2 und für die dritte Ebene $pathindex>2 mit einem entsprechenden Block

Code: Alles auswählen
if($pathIndex>2 && $subUl=='extra')
                        {
                           $subsubNavigation.=...;
                        }


Am Ende erweiterst Du noch

Code: Alles auswählen
         $navArray=array();
         $navArray[0].=$navigation;
         $navArray[1].=$subNavigation;
        $navArray[2].=$subsubNavigation;


Aber was ist mit der vierten Ebene, wenn man die auch separat anzeigen will, oder der fünften ...

Du merkst schon, dafür ist das Template nicht gemacht. Aber versuch es. Ich hab' aber die o.g. Varianten nicht getestet, so dass ich auf die schnelle nicht weiß, ob es funktioniert.

Gruß

Peter
Benutzeravatar
raybeam
 
Beiträge: 445
Registriert: 5. Feb 2006, 20:30

Beitragvon revod » 8. Okt 2007, 14:58

Danke Raybeam.

Eigentlich scheint mir deine Antwort völlig logisch zu sein, aber irgendwo muss ich noch einige Denkfehler gemacht haben.

Nochmals zur Erinnerung: Ich möchte die 3. Navigationsebene separat mit der Variable $subsubNavigation ausgeben.

Code: Alles auswählen
<?php
   /*
   Navigationstemplate zur Gestaltung von Seitennavigationen/-menüs auf der
   Grundlage unsortierter Listen (<ul></ul>) mit folgenden Funktionen:

   - beliebige Verschachtelungstiefe
   - Veröffentlichungszeitraum (Online vom/bis) wird beachtet
   - individuelle Benutzerbereiche werden ausgewertet
   - Verschachtelung der unsortierten Listen wahlweise mit w3c-konformer
     <ul>-Gliederung im jeweils übergeordnetern <li>-Element oder als
     "Pseudo"-Verschachtelung in nur einem <ul>-Element
   - Wahlweise Anzeige der Untermenüpunkte nur der aktuellen Kategorie oder
     Anzeige aller Untermenüpunkte
   - Wahlweise getrennte Anzeige von Haupt- und Untermenü
   - Generierung eines Breadcrumb-Menüs

   ------------------------------------------------------------------------
   Peter Reiche - www.raybeam.de
   ------------------------------------------------------------------------
   letzte Änderung: 25.01.2007:
   Wahlweise getrennte Anzeige von Haupt- und Untermenü ($subUl='extra')
   letzte Änderung: 10.12.2006:
   Einbindung eines "SuperUsers" der alle individuellen Menüpunkte sieht
   Auswahl: Untermenüpunkte des aktiven Menüpunkts / alle anzeigen
   letzte Änderung: 12.10.2006:
   Darstellung der Untermenüpunkte erweitert
   letzte Änderung: 09.07.2006:
   Breadcrumb-Menü optimiert
   ------------------------------------------------------------------------

   Installation:

   Einbindung des Navigationstemplates in das Seitentemplate durch

   // Template f. Navigation bestimmen
   $navTemplateId = "14"; hier die aktuelle Navigations-Template-ID eintragen

   // Navigation einbinden
   include $REX['INCLUDE_PATH']."/generated/templates/$navTemplateId.template";

   Darstellung des Breadcrumb-Menüs im HTML-Teil des Seitentemplates durch:
   print $breadcrumb."\n";

   Darstellung der Navigation im HTML-Teil des Seitentemplates durch:
   print $navigation."\n";
   
   Trennung von Haupt- und Unternavigation durch Setzen des "Menü-Umschalters" auf:
   $subUl = 'extra';
   
   Dadurch Darstellung der Navigation im HTML-Teil des Seitentemplates durch:
   print $navigation."\n";
   
   und Darstellung der Unternavigation im HTML-Teil des Seitentemplates durch:
   print $subNavigation."\n";

   */

   function build_navigation($userTyp, $nav, $path, $subUl='on',$pathIndex=1)
   {
      // Wenn der Veröffentlichungszeitraum "Online von / bis zum" nicht zutrifft, wird der
      // Navigationslink nicht angezeigt. Artikel die direkt über den URL aufgerufen
       // wurden, werden jedoch immer noch angezeigt. Das entsprechende Seiten-Template
       // muss also bezügl. des Veröffentlichungszeitraums ebenfalls angepasst werden.
       $time = time();
       
       // Type-ID für den "SuperUser", der alle individuellen Menüpunkte sehen darf.
      // Die ID sollte mit dem $su-Wert aus dem Authentifizierungstemplate übereinstimmen.
      $su = 99;
      
         if($nav->getValue('online_from') > $time || $nav->getValue('online_to') < $time)
         {
            return;
         }
         // Wenn die Typ-ID des Startartikels = 1 ist oder der UserTyp des angemeldeten
         // Benutzers mit der Typ-ID des Startartikels der aktuellen Kategorie überein
       // stimmt, geht es weiter
       if($nav->getTypeId()==1 || $userTyp == $nav->getTypeId() || $userTyp == $su)
         {
            // Nur Submenü des aktuellen Root anzeigen
            if($subUl=='on' || $subUl=='off' || $subUl=='extra')
            {
               if($nav->getId()==$path[$pathIndex])
               {
                  // Durch ...->getChildren(1) anstatt ...->getChildren() werden
                 // nur Kategorien durchlaufen die "online" sind
                 if($nav->getChildren(1))
                   {
                      // "geöffnete" Rootkategorie durch css-Klasse '.open' markieren
                      if($pathIndex==1)
                     {
                        $oClass="open";
                     }
                     else
                     {
                        $oClass="";
                     }
                     if((count($path) > $pathIndex) && ($path[$pathIndex + 1] > 0))
                     {
                        if($pathIndex=2 && $subUl=='extra')
                        {
                           $subNavigation.='<li class="inactive '.$oClass.' level'.$pathIndex.'"><a class="level'.$pathIndex.' inactive" href="'.$nav->getUrl().'">'.$nav->getName().'</a>';
                        }

                        if($pathIndex>2 && $subUl=='extra')
                        {
                           $subsubNavigation.='<li class="inactive '.$oClass.' level'.$pathIndex.'"><a class="level'.$pathIndex.' inactive" href="'.$nav->getUrl().'">'.$nav->getName().'</a>';
                        }

                        else
                        {
                           $navigation.='<li class="inactive '.$oClass.' level'.$pathIndex.'"><a class="level'.$pathIndex.' inactive" href="'.$nav->getUrl().'">'.$nav->getName().'</a>';
                        }
                     }
                     else
                     {
                        // bei 'extra' würde der root-Navigationspunkt ins submenü verschoben, soll er aber nicht
                        if($pathIndex=2 && $subUl=='extra')
                        {
                           $subNavigation.='<li class="active '.$oClass.' level'.$pathIndex.'"><a class="level'.$pathIndex.' active" href="'.$nav->getUrl().'">'.$nav->getName().'</a>';
                        }

         if($pathIndex>2 && $subUl=='extra')
                        {
                           $subsubNavigation.='<li class="active '.$oClass.' level'.$pathIndex.'"><a class="level'.$pathIndex.' active" href="'.$nav->getUrl().'">'.$nav->getName().'</a>';
                        }

                        else
                        {
                           $navigation.='<li class="active '.$oClass.' level'.$pathIndex.'"><a class="level'.$pathIndex.' active" href="'.$nav->getUrl().'">'.$nav->getName().'</a>';
                        }
                     }
                     // Wenn keine untergeordneten <ul>-Tags im Menü verwendet
                       // werden sollen ($subUl='off'), wird der <li>-Tag geschlossen
                  if($subUl=='off')
                       {
                          $navigation.= '</li>'."\n";
                       }
                       // Wenn untergeordnete <ul>-Tags im Menü verwendet
                     // werden sollen ($subUl='on'), wird in dem noch offenen
                     // <li>-Tag der <ul>-Tag geöffnet
                     else
                     {
                        if($pathIndex>1 && $subUl=='extra')
                        {
                           $subNavigation.= "\n<ul class=\"subnav".$pathIndex."\">\n";

                        if($pathIndex>2 && $subUl=='extra')
                           {
                              $subsubNavigation.= "\n<ul class=\"subnav".$pathIndex."\">\n";
                        }
                     }
                        else
                        {
                           $navigation.= "\n<ul class=\"subnav".$pathIndex."\">\n";
                        }
                     }
                     // Durch ...->getChildren(1) anstatt ...->getChildren() werden
                     // nur Kategorien durchlaufen die "online" sind - dazu wird die
                     // Funktion erneut aufgegrufen
                     foreach($nav->getChildren(1) as $sub)
                     {
                        $tmpNav=build_navigation($userTyp, $sub, $path,$subUl, $pathIndex+1);
                        $navigation.=$tmpNav[0];
                        $subNavigation.=$tmpNav[1];
                     $subSubNavigation.=$tmpNav[2];
                     }
                     // Wenn untergeordnete <ul>-Tags im Menü verwendet
                     // werden sollen ($subUl='on'), wird der <ul>-Tag hier wieder geschlossen
                     if($subUl=='on' || $subUl=='extra')
                     {
                        if($pathIndex=2 && $subUl=='extra')
                        {
                           $subNavigation.="</ul>\n";
                        
                     }
                     
                     if($pathIndex>2 && $subUl=='extra')
                     {
                           $subsubNavigation.="</ul>\n";
                     
                        }
                        else
                        {
                           $navigation.="</ul>\n";
                        }
                     }
                    }
                    else
                    {
                       if($pathIndex==1)
                     {
                        $oClass="open";
                     }
                     else
                     {
                        $oClass="";
                     }

                  if($pathIndex=2 && $subUl=='extra')
                  {
                         $subNavigation.='<li class="active '.$oClass.' level'.$pathIndex.'"><a class="level'.$pathIndex.' active" href="'.$nav->getUrl().'">'.$nav->getName().'</a>';


                     if($pathIndex>2 && $subUl=='extra')
                     {
                        $subsubNavigation.='<li class="active '.$oClass.' level'.$pathIndex.'"><a class="level'.$pathIndex.' active" href="'.$nav->getUrl().'">'.$nav->getName().'</a>';
                     }                     

                      }
                      else
                      {
                         $navigation.='<li class="active '.$oClass.' level'.$pathIndex.'"><a class="level'.$pathIndex.' active" href="'.$nav->getUrl().'">'.$nav->getName().'</a>';
                      }
                         

                  if($subUl=='off')
                      {
                         $navigation.= '</li>'."\n";
                      }
                    }
                 }
                 else
              {
               if($pathIndex=2 && $subUl=='extra')
               {
                  $subNavigation.='<li class="inactive level'.$pathIndex.'"><a class="level'.$pathIndex.' inactive" href="'.$nav->getUrl().'">'.$nav->getName().'</a>';
                  
                  if($pathIndex=2 && $subUl=='extra')
                  {
                     $subSubNavigation.='<li class="inactive level'.$pathIndex.'"><a class="level'.$pathIndex.' inactive" href="'.$nav->getUrl().'">'.$nav->getName().'</a>';
                  }
               }
               else
               {
                  $navigation.='<li class="inactive level'.$pathIndex.'"><a class="level'.$pathIndex.' inactive" href="'.$nav->getUrl().'">'.$nav->getName().'</a>';
               }

               if($subUl=='off')
                   {
                      $navigation.= '</li>'."\n";
                   }
                }
            if($subUl=='on' || $subUl=='extra')
              {
                 if($pathIndex=2 && $subUl=='extra')
                 {
                    $subNavigation.= '</li>'."\n";

                  if($pathIndex>2 && $subUl=='extra')
                    {
                     $subSubNavigation.= '</li>'."\n";
                  }
                 }
                 else
                 {
                    $navigation.= '</li>'."\n";
                 }
               }
            }
            // Subemenüs aller Kategorien anzeigen
            elseif($subUl=='allOn' || $subUl=='allOff')
            {
               if($nav->getChildren(1))
                {
                   // "geöffnete" Rootkategorie durch css-Klasse '.open' markieren
                   if($pathIndex==1)
                  {
                     $oClass="open";
                  }
                  else
                  {
                     $oClass="";
                  }
                   if($nav->getId()==$path[$pathIndex])
                  {
                     $navigation.='<li class="active '.$oClass.' level'.$pathIndex.'"><a class="level'.$pathIndex.' active" href="'.$nav->getUrl().'">'.$nav->getName().'</a>';
                  }
                  else
                  {
                     $navigation.='<li class="inactive '.$oClass.' level'.$pathIndex.'"><a class="level'.$pathIndex.' inactive" href="'.$nav->getUrl().'">'.$nav->getName().'</a>';
                  }
                  // Wenn keine untergeordneten <ul>-Tags im Menü verwendet
                    // werden sollen ($subUl='allOff'), wird der <li>-Tag geschlossen
               if($subUl=='allOff')
                    {
                       $navigation.= '</li>'."\n";
                    }
                    // Wenn untergeordnete <ul>-Tags im Menü verwendet
                  // werden sollen ($subUl='allOn'), wird in dem noch offenen
                  // <li>-Tag der <ul>-Tag geöffnet
                  else
                  {
                     $navigation.= "\n<ul class=\"subnav".$pathIndex."\">\n";
                  }
                  foreach($nav->getChildren(1) as $sub)
                  {
                      $tmpNav=build_navigation($userTyp, $sub, $path,$subUl, $pathIndex+1);
                      $navigation.=$tmpNav[0];
                  }
                  // Wenn untergeordnete <ul>-Tags im Menü verwendet
                  // werden sollen ($subUl='allOn'), wird der <ul>-Tag hier wieder geschlossen
                  if($subUl=='allOn')
                  {
                      $navigation.="</ul>\n";
                  }
                }
                else
                {
                   if($nav->getId()==$path[$pathIndex])
                   {
                      $navigation.='<li class="active '.$oClass.' level'.$pathIndex.'"><a class="level'.$pathIndex.' active" href="'.$nav->getUrl().'">'.$nav->getName().'</a>';
                   }
                   else
                   {
                      $navigation.='<li class="inactive level'.$pathIndex.'"><a class="level'.$pathIndex.' inactive" href="'.$nav->getUrl().'">'.$nav->getName().'</a>';
                   }
                    if($subUl=='allOff')
                   {
                      $navigation.= '</li>'."\n";
                   }
                }
             }
            if($subUl=='allOn')
           {
              $navigation.= '</li>'."\n";
            }
         }
         


      // Kleiner Trick, falls ausser der root-Kategorie alle weiteren aufgrund
         // der Rechtevergabe ausgeblendet sind. Um validen HTML-Code zu erhalten
         // muss am Ende des $navigations-String "<ul class=\"subnav1\">\n</ul>"
         // gelöscht werden
         if(strstr($navigation,"<ul class=\"subnav1\">\n</ul>"))
         {
            $navigation = str_replace("\n<ul class=\"subnav1\">\n</ul>","\n",$navigation);
         }
         $navArray=array();
         $navArray[0].=$navigation;
         $navArray[1].=$subNavigation;
      $navArray[2].=$subsubNavigation;

         return $navArray;
    }  /////////////////// Ende der function build_navigation //////////////


//////////////// ------- Navigation erstellen ------------ ///////////////

// Voreinstellungen:
    $path = explode("|",$this->getValue("path").$this->getValue("article_id")."|");

// Usertyp festlegen, um Authentifizierung zu ermöglichen
    $userTyp='0';
    if ($FORM['USR_TYP'] != 0)
    {
        $userTyp = $FORM['USR_TYP'];
    }
//////////////////////////////////////////////
//  " M E N Ü - U M S C H A L T E R "
//////////////////////////////////////////////
//  Menü mit <ul></ul> Auszeichnung
//  auch in den Unter-Menüpunkten oder
//  alle Untermenüpunkte ständig anzeigen
//  <ul> einschalten:.................. on
//  <ul> ausschalten:.................. off
//  alle mit <ul> ständig anzeigen:.... allOn
//  alle ohne <ul> ständig anzeigen:... allOff
//  Untermenü extra:................... extra
//////////////////////////////////////////////

    $subUl = 'extra';

//////////////////////////////////////////////

      // Durch ...::getRootCategories(1) anstatt ...::getRootCategories()
      // werden nur die Root-Kategorien durchlaufen die "online" sind
      $navi=array();
      foreach (OOCategory::getRootCategories(1) as $nav)
      {
        $navi=build_navigation($userTyp, $nav, $path, $subUl);
        $navMain.=$navi[0];
        $navSub.=$navi[1];
   $navSubsub.=$navi[2];
      }

   if($navMain)
      {
         $navigation= "<ul class=\"navroot\">\n".$navMain."</ul>\n";
      }
      
      if($navSub)
      {
         $subNavigation= "<ul class=\"navsub\">\n".$navSub."</ul>\n";

      }


   if($navSubsub)
      {
         $subsubNavigation= "<ul class=\"navsub\">\n".$navSub."</ul>\n";
      }
   


   
//////////////// ------- Breadcrumb erstellen ---------- ////////////////

    $aktArticle = OOArticle::getArticleById($this->getValue('article_id'));
    $tree = $aktArticle->getParentTree();

//////////////////////////////////////////////
//  Titel und Trennzeichen für die
//  Breadcrumb-Links festlegen
//////////////////////////////////////////////

    $bcTitle = 'Sie befinden sich hier: ';
    $bcDivi  = ' > ';

//////////////////////////////////////////////

    if(is_array($path))
    {
       $breadcrumb = '<div id="breadcrumb">'."\n".'<span class="bcTitle">'.$bcTitle.$REX ['SERVERNAME'].'</span>';
       foreach($path as $bcNr)
       {
          if($bcNr!='')
          {
             $art = OOArticle::getArticleByID($bcNr);
             if($art->getValue('id')!=$this->getValue('article_id'))
             {
                // Pfad-Einträge des Artikels verlinken
                $breadcrumb .= $bcDivi.$art->toLink();
             }
             else
             {
                // Artikelname der aktuellen Seite nicht verlinken
                $breadcrumb .= $bcDivi.'<span class="bcActive">'.$this->getValue("name")."</span>\n";
             }
          }
       }
       $breadcrumb .='</div>'."\n";
    }
?>


und

Code: Alles auswählen
    print $navigation."<br/>";
    print $subNavigation."<br/>";
    print $subsubNavigation."<br/>";



Was läuft hier falsch? Das kann doch nicht so schwer sein.
revod
 
Beiträge: 9
Registriert: 7. Okt 2007, 15:47

Beitragvon raybeam » 8. Okt 2007, 17:36

Hi revod,

Als erstes fällt mir auf, dass Du

Code: Alles auswählen
if($pathIndex=2 ...


geschrieben hast. Richtig muss es

Code: Alles auswählen
if($pathIndex==2 ...
heißen. Sorry, war mein Fehler. Passiert mir selbst immer wieder, wie man in der Antwort oben sieht :wink:

Dann habe ich gesehen, dass du die neuen "if-Schleifen" teilweise mit den schon vorhandenen verschachtelt hast:

Code: Alles auswählen
if(...)
{
  if(...)
  {
    ...
  }
}


Richtig wäre vermutlich
Code: Alles auswählen
if(...)
{
...
}
if(...)
{
...
}


Und die Zeile
Code: Alles auswählen
if($navSubsub)
      {
         $subsubNavigation= "<ul class=\"navsub\">\n".$navSub."</ul>\n";
      }


müsste wohl lauten:

Code: Alles auswählen
if($navSubsub)
      {
         $subsubNavigation= "<ul class=\"navsub\">\n".$navSubsub."</ul>\n";
      }


Ob's dann aber funktioniert kann ich nicht sagen. Ich kann's aufgrund akutem Zeitmangels leider nicht testen. Da musst Du dich selbst durchbeissen.

Gruß

Peter
Benutzeravatar
raybeam
 
Beiträge: 445
Registriert: 5. Feb 2006, 20:30

Nächste

Zurück zu Templates/Navigationen [R3]

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast