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.

