Hi, zuerst mal vielen dank für dein tolles Template. Ich habe es soeben probiert. Es fonktioniert eigentlich. Ich habe leider nur ein paar Anpassungsprobleme.
Ich hab das Template angepasst wie hir oben erwähnt.
Allerdings werden mir 2 mal Home angezeigt wenn ich z.b. auf Team klicke.
Home
Team
Ausserdem bekomme ich das mit dem CSS nicht richtig hin, hätte gerne den Path horizontal angezeigt und nicht wie es im Moment aussieht
So sieht mein css im moment aus:
- Code: Alles auswählen
div#path {
width: 900px;
height: 21px;
background-color: #fff;
padding-top: 4px;
padding-left: 0px;
color: #fff;
}
.breadcrumb{
margin-bottom: 10px;
}
.bcActive{
color: black;
font-weight: bold;
}
.bcTitle {
color: #000;
}
und so mein 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: 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>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 = 'off';
//////////////////////////////////////////////
// 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= "<ul class=\"navroot\">\n".$navMain."</ul>\n";
}
if($navSub)
{
$subNavigation= "<ul class=\"navsub\">\n".$navSub."</ul>\n";
}
//////////////// ------- Breadcrumb erstellen ---------- ////////////////
$aktArticle = OOArticle::getArticleById($this->getValue('article_id'));
$siteStartArticle = OOArticle::getSiteStartArticle();
$tree = $aktArticle->getParentTree();
//////////////////////////////////////////////
// Titel und Trennzeichen für die
// Breadcrumb-Links festlegen
//////////////////////////////////////////////
$bcTitle = 'Sie befinden sich hier: ';
$bcDivi = ' > ';
//////////////////////////////////////////////
if(is_array($path))
{
if($aktArticle->getId()==$siteStartArticle->getId())
{
$homeLink='';
$bcDivi='';
}
else
{
$homeLink=$siteStartArticle->toLink();
}
$breadcrumb = '<div id="breadcrumb">'."\n".'<span class="bcTitle">'.$bcTitle.$homeLink.'</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";
}
?>
Vielen dank für eure Hilfe.
greetings Sauer