Anpassung Hauptnavigation: Kennzeichnung "active"

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

Anpassung Hauptnavigation: Kennzeichnung "active"

Beitragvon Kucki2 » 25. Jan 2011, 14:30

Hallo Zusammen,

ich verwende in einem Homepageprojekt eine Haupt- und ein Unternavigation. Bei der Unternavigation kann ich per css das Aussehen des aktiven Navigationspunktes wählen.

Wie muss ich denn das Navigationstemplate, dass ich einsetze, abändern, damit ich auch in der Hauptnavigation das Aussehen des aktiven Menüpunktes steuern kann?

Hier ein Ausschnitt aus dem Template:

Code: Alles auswählen
<?

//         OONAVIGATION CLASS
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

class OONavigation
{
   var $navigation;
   var $subnavigation;
   var $rendererMain;
   var $rendererSub;
   var $countpath;
   var $path;
   
   function createNavigation($level = NULL)
   {
      if(!isset($level))
      {
         foreach(OOCategory::getRootCategories() as $level)
         {
            if($level->isOnline())
               $this->addItem(0, $level->getName(), $level->getUrl(), $level->getId(), sizeof($level->getChildren()));

            if(sizeof($level->getChildren()) > 0)
            {
               $this->createNavigation($level);
            }
         }
      }
         else
      {
         foreach($level->getChildren() as $nextLevel)
         {
            if($nextLevel->isOnline())
               $this->addItem($level->getId(), $nextLevel->getName(), $nextLevel->getUrl(), $nextLevel->getId(), sizeof($nextLevel->getChildren()));
            
            if(sizeof($nextLevel->getChildren()) > 0)
            {
               $this->createNavigation($nextLevel);
            }
         }
      }
   }
   
   function addItem($level, $name, $url, $id, $children)
   {
      $this->navigation[$id][$level]['name'] = $name;
      $this->navigation[$id][$level]['url'] = $url;
      $this->navigation[$id][$level]['children'] = $children;
      $this->navigation[$id][$level]['id'] = $id;
      
      $this->subnavigation[$level][$id]['name'] = $name;
      $this->subnavigation[$level][$id]['url'] = $url;
      $this->subnavigation[$level][$id]['children'] = $children;
      $this->subnavigation[$level][$id]['id'] = $id;
   }
   
   function renderNavigation($level = 0)
   {
      $this->rendererMain .=   "<ul>\n";
      
      foreach($this->navigation as $item)
      {
         if($item[$level]['name'])
         {   
            if($level > 0)
               $childs = ($item[$level]['children'] > 0) ? ' class="children"' : '';
            $this->rendererMain .= "<li><a" . $childs . " href=\"" . $item[$level]['url'] . "\">".$item[$level]['name']."</a>\n";

            if($item[$level]['children'] > 0)
            {
               $this->renderNavigation($item[$level]['id']);
            }
         
            $this->rendererMain .= "</li>\n";
         }
      }
      
      $this->rendererMain .=   "</ul>\n";
   }
   
   function displayMainNavigation()
   {
      print $this->rendererMain;
   }
   
   function renderSubNavigation($path)
   {
      $this->path = $path;
      $this->countpath = 1;
      if($this->subnavigation[0][$this->path[$this->countpath]]['children'] > 0)
      {
         $this->rendererSub .= "<div id=\"subnavigation\">";
         $this->generateSubNavigation();
         $this->rendererSub .= "</div>";
      }
   }
   
   function generateSubNavigation($level = 0)
   {   
         $this->rendererSub .= "\n<ul>\n";
         
         $itemCount = count($this->subnavigation[$this->path[$this->countpath]]);
         $itemCloser = 0;

         foreach($this->subnavigation[$this->path[$this->countpath]] as $item)
         {   
            $actClass = ($this->path[$this->countpath+1] == $item['id']) ? "class=\"active\" " : "";
            $lastClass = ($itemCloser < $itemCount-1 && $level == 0) ? "" : " class=\"last\"";
            
            $itemCloser++;
            $this->rendererSub .= "<li".$lastClass."><a ".$actClass."href=\"" . $item['url'] . "\">".$item['name']."</a>";


Und hier die Live-Ansicht:
http://www.narrenzunft-furtwangen.de

Es wäre schön, wenn mir jemand helfen könnte.

Vielen Dank, Antje.
Kucki2
 
Beiträge: 75
Registriert: 18. Feb 2008, 21:12

Re: Anpassung Hauptnavigation: Kennzeichnung "active"

Beitragvon Markus.Lorch » 25. Jan 2011, 20:03

Hallo,

schau dir mal noch http://wiki.redaxo.de/index.php?n=R4.RexNavigation an - kann von Haus aus alles was du brauchst. Das verwenden separater Navigationsscripts ist in der Zwischenzeit überflüssig geworden.
Grüße,
Markus Lorch

Tschüssle sagt Herr Nüssle
Benutzeravatar
Markus.Lorch
 
Beiträge: 636
Registriert: 21. Okt 2007, 16:22
Wohnort: Walheim

Re: Anpassung Hauptnavigation: Kennzeichnung "active"

Beitragvon Kucki2 » 2. Feb 2011, 15:15

Da ich diese Navigation schon soweit optisch an meine Bedürfnisse angepasst habe, möchte ich sie auch beibehalten.

Kann mir vielleicht sonst jemand weiterhelfen?

Gruß, Kucki2.
Kucki2
 
Beiträge: 75
Registriert: 18. Feb 2008, 21:12

Re: Anpassung Hauptnavigation: Kennzeichnung "active"

Beitragvon Thomas.Blum » 3. Feb 2011, 18:34

Hej,

Kucki2 hat geschrieben:Da ich diese Navigation schon soweit optisch an meine Bedürfnisse angepasst habe, möchte ich sie auch beibehalten.


die Optik wird über CSS gemacht nicht über deinen Code. Würde dir auch empfehlen eher die rex_navigation zu verwenden.

Ab er zu deiner eigentliche Frage:

du müsstest die Kategorie-Id mit der aktuellen aufgeruften Artikel-Id vergleichen.

die aktuelle Artikel-id bekommst du mit $REX['ARTICLE_ID']

probier das mal:

Code: Alles auswählen
    function renderNavigation($level = 0)
       {
          global $REX;
         $this->rendererMain .=   "<ul>\n";
         
          foreach($this->navigation as $item)
          {
             if($item[$level]['name'])
             {   
                if($level > 0)
                   $childs = ($item[$level]['children'] > 0) ? ' class="children"' : '';
$liclass = ($item[$level]['id'] == $REX['ARTICLE_ID']) ?  $liclass = ' class="active"' : '';
                $this->rendererMain .= "<li'.$liclass.'><a" . $childs . " href=\"" . $item[$level]['url'] . "\">".$item[$level]['name']."</a>\n";

                if($item[$level]['children'] > 0)
                {
                   $this->renderNavigation($item[$level]['id']);
                }
             
                $this->rendererMain .= "</li>\n";
             }
          }
         
          $this->rendererMain .=   "</ul>\n";
       }



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

Re: Anpassung Hauptnavigation: Kennzeichnung "active"

Beitragvon Kucki2 » 5. Feb 2011, 16:57

Funktioniert leider nicht.

Trotzdem Danke, Antje.
Kucki2
 
Beiträge: 75
Registriert: 18. Feb 2008, 21:12


Zurück zu Templates/Navigationen [R4]

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast