Navigation mit mehreren Farben

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

Navigation mit mehreren Farben

Beitragvon raiden » 12. Nov 2008, 19:06

Hallo liebe Redaxo Gemeinde,

ich habe ein Problem bei dem ich nicht so wirklich vorran komme. Vielleicht hat ja jemand eine Lösung.

Ich benutze folgendes Template:

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: 05.04.2008:
   Fehler im Quellcode beseitigt
   letzte Änderung: 27.02.2008:
   Anpassung an redaxo 3.x/4.x
   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 redaxo 3.x:
   include $REX['INCLUDE_PATH']."/generated/templates/$navTemplateId.template";

   Navigation einbinden redaxo 4.x:
   $navTemplateInc = new rex_template($navTemplateId);
   include $navTemplateInc->getFile();

   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;

      // -------> redaxo 4.0 Anpassung:
      // online_from und online_to werden nunmehr über Metainformationen der Artikel zur
      // Verfügung gestellt.
      global $REX;

      if($REX['VERSION']>"3")
      {
         $onlineFrom = 'art_online_from';
         $onlineTo = 'art_online_to';
      }
      else
      {
         $onlineFrom = 'online_from';
         $onlineTo = 'online_to';
      }
      // Folgende Felder müssen, falls nicht vorhanden, in der redaxo 4.x über "Metainformationen erweitern/Artikel"
      // angelegt werden
      ///////////////////////////////////
      // Prefix:       art_
      // Spaltenname: online_from
      // Feldposition: [nach belieben]
      // Feldbezeichnung: [nach belieben]
      // Feldtyp:      date
      // Feldattribute: [kein Eintrag]
      // Standardwert: [kein Eintrag]
      ///////////////////////////////////
      // und
      //////////////////////////////////
      // Prefix:       art_
      // Spaltenname: online_to
      // ... wie oben
      //////////////////////////////////

      // Werden die Metadaten im Backend gespeichert, so wird das aktuelle Datum in art_online_from
      // und art_online_to gespeichert, wenn dort zuvor keine Werte eingetragen waren. Um eine un-
      // beabsichtigte Sperrung der Artikel zu vermeiden, wird das Onlinedatum nur in die Prüfung
      // einbezogen, wenn sich art_online_from und art_online_to unterscheiden.
      if($nav->getValue($onlineFrom) != $nav->getValue($onlineTo))
      {
            if($nav->getValue($onlineFrom) > $time || $nav->getValue($onlineTo) < $time)
            {
               return;
            }
      }
         // Wenn die Typ-ID des Startartikels leer ist oder der UserTyp des angemeldeten
         // Benutzers mit der Typ-ID des Startartikels der aktuellen Kategorie überein
       // stimmt, geht es weiter.

       // -------> redaxo 4.0 Anpassung:
       // Der Artikel-Typ wird nun über die Metainformationen der Artikel zur Verfügung gestellt
       // Folgendes Feld muss, falls nicht vorhanden, über "Metainformationen erweitern/Artikel" angelegt werden
       ///////////////////////////////////
      // Prefix:       art_
      // Spaltenname:   type_id
      // Feldposition: [nach belieben]
      // Feldbezeichnung: [nach belieben]
      // Feldtyp:      select
      // Parameter:    |[typ1]|[typ2]...
      // Feldattribute: size=1
      // Standardwert: [kein Eintrag]
      ///////////////////////////////////
      // WICHTIG: Im Unterschied zu den Beispielen in der Demo, erfolgt bereits vor
      // dem ersten Parameter [typ1] das Pipezeichen "|". Dadurch wird der Select-Auswahl
      // "Artikeltyp" im Backend ein "Leerfeld" vorangestellt. Dieser "Nullwert" stellt
      // die Standardeinstellung eines für alle sichtbaren Artikels dar.
      // ZUSATZ:
      // Das simple-user Addon wird derzeit nicht vollständig von redaxo 4.x unterstützt,
      // bzw. wurde es nicht an die Version 4.x angepasst. Da derzeit ein neues community - Addon
      // entwickelt wird, ist mit einer Anpassun auch nicht mehr zu rechnen. Das gilt auch für
      // dieses Template. Die Einbindung des simple-user Addon unter redaxo 4.x mit diesem
      // Navigationstemplate wurde von mir nicht getestet!

      // redaxo 4.x

      if($REX['VERSION']>"3")
      {
         if($nav->getValue('art_type_id')=='' || $nav->getValue('art_type_id')=='Standard')
         {
            $artTypeId = '1';
         }
         else
         {
            $artTypeId = $nav->getValue('art_type_id');
         }
      }
      // redaxo 3.x
      else
      {
         $artTypeId = $nav->getTypeId();
      }

       if($artTypeId =='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>1 && $subUl=='extra')
                        {
                           $subNavigation.='<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>1 && $subUl=='extra')
                        {
                           $subNavigation.='<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";
                        }
                        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];
                     }
                     // 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>1 && $subUl=='extra')
                        {
                           $subNavigation.="</ul>\n";
                        }
                        else
                        {
                           $navigation.="</ul>\n";
                        }
                     }
                    }
                    else
                    {
                       if($pathIndex==1)
                     {
                        $oClass="open";
                     }
                     else
                     {
                        $oClass="";
                     }

                  if($pathIndex>1 && $subUl=='extra')
                  {
                         $subNavigation.='<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>1 && $subUl=='extra')
               {
                  $subNavigation.='<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>1 && $subUl=='extra')
                 {
                    $subNavigation.= '</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;

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

   if($navMain)
      {
         $navigation= "\n".$navMain."\n";
      }

      if($navSub)
      {
         $subNavigation= "<dl><dd><ul class=\"navsub\">\n".$navSub."</ul></dd></dl>\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.'</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 .= $art->toLink().$bcDivi;
             }
             else
             {
                // Artikelname der aktuellen Seite nicht verlinken
                $breadcrumb .= '<span class="bcActive">'.$this->getValue("name")."</span>\n";
             }
          }
       }
       $breadcrumb .='</div>'."\n";
    }
?>


Die Ausgabe die das Template erzeugt sieht ungefähr so aus:

Code: Alles auswählen
<li class="inactive level1"><a class="level1 inactive" href="navi1.html">Navi1</a></li>
<li class="inactive level1"><a class="level1 inactive" href="navi2.html">Navi2</a></li>


und von der Subnavi:

Code: Alles auswählen
<li class="inactive level1"><a class="level1 inactive" href="subnavi1.html">Sub Navi 1</a></li>
<li class="inactive level1"><a class="level1 inactive" href="subnavi2.html">Sub Navi 2</a></li>



wie muss ich das Navigationstemplate umbauen, um folgenden Output zu erreichen (Nummerierung der Navigationspunkte per css Klasse):

Code: Alles auswählen
<li class="inactive [b]punkt1[/b] level1"><a class="level1 inactive" href="navi1.html">Navi1</a></li>
<li class="inactive punk2 level1"><a class="level1 inactive" href="navi1.html">Navi1</a></li>


bzw.

Code: Alles auswählen
<li class="inactive [b]punkt1[/b] level1"><a class="level1 inactive" href="subnavi1.html">Sub Navi1</a></li>
<li class="inactive punk2 level1"><a class="level1 inactive" href="subnavi1.html">Sub Navi1</a></li>


Ich möchte damit erreichen, dass jeder Reiter eine eigene Farbe hat und auch beim Hoover-Effekt unterschiedliche Farben je Reiter angezeigt werden. Zudem soll die Möglichkeit bestehen einzelne Menüpunkte hervorzuheben.

Für Hilfe wäre ich sehr dankbar.
raiden
 
Beiträge: 25
Registriert: 23. Apr 2008, 16:58

Beitragvon darwin » 13. Nov 2008, 11:19

Hi...
idee wäre auch über die MetaInfos zu gehen...
Somit könntest du anschl. Bequem über die Kat/Metas die
jeweilige Farbe wählen.

bsp:
kat_farbe (Kategorie Farbe)
rot:#ff0000|orange:#ff9900|gruen:#00ff66|weiss:#FFFFFF

im Navi Template könntest du es so abfragen (ungetestet):
Code: Alles auswählen
<?php
// EXPLODE PATH
$PATH = explode("|",$this->getValue("path").$this->getValue("article_id")."|");

// GET CURRENTS
$path1 = (isset ($PATH[1])) ? $PATH[1] : '';
$path2 = (isset ($PATH[2])) ? $PATH[2] : '';
$path3 = (isset ($PATH[3])) ? $PATH[3] : '';

// ------------- Startseite Navigation ------------- //

$nav = '<ul id="Menue">';

foreach (OOCategory::getRootCategories() as $lev1):
   if($lev1->isOnline()):
      
      $category = OOCategory::getCategoryById($lev1->getId());
      $catFarbe = $category->getValue("kat_farbe");
               
      $catArr = explode("|",$catFarbe);
         
      // Ausgabe Ebene 1 - Horizontal
      if ($lev1->getId() == $path1) {
         $nav .=  '<li class="on" style="background:'.$catArr[0].';"><a href="'.$lev1->getUrl().'">'.htmlentities($lev1->getName()).'</a>';
      } else {
         $nav .= '<li style="background:'.$catArr[0].';"><a href="'.$lev1->getUrl().'">'.htmlentities($lev1->getName()).'</a>';
      }
      
      $nav .= '</li>';   
   
   endif;
endforeach;
   
$navLeftCol .= '</ul>';

?>


grz. Chris
Benutzeravatar
darwin
 
Beiträge: 1261
Registriert: 2. Jan 2007, 16:10
Wohnort: LA

Re: Navigation mit mehreren Farben

Beitragvon Peter.Bickel » 15. Nov 2008, 13:50

raiden hat geschrieben:Ich möchte damit erreichen, dass jeder Reiter eine eigene Farbe hat und auch beim Hoover-Effekt unterschiedliche Farben je Reiter angezeigt werden. Zudem soll die Möglichkeit bestehen einzelne Menüpunkte hervorzuheben.
Du meinst sowas wie hier, oder?
www.huskyfarm.de

Das allereinfachste: dem body dynamisch eine ID (z.B. die Kat-ID) zuweisen:
<body id="cat4">
Dann kannst Du den Rest prima über CSS lösen.

Grüße, Peter.
Benutzeravatar
Peter.Bickel
 
Beiträge: 1642
Registriert: 25. Jan 2005, 20:17
Wohnort: Schleswig-Holstein

Beitragvon darwin » 15. Nov 2008, 14:30

Hi Peter...

sollte funktionieren. Jedoch auch "nur" wenn keine KAT mehr dazu kommt.
Wenn das MENUE jedoch vertikal ist und mehrere KATs noch hinzugefügt
werden hat man ein Problem (jedesmal ne CSS.CLass anfügen?!),
oder hab ich was überlesen?...

grz. Chris
Benutzeravatar
darwin
 
Beiträge: 1261
Registriert: 2. Jan 2007, 16:10
Wohnort: LA

Beitragvon Peter.Bickel » 15. Nov 2008, 14:34

Naja, ich hatte das so verstanden, dass JEDE Kategorie eine eigene Farbe bekommen soll. Dann must Du so oder so die neuen CSS-Klassen definieren.

Wenn es natürlich so ist, dass mehrere Kats die gleiche Optik bekommen sollen, dann ist das mit den Metainfos die eleganteste Lösung.
Alternativ könnte man aber natürlich auch in der CSS eine Mehrfach-Definition machen:
li a.kat4, li a.kat7 { etc. pp. }

Grüße,
Peter.
Benutzeravatar
Peter.Bickel
 
Beiträge: 1642
Registriert: 25. Jan 2005, 20:17
Wohnort: Schleswig-Holstein

Beitragvon raybeam » 15. Nov 2008, 15:21

Hallo zusammen,

da raiden mein template benutzt, habe ich zwischenzeitlich mit ihm die Varianten "kat-id", "durchnummerieren" und "Meta-Info" durchprobiert.

Meta-Info hat so gut geklappt, dass ich sie direkt in meine Universelle <ul>Navigation (YAML) im Downloadbereich übernommen habe.

Durch das Ausprobieren wurde mir klar, dass man neben den beim YAML-Framework verwendeten "<li id's>" problemlos auch weitere Klassen zuordnen kann, so dass die individuelle Gestaltung einzelner Navigationslinks sehr leicht möglich ist.

Gruß

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

Beitragvon darwin » 15. Nov 2008, 17:09

Hi,
kannst du bitte ein paar Schnipsel (MetaInfos, Script, CSS)
hier posten als Beispiele. Wäre klasse .. Danke.

grz. Chris
Benutzeravatar
darwin
 
Beiträge: 1261
Registriert: 2. Jan 2007, 16:10
Wohnort: LA

Beitragvon raybeam » 15. Nov 2008, 17:58

Hi Chris

darwin hat geschrieben:kannst du bitte ein paar Schnipsel (MetaInfos, Script, CSS)
hier posten als Beispiele.


Gerne:

Meta-Info unter Kategorien:
--------------------------------
Spaltenname: styleclass
Feldposition: beliebiger Wert
Feldbezeichnung: styleclass
Feldtyp: select
Parameter (z.B.): |rot|gruen|blau (Hier kommen also die Namen der css-Klassen rein, durch das erste Pipezeichen kann ein Eintrag später wieder geleert werden)
Feldattribute: size=1
--------------------------------
Im Strukturmenü kann man dann über [Kategorie editieren/löschen] für jede Kategorie eine der Style-Klassen auswählen, so dass im Quelltext dann z. B. aus <li> <li class="rot"> wird.

Dazu muss dann nur noch die entsprechende CSS-Klasse .rot im Stylesheet definiert werden.

Dieses Navitemplate

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

nutzt die "cat_styleclass"

Infos auch unter http://www.raybeam.de/

Gruß

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

Beitragvon Mediastuttgart » 16. Nov 2008, 09:16

Eine andere Alternative wäre bei Verwendung von rexsmarty auf den "cycle" Syntax zurückzugreifen.

code

Code: Alles auswählen
<li class='{cycle values="red,green,blue,yellow,orange,black"}'></li>


css

Code: Alles auswählen
ul li.red
{
    #background-color:#CC0000;
    #color:#FFF;
}

ul li.green
{
    #background-color:# ... usw
}

lg
michael
Benutzeravatar
Mediastuttgart
 
Beiträge: 293
Registriert: 21. Mär 2005, 11:28

Beitragvon ciss » 16. Nov 2008, 15:33

Bitte dran denken, dass der IE6 mit mehreren Klassen nicht klarkommt. Stattdessen wird nur die letztgenannte Klasse erkannt. Beispiel:

class = "inactive punkt1 level1"

ist für den IE6

class = "level1"

Gruß
Fabian
Benutzeravatar
ciss
 
Beiträge: 359
Registriert: 8. Feb 2008, 04:24
Wohnort: Berlin

Beitragvon ach » 17. Nov 2008, 18:49

ciss hat geschrieben:Bitte dran denken, dass der IE6 mit mehreren Klassen nicht klarkommt. Stattdessen wird nur die letztgenannte Klasse erkannt. Beispiel:

class = "inactive punkt1 level1"

ist für den IE6

class = "level1"


Das stimmt nicht. Der IE6 (und sogar auch der IE5) wertet alle Klassen aus, nicht nur die letzte. Dasjenige, womit der IE6 Probleme hat, ist mancher Aufruf im CSS:
Code: Alles auswählen
.inactive.level1{}
kann der IE6 z.B. nicht richtig interpretieren.
ach
 
Beiträge: 18
Registriert: 9. Apr 2008, 01:25

Beitragvon ciss » 18. Nov 2008, 13:59

Das stimmt nicht. Der IE6 (und sogar auch der IE5) wertet alle Klassen aus, nicht nur die letzte.

Stimmt, habs verwechselt.:oops: Danke für den Hinweis. Der IE6 liest bei einer Verknüpfung von Klassen im Selektor nur die letzte Klasse:

Code: Alles auswählen
p.fett.kursiv.rot {}

wird vom IE6 als

Code: Alles auswählen
p.rot {}

interpretiert. Um die Entwickler zu zitieren:

When the class selector support was originally written it was drawn up based on the CSS 1 spec which only supported a single class selector in each simple selector. We wound up keeping this behavior even after implementing portions of later versions of CSS. The end result is that we always threw out the extra classes in the selector and only kept the last one in the list and matched based on that.
http://blogs.msdn.com/ie/archive/2005/09/02/460115.aspx
Benutzeravatar
ciss
 
Beiträge: 359
Registriert: 8. Feb 2008, 04:24
Wohnort: Berlin

Beitragvon darwin » 4. Dez 2008, 16:31

HI...
jetzt muss ich doch selber mal nachhaken.

Hat jemand eine Idee wie man den Kindkategorien
die MetaInfo der ElternKat mitgeben könnte...

Beispiel:

MamaKat (MetaInfo: rot)
--- Kindkat_01 (bekommt rot, wenn nicht anderes angegeben wurde)
--- Kindkat_02 (bekommt rot, wenn nicht anderes angegeben wurde)
--- BabyKat_01 (bekommt rot, wenn nicht anderes angegeben wurde)
--- BabyKat_02 (MetaInfo: rosa)
PapaKat (MetaInfo: blau)
--- Kindkat_ 01 (bekommt blau, wenn nicht anderes angegeben wurde)
--- Kindkat (MetaInfo: gelb)

Danke. gruß Chris
Benutzeravatar
darwin
 
Beiträge: 1261
Registriert: 2. Jan 2007, 16:10
Wohnort: LA

Beitragvon ciss » 4. Dez 2008, 17:03

Würde es so machen:

1. Mit $KindKat->getValue('farbe') Wert abfragen.
2. Wenn 'farbe' leer ist, mit
$parentid = $category->getParentId()
oder
$tree = $category->getParentTree() (keine Ahnung, was das genau zurückgibt)
die Elternkategorie abfragen und von dieser dann 'farbe' abfragen.

EDIT: oder willst du Farben mischen? In welcher Beziehung steht dann BabyKat zu MamaKat bzw. PapaKat? Bzw. reden wir von Meta-Kategorien oder Redaxo-Kategorien?
Benutzeravatar
ciss
 
Beiträge: 359
Registriert: 8. Feb 2008, 04:24
Wohnort: Berlin

Beitragvon darwin » 4. Dez 2008, 17:09

jep...
ich fangs die CatId im Nav Template ab.

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

// GET CURRENTS
$path1 = (isset ($PATH[1])) ? $PATH[1] : '';
$path2 = (isset ($PATH[2])) ? $PATH[2] : '';
$path3 = (isset ($PATH[3])) ? $PATH[3] : '';
...

$categories = OOCategory::getRootCategories(true, $REX['CUR_CLANG']);

foreach($categories as $cat) {

   etc...
   ab dem PATH dann die ID in eine Var:
   $myMetaId = $path3;
   
}



Im Template dann:
Code: Alles auswählen
$category = OOCategory::getCategoryById($myMetaId);
$myMeta = $category->getValue("myMetaInfo");


grz. Chris
Benutzeravatar
darwin
 
Beiträge: 1261
Registriert: 2. Jan 2007, 16:10
Wohnort: LA


Zurück zu Templates/Navigationen [R4]

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast