Da die Zahl der sich dafür eignenden Menüs sehr spärlich ist, habe ich die Infinite Menus von Open Cube genommen. Diese werden als <li> Tags ausgegeben und die Formatierungen werden fast vollständig in CSS Files außerhalb abgelegt.
Dafür habe ich die printNavigation angepasst und ein paar zusätzliche Variablen eingefügt, um vor, zwischen und nach Menüpunkten der jeweiligen Ebenen HTML-Stücke einfügen zu können.
Mit etwas Geschick sollte man damit auch andere Scripte einbinden können.
Auf Anfrage gerne mehr zu den Funktionen im Detail. Es sollen noch ein paar mehr Funktionen dazukommen, um die Anpassung allgemeiner zu gestalten für die verschiedensten Zwecke.
Auf dieser URL läuft mein eingebundenes Script
http:// new . meiller . com / _de
So sieht die angepasste printNavigation in meinem Fall aus:
Code: Alles auswählen
<?php
function getActiveElements($navi='', $activeRubric=0)
{
if ($navi=='') $navi = getNavigation();
if (empty($navi)) return false;
if ($activeRubric==0) $activeRubric = $GLOBALS['cpoRubric']['id'];
$naviElements = array();
$actElements = array();
$currLevels = array();
foreach ($navi as $k=>$v) {
$currLevels[$v['level']] = $v['id'];
$naviElements[$v['id']] = $v;
if ($v['rubric']['id']==$activeRubric) {
$actElements = array_splice($currLevels, 0, $v['level']);
}
}
// add an element at position 0,
// so that $actElements[Y] makes Y equal the level
array_unshift($actElements, 'X');
return $actElements;
}
// $navi = getNavigation();
// $activeRubric = $cpoRubric['id'];
// $levels: how many levels to display
// $parent: which element to start with
// $activeOnly: do not print inactive sublevels
function printNavigation($navi = '', $activeRubric = 0, $levels = 99, $parent = 0, $activeOnly = false, $target = '', $ebeneANZ = 2)
{
global $levelALT;
global $lstatus1;
global $lstatus2;
$lstatus1 = $levelALT;
// --------------- Konfiguration ---------------
// Header-Strings, erste oder tiefere Ebene, beliebig viele Glieder hinzufuegbar
$ebeneHEADER = array(
1 => '',
2 => '<div><div style="display:none;width:1200px;"><ul id="imenus0">',
3 => '<div><div style="width:140px;top:-1px;left:2px;"><ul style=""><li>',
4 => '<div><div style="width:140px;top:-21px;left:139px;"><ul style=""><li>'
);
// Header-Strings, hoehere Ebene, beliebig viele Glieder hinzufuegbar
$ebeneHEADERback = array(
1 => '',
2 => '',
3 => '<li>',
4 => '<li>'
);
// Praefix fuer jeden Menuepunkt
$ebenePRAEFIXpunkt = array(
1 => '',
2 => '<li style="width:80px;">',
3 => '',
4 => ''
);
// Footer-Strings, beliebig viele Glieder hinzufuegbar
$ebeneFOOTER = array(
1 => '',
2 => '</ul><div style="clear:left;"></div></div></div>',
3 => '</ul></div></div>',
4 => '</ul></div></div>'
);
// Strings zwischen den Menuepunkten einer Ebene
$ebeneDAZWISCHEN = array(
1 => '',
2 => '',
3 => '<li>',
4 => '<li>'
);
// Listeneintragssuffix (i. d. R. </li>)
$endeLISTE = '</li>';
// ------------- Ende Konfiguration -------------
if ($navi=='') $navi = getNavigation();
if (empty($navi)) return false;
if ($activeRubric==0) $activeRubric = $GLOBALS['cpoRubric']['id'];
$actLevels = getActiveElements($navi, $activeRubric);
$level = 0;
if ($parent==0) $level = 1; // start with first level
$ulstart = '<ul>';
$ulend = '';
foreach ($navi as $k=>$v) {
if ($v['level']<$level) $level = 0; // printed all childs of active parent => clear $level
if ($v['id']==$parent) $level = $v['level']+1; // found active parent => save $level
if ($v['level']!=$level) continue; // not the active level => continue
if ($v['rubric']['seclevel']==SECLEVEL_CLOSED) {
if (empty($_SESSION['SID_user']['id'])) continue;
$db = new DB;
$db->query("SELECT COUNT(*) FROM ".CPO_RUBRIC_PERMISSION." "
."WHERE rubric_id='".(int)$v['rubric']['id']."' "
."AND usergroups_id='".(int)$_SESSION['SID_user']['usergroups_id']."'");
$db->next_record();
if ($db->v('COUNT(*)')<=0 && $_SESSION['SID_user']['admin']!=ROLE_ADMIN) continue;
}
$lstatus2 = $level;
// Index fuer dazwischen-Anzeige setzen (wenn kein Wechsel auf andere Ebene oder akt Ebene nicht angezeigt werden soll)
// if ($lstatus1 != $lstatus2 || $lstatus2 < $ebeneANZ) {
if ($lstatus1 != $lstatus2) {
$daz = 1;
$levelALT = $level;
} else {
$daz = 0;
}
// Header-Strings ausgeben
if ($ulstart != "") {
$praefixHEADER = $ebeneHEADER[$level];
} else {
$praefixHEADER = "";
}
if ($lstatus2 >= $ebeneANZ) {
$ebenenWECHSEL = $lstatus2-$lstatus1; // negativ: Wechsel auf hoehere Ebene hat stattgefunden, positiv: umgekehrt
if ($ebenenWECHSEL < 0) {echo $ebeneHEADERback[$level];}
else {echo $praefixHEADER;};
}
$ulstart = '';
// Footer-String vorbereiten
$ulend = ''.$ebeneFOOTER[$level];
// build link
$link = $v['navigation']['externalURL'];
$_target = $target;
// externalURLTarget can be used to override the setting
if (!empty($v['navigation']['externalURLTarget']))
$_target = $v['navigation']['externalURLTarget'];
if (isset($v['rubric']['directory']))
$link = BASE_URL.$v['rubric']['directory'].'/index.php?rubric='.urlencode($v['rubric']['name']);
// mark active list elements
if ($actLevels[$level]==$v['id']) {
// dazwischen-String als Praefix festlegen
if ($daz == 0) {$dazPRE = $ebeneDAZWISCHEN[$level];} else {
$dazPRE = "";
}
if ($lstatus2 >= $ebeneANZ) {echo $dazPRE.'';}
}
else {
// dazwischen-String als Praefix festlegen
if ($daz == 0) {$dazPRE = $ebeneDAZWISCHEN[$level];} else {
$dazPRE = "";
}
if ($lstatus2 >= $ebeneANZ) {echo $dazPRE.'';}
}
// print caption
if (empty($link))
{if ($lstatus2 >= $ebeneANZ) {echo htmlspecialchars($v['caption']);}}
else {
if ($lstatus2 >= $ebeneANZ) {
echo $ebenePRAEFIXpunkt[$lstatus2].'<a ';
echo 'href="'.htmlspecialchars($link).'"';
if ($_target!='') echo ' target="'.htmlspecialchars($_target).'"';
echo '>'.htmlspecialchars($v['caption']).'</a>';
}
}
// RECURSION!
if (
(!$activeOnly || $actLevels[$level]==$v['id']) && // print only active sublevels
$levels-1>0 // maximum number of levels to print
) printNavigation($navi, $activeRubric, $levels-1, $v['id'], $activeOnly, $target, $ebeneANZ);
if ($lstatus2 >= $ebeneANZ) {echo $endeLISTE;}
// Nummer der zuletzt dargestellten Ebene sichern
if ($levelALT != $level) {$levelALT = $level;}
}
if ($lstatus2 >= $ebeneANZ) {echo $ulend;}
}
?>