habe ein Update von R3 auf R4 gemacht, und nun wird meine Navigation nicht mehr eingezeigt. Habe es im Template richtig eingebunden, aber leider keine Ausgabe. Ich nehme an für R4 müssen noch irgendwelche Änderungen vorgenommen werden, aber leider bin ich noch zu neu in Redaxo um zu wissen wo der braten hängt.
Navigationstemplate:
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";
*/
$arrayNavigation = array();
function build_navigation($userTyp, $nav, $path, $subUl='on',$pathIndex=1,&$arrayNavigation)
{
// in Unterkategorien verlinken, wenn Überkategorie leer
$hasContent = OOArticleSlice::getFirstSliceForArticle($nav->getId());
$subcategories = OOCategory::getChildrenById($nav->getId());
$firstCatChild = $subcategories[0];
if($hasContent OR !$firstCatChild)
{
$url=$nav->getUrl();
}
else
{
$url=$firstCatChild->getUrl();
}
// 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="'.$url.'">'.$nav->getName().'</a>';
}
else
{
$navigation.='<li class="active '.$oClass.' level'.$pathIndex.'"><a class="level'.$pathIndex.' active" href="'.$url.'">'.$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="'.$url.'">'.$nav->getName().'</a>';
}
else
{
$navigation.='<li class="active '.$oClass.' level'.$pathIndex.'"><a class="level'.$pathIndex.' active" href="'.$url.'">'.$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->g3etChildren(1) as $sub)
{
$tmpNav=build_navigation($userTyp, $sub, $path,$subUl, $pathIndex+1, $arrayNavigation);
// $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="'.$url.'">'.$nav->getName().'</a>';
}
else
{
$navigation.='<li class="active '.$oClass.' level'.$pathIndex.'"><a class="level'.$pathIndex.' active" href="'.$url.'">'.$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="'.$url.'">'.$nav->getName().'</a>';
}
else
{
$navigation.='<li class="inactive level'.$pathIndex.'"><a class="level'.$pathIndex.' inactive" href="'.$url.'">'.$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="'.$url.'">'.$nav->getName().'</a>';
}
else
{
$navigation.='<li class="inactive '.$oClass.' level'.$pathIndex.'"><a class="level'.$pathIndex.' inactive" href="'.$url.'">'.$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, $arrayNavigation);
// $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="'.$url.'">'.$nav->getName().'</a>';
}
else
{
$navigation.='<li class="inactive level'.$pathIndex.'"><a class="level'.$pathIndex.' inactive" href="'.$url.'">'.$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;
$arrayNavigation[$pathIndex][] = $navigation;
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 = 'on';
//////////////////////////////////////////////
// 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, 1, $arrayNavigation);
$navMain.=$navi[0];
$navSub.=$navi[1];
}
ksort($arrayNavigation);
// output_ary($arrayNavigation);
$i=1;
foreach($arrayNavigation as $level) {
$navigation .= '<ul class="nav'.$i.'">';
foreach ($level as $row) {
$navigation .= $row;
}
$navigation .= '</ul>';
$i++;
}
/* 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'));
$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 Standarttemplate:
Code: Alles auswählen
<?php
//$navTemplateId = "3";
$navTemplate = new rex_template(3);
ini_set('arg_separator.output', '&');
ini_set ( "arg_separator.output", ";");
ini_set ( "url_rewriter.tags", "a=href");
// Metadaten bestimmen
$siteStartArticle = OOArticle::getArticleById($REX['START_ARTICLE_ID'], $REX['CUR_CLANG']);
$articleK = $siteStartArticle->getValue("_keywords");
$articleD = $siteStartArticle->getDescription();
if($this->getValue("description") != "") {
$meta_beschreibung = htmlspecialchars($this->getValue("description"));
} else {
$meta_beschreibung = htmlspecialchars($articleD);
}
if($this->getValue("keywords")!= "") {
$meta_suchbegriffe = htmlspecialchars($this->getValue("keywords"));
} else {
$meta_suchbegriffe = htmlspecialchars($articleK);
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title><? print $REX['SERVERNAME'].' : '.$this->getValue("name"); ?></title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<meta name="keywords" content="<?php print $meta_suchbegriffe; ?>" />
<meta name="description" content="<?php print $meta_beschreibung; ?>" />
<link rel="stylesheet" type="text/css" href="css/screen.css" media="screen" />
</head>
<body>
<div id="wrapper">
<div id="header">
<div id="logo">
<a href="http://dsf.softloop.net/index.php?article_id=<?php echo $REX['START_ARTICLE_ID'] ?>"><img src="pics/logo.gif" alt="Logo"/></a>
</div> <!-- logo Ende -->
<div class="smallnav">
<?php
switch ($REX['CUR_CLANG']) {
case 0:
echo "<span class=\"aktiv\">Deutsch</span> | <a href=".rex_getUrl("","1").">English</a>";
break;
case 1:
echo "<a href=".rex_getUrl("","0").">Deutsch</a> | <span class=\"aktiv\">English</span>";
break;
}
?>
<a href="index.php?article_id=<?php echo $REX['START_ARTICLE_ID'] ?>">Home</a>
<form action="index.php?" method="get">
<label for="search">Suche:</label>
<input type="hidden" name="article_id" value="39" />
<input type="text" class="text" id="search" name="rexsearch" value="" />
</form>
</div>
</div> <!-- header Ende -->
<div id="content">
<div id="navibar">
<div id="mainnavi">
<?php
include $navTemplate->getFile();
print $navigation."\n";
?>
</div>
<div class="content"><?php echo $this->getArticle(3); ?></div>
</div>
<div id="article">
<div id="articleheader">
<?php echo !$this->getArticle(1) ? "<h1 class=\"standard\">".htmlspecialchars($this->getValue("name"))."</h1>" : ""; ?>
<?php echo $this->getArticle(2); ?>
</div>
<?php echo $this->getArticle(1); ?>
</div>
</div> <!-- content Ende -->
<div id="footer">
<div class="smallnav"><a href="index.php?article_id=18">Sitemap</a> | <a href="index.php?article_id=17">Impressum</a></div>
</div> <!-- footer Ende -->
</div> <!-- wrapper Ende -->
Weiss jmd aus dem Stehgreif heraus was für Änderungen notwendig sind damit die Navigation wieder angezeigt wird?