Hauptnavigation 4.8.7 um eine Ebene erweitern?
Hauptnavigation 4.8.7 um eine Ebene erweitern?
hallo,
ich scheitere daran, den modulcode für die hauptnavigation so zu erweitern, dass eine vierte ebene eingezogen werden kann.
in Contenido_FrontendNavigation.class.php habe ich bereits zwei Variablen von "3" auf "4" gesetzt, aber den modulcode und seine verschachtelungen verstehe ich tatsächlich nicht.
mein problem:
von den 4 ebenen werden jeweils nur die obersten 2 in der navigation angezeigt. wenn ich die 3. ebene anspringe, sind auch beide oberen ebenen zu sehen. nun muss ich einige artikel in eine 4. ebene schieben - wenn ich diese artikel aufrufe, sehe ich nur noch die OBERSTE ebene der navigation, die zweite wird "verschluckt" und nicht angezeigt.
kann mir jemand helfen?
ich scheitere daran, den modulcode für die hauptnavigation so zu erweitern, dass eine vierte ebene eingezogen werden kann.
in Contenido_FrontendNavigation.class.php habe ich bereits zwei Variablen von "3" auf "4" gesetzt, aber den modulcode und seine verschachtelungen verstehe ich tatsächlich nicht.
mein problem:
von den 4 ebenen werden jeweils nur die obersten 2 in der navigation angezeigt. wenn ich die 3. ebene anspringe, sind auch beide oberen ebenen zu sehen. nun muss ich einige artikel in eine 4. ebene schieben - wenn ich diese artikel aufrufe, sehe ich nur noch die OBERSTE ebene der navigation, die zweite wird "verschluckt" und nicht angezeigt.
kann mir jemand helfen?
Zuletzt geändert von homtata am Mi 27. Aug 2008, 07:18, insgesamt 1-mal geändert.
dieser hinweis nutzt mir leider wenig. a) bemühe ich immer 2 stunden lang die suche, bevor ich das forum hier aktiv bemühe und b) ist die hauptnavigation von 4.8.x komplett verschieden von der 4.6.x.
es werden völlig andere klassen bemüht, die verschachtelung der abfragen ist komplett anders, die abfrage von ebene 2 sieht z.B. völlig anders aus die von ebene 3, so dass ich KEINE ahnung habe, an welcher stelle in ebene 3 ich welche abfrage zu ebene 4 einfügen soll!
ich würde auch gern wissen, ob ich für diese navigation die klassen um neue funktionen erweitern muss (abgesehen von der werteerhöhung von 3 auf 4) oder ob es tatsächlich allein durch den modulcode anpassbar ist.
ich HÄTTE eine 4.6.23-version mit 5 ebenen, aber ich möchte mit dem code dem beispielmandanten der 4.8.x treu bleiben, weil ich denke: die programmierer werden sich schon was gedacht haben, wenn sie den modulcode extra ändern.
es werden völlig andere klassen bemüht, die verschachtelung der abfragen ist komplett anders, die abfrage von ebene 2 sieht z.B. völlig anders aus die von ebene 3, so dass ich KEINE ahnung habe, an welcher stelle in ebene 3 ich welche abfrage zu ebene 4 einfügen soll!
ich würde auch gern wissen, ob ich für diese navigation die klassen um neue funktionen erweitern muss (abgesehen von der werteerhöhung von 3 auf 4) oder ob es tatsächlich allein durch den modulcode anpassbar ist.
ich HÄTTE eine 4.6.23-version mit 5 ebenen, aber ich möchte mit dem code dem beispielmandanten der 4.8.x treu bleiben, weil ich denke: die programmierer werden sich schon was gedacht haben, wenn sie den modulcode extra ändern.
wer kann helfen?
ich komme auf keinen grünen zweig
wann immer ich in die 4. ebene gehe, wird nur noch die erste ebene der hauptnavigation angezeigt, alle darunterliegenden menüs werden verworfen.
die von mir reingeschriebenen kommentare sind gaga; ich brauchte lediglich anhaltspunkte, wo ich im skript einhaken kann, aber wie ihr seht, verstehe ich die verschachtelung nicht wirklich:
hier der code, der so nicht funktionieren will:
ich komme auf keinen grünen zweig

die von mir reingeschriebenen kommentare sind gaga; ich brauchte lediglich anhaltspunkte, wo ich im skript einhaken kann, aber wie ihr seht, verstehe ich die verschachtelung nicht wirklich:
hier der code, der so nicht funktionieren will:
Code: Alles auswählen
<?php
/**
* $RCSfile$
*
* Description: Navigation, left side.
*
* @version 1.0.0
* @author Rudi Bieller
* @copyright four for business AG <www.4fb.de>
*
* {@internal
* created 2008-04-07
* }}
*
* $Id$
*/
// include Contenido_FrontendNavigation class
cInclude('classes', 'Contenido_FrontendNavigation/Contenido_FrontendNavigation.class.php');
cInclude('classes', 'Contenido_FrontendNavigation/Contenido_FrontendNavigation_Breadcrumb.class.php');
// get start idcat
$iIdcatStart = getEffectiveSetting('navigation', 'idcat-home', 1);
// instantiate 2nd + 3rd template object, reset all
$tpl2 = new Template();
$tpl3 = new Template();
$tpl4 = new Template();
if (!isset($tpl) || !is_object($tpl)) {
$tpl = new Template();
}
$tpl->reset();
$tpl2->reset();
$tpl3->reset();
$tpl4->reset();
// build navigation
try {
//Vordefinition globale Variablen
$oFeNav = new Contenido_FrontendNavigation($db, $cfg, $client, $lang, $cfgClient);
$oBreadcrumb = new Contenido_FrontendNavigation_Breadcrumb($db, $cfg, $client, $lang, $cfgClient);
$aBreadcrumb = $oBreadcrumb->getAsArray($idcat, 1); // this nav starts at level 1
$oFeNav->setAuth($auth); // to make sure user sees what he's allowed to see
$oContenidoCategories = $oFeNav->getSubCategories($iIdcatStart, true);
// Auslesen Ebene 1
if ($oContenidoCategories->count() > 0) {
foreach ($oContenidoCategories as $oContenidoCategory) {
$sSubcats = '';
$tpl2->reset();
$bHasActiveSubCat = false;
// check if we need to load subcategories belonging to level 1
$oSubCatsLevel2 = $oFeNav->getSubCategories($oContenidoCategory->getIdCat(), true);
$aSubCatsLevel2 = $oFeNav->getSubCategories($oContenidoCategory->getIdCat(), false);
$bShowSubcatLevel2 = (intval($idcat) == $oContenidoCategory->getIdCat() || in_array(intval($idcat), $aSubCatsLevel2)
|| (isset($aBreadcrumb[2]) && intval($idcat) == $aBreadcrumb[2] && in_array($aBreadcrumb[1], $aSubCatsLevel2)))
? true : false;
// falls ebene 2 existiert: Auslesen Ebene 2
if ($bShowSubcatLevel2 === true && $oSubCatsLevel2->count() > 0) {
foreach ($oFeNav->getSubCategories($oContenidoCategory->getIdCat(), true) as $oSubCategory) {
$bHasActiveSubSubCat = false;
// check if we need to load subsubcategories to level 1
$oSubCatsLevel3 = $oFeNav->getSubCategories($oSubCategory->getIdCat(), true);
$aSubCatsLevel3 = $oFeNav->getSubCategories($oSubCategory->getIdCat(), false);
$bShowSubcatLevel3 = (intval($idcat) == $oSubCategory->getIdCat() ||
in_array(intval($idcat), $aSubCatsLevel3))
? true : false;
// falls ebene 3 existiert: Auslesen Ebene 3
$sSubcats2 = '';
if ($bShowSubcatLevel3 === true && $oSubCatsLevel3->count() > 0) {
foreach ($oFeNav->getSubCategories($oSubCategory->getIdCat(), true) as $oSubSubCategory) {
$bHasActiveSubSubSubCat = false;
// check if we need to load subsubsubcategories to level 1
$oSubCatsLevel4 = $oFeNav->getSubCategories($oSubSubCategory->getIdCat(), true);
$aSubCatsLevel4 = $oFeNav->getSubCategories($oSubSubCategory->getIdCat(), false);
$bShowSubcatLevel4 = (intval($idcat) == $oSubSubCategory->getIdCat() ||
in_array(intval($idcat), $aSubCatsLevel4))
? true : false;
// falls ebene 4 existiert: Auslesen Ebene 4
$sSubcats3 = '';
if ($bShowSubcatLevel4 === true && $oSubCatsLevel4->count() > 0) {
foreach ($oSubCatsLevel4 as $oSubSubSubCategories) {
if ($bHasActiveSubSubCat === false && intval($idcat) == $oSubSubSubCategories->getIdCat()) {
$bHasActiveSubSubCat = true;
}
// entscheide, ob Ebene 3 Subkategorien hat
if ($bHasActiveSubSubSubCat === false && intval($idcat) == $oSubSubSubCategories->getIdCat()) {
$bHasActiveSubSubSubCat = true;
}
// Erstelle 1 Element der Ebene 4
toTpl($tpl4, $oSubSubSubCategories, (intval($idcat) == $oSubSubSubCategories->getIdCat() ? ' class="active"' : ''), '');
}
$sSubcats3 = $tpl4->generate('templates/navigation_main_item.html', true, false);
$tpl4->reset();
$tpl4->set('s', 'items', $sSubcats3);
$tpl4->set('s', 'css-class', ' class="subsubSubNavigation"');
$sSubcats3 = $tpl4->generate('templates/navigation_main_container.html', true, false);
}
// Auslesen Ebene 4 Ende
// entscheide, ob dieser Zweig der Ebene 2 aktive Subkategorien hat:
if ($bHasActiveSubSubCat === false && intval($idcat) == $oSubSubCategory->getIdCat()) {
$bHasActiveSubSubCat = true;
}
// Erstelle 1 element der Ebene 3
toTpl($tpl3, $oSubSubCategory,
(intval($idcat) == $oSubSubCategory->getIdCat() || $bHasActiveSubSubSubCat === true ? ' class="active"' : ''),
$sSubcats3);
} //foreach-ende
// Bastle Ebene 3 zusammen
//$sSubcats2 = $tpl3->generate('templates/navigation_main_item.html', true, false);
$tpl3->reset();
$tpl3->set('s', 'items', $sSubcats2);
$tpl3->set('s', 'css-class', ' class="subNavigation"');
//$sSubcats2 = $tpl3->generate('templates/navigation_main_container.html', true, false);
}
// Auslesen Ebene 3 Ende
// entscheide, ob dieser Zweig der Ebene 2 aktive Subkategorien hat:
if ($bHasActiveSubCat === false && intval($idcat) == $oSubCategory->getIdCat()) {
$bHasActiveSubCat = true;
}
// Erstelle 1 element der Ebene 2
toTpl($tpl2, $oSubCategory,
(intval($idcat) == $oSubCategory->getIdCat() || $bHasActiveSubSubCat === true ? ' class="active"' : ''),
$sSubcats2);
} //foreach-ende
// Bastle Ebene 2 zusammen
$sSubcats = $tpl2->generate('templates/navigation_main_item.html', true, false);
$tpl2->reset();
$tpl2->set('s', 'items', $sSubcats);
$tpl2->set('s', 'css-class', ' class="subNavigation"');
$sSubcats = $tpl2->generate('templates/navigation_main_container.html', true, false);
}
// Auslesen Ebene 2 Ende
// Generiere 1 Element der Ebene 1 auf der Basis obiger Ergebnisse.
toTpl($tpl, $oContenidoCategory, ($bHasActiveSubCat === true || intval($idcat) == $oContenidoCategory->getIdCat() ? ' class="active"' : ''), $sSubcats);
}
// Stelle hier die komplette Navigation (Ebene 1?) zusammen
$sCats = $tpl->generate('templates/navigation_main_item.html', true, false);
$tpl->reset();
$tpl->set('s', 'css-class', '');
$tpl->set('s', 'items', $sCats);
$tpl->generate('templates/navigation_main_container.html');
}
// Ebene 1 Ende
} catch (Exception $e) {
echo 'Some error occured: ' . $e->getMessage() . ': ' . $e->getFile() . ' at line '.$e->getLine() . ' ('.$e->getTraceAsString().')';
}
/**
* Helper to push values to Template object
* @param Template $oTpl
* @param Contenido_Category $oCat
* @param string $sActiveCssClass must bei either empty string or " class="classname"
* @param string $sSubcats String with subcategories of current category
*/
function toTpl(&$oTpl, Contenido_Category $oCat, $sActiveCssClass, $sSubcats) {
$oTpl->set('d', 'css-class', $sActiveCssClass);
$oTpl->set('d', 'url', 'front_content.php?idcat='.$oCat->getIdCat());
$oTpl->set('d', 'title', $oCat->getCategoryLanguage()->getName());
$oTpl->set('d', 'label', $oCat->getCategoryLanguage()->getName());
$oTpl->set('d', 'subcategories', $sSubcats); // followup level
$oTpl->next();
}
?>
Hi,
ich hab mir sowas letztens mal auzf die schnelle, soll heißen es ist etwas unsauber und es kann evtl. zu fehlern kommen, zusammen gebastelt. ggf. hilft es dir ja aber.
LG,
ich hab mir sowas letztens mal auzf die schnelle, soll heißen es ist etwas unsauber und es kann evtl. zu fehlern kommen, zusammen gebastelt. ggf. hilft es dir ja aber.
Code: Alles auswählen
<?php
// include Contenido_FrontendNavigation class
cInclude('classes', 'Contenido_FrontendNavigation/Contenido_FrontendNavigation.class.php');
cInclude('classes', 'Contenido_FrontendNavigation/Contenido_FrontendNavigation_Breadcrumb.class.php');
// get start idcat
$iIdcatStart = getEffectiveSetting('navigation', 'main-idcat', 1);
// instantiate 2nd + 3rd template object, reset all
$tpl2 = new Template();
$tpl3 = new Template();
$tpl4 = new Template();
$tpl5 = new Template();
if (!isset($tpl) || !is_object($tpl)) {
$tpl = new Template();
}
$tpl->reset();
$tpl2->reset();
$tpl3->reset();
$tpl4->reset();
$tpl5->reset();
$debug = false;
// build navigation
try {
$oFeNav = new Contenido_FrontendNavigation($db, $cfg, $client, $lang, $cfgClient);
$oBreadcrumb = new Contenido_FrontendNavigation_Breadcrumb($db, $cfg, $client, $lang, $cfgClient);
$aBreadcrumb = $oBreadcrumb->getAsArray($idcat, 1); // this nav starts at level 1
$oFeNav->setAuth($auth); // to make sure user sees what he's allowed to see
$oContenidoCategories = $oFeNav->getSubCategories($iIdcatStart, true, true, 6);
if ($oContenidoCategories->count() > 0) {
toTplArt($tpl, 'Home', ($idart == 28 ? ' class="active"': ''), '');
foreach ($oContenidoCategories as $oContenidoCategory) {
$sSubcats = '';
$tpl2->reset();
$bHasActiveSubCat = false;
// check if we need to load subcategories
$oSubCatsLevel2 = $oFeNav->getSubCategories($oContenidoCategory->getIdCat(), true);
$aSubCatsLevel2 = $oFeNav->getSubCategories($oContenidoCategory->getIdCat(), false);
$bShowSubcatLevel2 = (intval($idcat) == $oContenidoCategory->getIdCat() || in_array(intval($idcat), $aSubCatsLevel2) || in_array($oContenidoCategory->getIdCat(), $aBreadcrumb) || (isset($aBreadcrumb[2]) && intval($idcat) == $aBreadcrumb[2] && in_array($aBreadcrumb[1], $aSubCatsLevel2))) ? true : false;
if ($debug) {
print_r($aBreadcrumb);
print ($idcat);
}
if ($debug) {
#print "....".in_array(intval($idcat), $aSubCatsLevel2)."<br>";
#print "<pre>";
#print_r($aSubCatsLevel2);
#print "</pre>";
print "TRACE showSubCatLevel2:".$bShowSubcatLevel2." - $oContenidoCategory->getIdCat()".$oContenidoCategory->getIdCat()." - breadcrumb[2]:".$aBreadcrumb[2]." - idcat:".$idcat." - NAME:".$oContenidoCategory->getCategoryLanguage()->getName()."<br/>";
}
if ($bShowSubcatLevel2 === true && $oSubCatsLevel2->count() > 0) {
foreach ($oFeNav->getSubCategories($oContenidoCategory->getIdCat(), true) as $oSubCategory) {
$sSubcats2 = '';
$tpl3->reset();
$bHasActiveSubSubCat = false;
// check if we need to load subsubcategories
$oSubCatsLevel3 = $oFeNav->getSubCategories($oSubCategory->getIdCat(), true);
$aSubCatsLevel3 = $oFeNav->getSubCategories($oSubCategory->getIdCat(), false);
//$bShowSubcatLevel3 = (intval($idcat) == $oSubCategory->getIdCat() || in_array(intval($idcat), $aSubCatsLevel3))? true : false;
$bShowSubcatLevel3 = (intval($idcat) == $oSubCategory->getIdCat() || in_array(intval($idcat), $aSubCatsLevel3) || in_array($oSubCategory->getIdCat(), $aBreadcrumb) || (isset($aBreadcrumb[3]) && intval($idcat) == $aBreadcrumb[3] && in_array($aBreadcrumb[2], $aSubCatsLevel3))) ? true : false;
if ($debug) {
print "TRACE showSubCatLevel3:".$bShowSubcatLevel3." - breadcrumb[3]:".$aBreadcrumb[3]." - idcat:".$idcat." - NAME:".$oSubCategory->getCategoryLanguage()->getName()."<br/>";
}
if ($bShowSubcatLevel3 === true && $oSubCatsLevel3->count() > 0) {
// foreach ($oSubCatsLevel3 as $oSubSubCategories) {
foreach ($oFeNav->getSubCategories($oSubCategory->getIdCat(), true) as $oSubSubCategories) {
$sSubcats3 = '';
$tpl4->reset();
$bHasActiveSubSubSubCat = false;
// check if we need to load subsubcategories
$oSubCatsLevel4 = $oFeNav->getSubCategories($oSubSubCategories->getIdCat(), true);
$aSubCatsLevel4 = $oFeNav->getSubCategories($oSubSubCategories->getIdCat(), false);
//$bShowSubcatLevel4 = (intval($idcat) == $oSubSubCategories->getIdCat() || in_array(intval($idcat), $aSubCatsLevel4)) ? true : false;
$bShowSubcatLevel4 = (intval($idcat) == $oSubSubCategories->getIdCat() || in_array(intval($idcat), $aSubCatsLevel4) || (isset($aBreadcrumb[4]) && intval($idcat) == $aBreadcrumb[4] && in_array($aBreadcrumb[3], $aSubCatsLevel4))) ? true : false;
$showSubLevels4a5 = true;
if ($aBreadcrumb[0] == 19 || $aBreadcrumb[0] == 35 || $aBreadcrumb[0] == 48 || $aBreadcrumb[0] == 72) {
$showSubLevels4a5 = false;
}
if ($debug) {
print "TRACE showSubCatLevel4:".$bShowSubcatLevel4." - breadcrumb[4]:".$aBreadcrumb[4]." - idcat:".$idcat." - NAME:".$oSubSubCategories->getCategoryLanguage()->getName()."<br/>";
}
if ($bShowSubcatLevel4 === true && $oSubCatsLevel4->count() > 0) {
foreach ($oFeNav->getSubCategories($oSubSubCategories->getIdCat(), true) as $oSubSubSubCategories) {
$sSubcats4 = '';
$tpl5->reset();
$bHasActiveSubSubSubSubCat = false;
// check if we need to load subsubcategories
$oSubCatsLevel5 = $oFeNav->getSubCategories($oSubSubSubCategories->getIdCat(), true);
$aSubCatsLevel5 = $oFeNav->getSubCategories($oSubSubSubCategories->getIdCat(), false);
$bShowSubcatLevel5 = (intval($idcat) == $oSubSubSubCategories->getIdCat() || in_array(intval($idcat), $aSubCatsLevel5)) ? true : false;
if ($bShowSubcatLevel5 === true && $oSubCatsLevel5->count() > 0) {
foreach ($oSubCatsLevel5 as $oSubSubSubSubCategories) {
if ($bHasActiveSubCat === false && intval($idcat) == $oSubSubSubSubCategories->getIdCat()) {
$bHasActiveSubCat = true;
}
if ($bHasActiveSubSubCat === false && intval($idcat) == $oSubSubSubSubCategories->getIdCat()) {
$bHasActiveSubSubCat = true;
}
if ($bHasActiveSubSubSubCat === false && intval($idcat) == $oSubSubSubSubCategories->getIdCat()) {
$bHasActiveSubSubSubCat = true;
}
if ($bHasActiveSubSubSubSubCat === false && intval($idcat) == $oSubSubSubSubCategories->getIdCat()) {
$bHasActiveSubSubSubSubCat = true;
}
#print "TRACE: LEVEL 5 REACHED - 1 point added (idcat:".$idcat." | ".$oSubSubSubSubCategories->getIdCat()."<br>";
if ($showSubLevels4a5) {
toTpl($tpl5, $oSubSubSubSubCategories, (intval($idcat) == $oSubSubSubSubCategories->getIdCat() ? ' class="active"' : ''), '');
}
}
if ($showSubLevels4a5) {
$sSubcats4 = $tpl5->generate('templates/navigation_sec_item.html', true, false);
$tpl5->reset();
$tpl5->set('s', 'items', $sSubcats4);
$tpl5->set('s', 'css-class', ' class="subSubSubSubNavigation"');
$sSubcats4 = $tpl5->generate('templates/navigation_sec_container.html', true, false);
}
}
if ($bHasActiveSubCat === false && intval($idcat) == $oSubSubSubCategories->getIdCat()) {
$bHasActiveSubCat = true;
}
if ($bHasActiveSubSubCat === false && intval($idcat) == $oSubSubSubCategories->getIdCat()) {
$bHasActiveSubSubCat = true;
}
if ($bHasActiveSubSubSubCat === false && intval($idcat) == $oSubSubSubCategories->getIdCat()) {
$bHasActiveSubSubSubCat = true;
}
if ($showSubLevels4a5) {
toTpl($tpl4, $oSubSubSubCategories, (intval($idcat) == $oSubSubSubCategories->getIdCat() || $bHasActiveSubSubSubSubCat === true ? ' class="active"' : ''), $sSubcats4);
}
}
$sSubcats3 = $tpl4->generate('templates/navigation_sec_item.html', true, false);
$tpl4->reset();
$tpl4->set('s', 'items', $sSubcats3);
$tpl4->set('s', 'css-class', ' class="subSubSubNavigation"');
$sSubcats3 = $tpl4->generate('templates/navigation_sec_container.html', true, false);
}
if ($bHasActiveSubCat === false && intval($idcat) == $oSubSubCategories->getIdCat()) {
$bHasActiveSubCat = true;
}
if ($bHasActiveSubSubCat === false && intval($idcat) == $oSubSubCategories->getIdCat()) {
$bHasActiveSubSubCat = true;
}
//toTpl($tpl3, $oSubSubCategories, (intval($idcat) == $oSubSubCategories->getIdCat() ? ' class="active"' : ''), '');
toTpl($tpl3, $oSubSubCategories, (intval($idcat) == $oSubSubCategories->getIdCat() || $bHasActiveSubSubSubCat === true ? ' class="active"' : ''), $sSubcats3);
} #foreach
$sSubcats2 = $tpl3->generate('templates/navigation_sec_item.html', true, false);
$tpl3->reset();
$tpl3->set('s', 'items', $sSubcats2);
$tpl3->set('s', 'css-class', ' class="subSubNavigation"');
$sSubcats2 = $tpl3->generate('templates/navigation_sec_container.html', true, false);
} #if
if ($bHasActiveSubCat === false && intval($idcat) == $oSubCategory->getIdCat()) {
$bHasActiveSubCat = true;
}
toTpl($tpl2, $oSubCategory, (intval($idcat) == $oSubCategory->getIdCat() || $bHasActiveSubSubCat === true ? ' class="active"' : ''), $sSubcats2);
}
$sSubcats = $tpl2->generate('templates/navigation_sec_item.html', true, false);
$tpl2->reset();
$tpl2->set('s', 'items', $sSubcats);
$tpl2->set('s', 'css-class', ' class="subNavigation"');
$sSubcats = $tpl2->generate('templates/navigation_sec_container.html', true, false);
}
toTpl($tpl, $oContenidoCategory, ($bHasActiveSubCat === true || intval($idcat) == $oContenidoCategory->getIdCat() ? ' class="active"' : ''), $sSubcats);
}
$sCats = $tpl->generate('templates/navigation_sec_item.html', true, false);
$tpl->reset();
$tpl->set('s', 'css-class', '');
$tpl->set('s', 'items', $sCats);
$tpl->generate('templates/navigation_sec_container.html');
}
} catch (Exception $e) {
echo 'Some error occured: ' . $e->getMessage() . ': ' . $e->getFile() . ' at line '.$e->getLine() . ' ('.$e->getTraceAsString().')';
}
/**
* Helper to push values to Template object
* @param Template $oTpl
* @param Contenido_Category $oCat
* @param string $sActiveCssClass must bei either empty string or " class="classname"
* @param string $sSubcats String with subcategories of current category
*/
function toTpl(&$oTpl, Contenido_Category $oCat, $sActiveCssClass, $sSubcats) {
$oTpl->set('d', 'css-class', $sActiveCssClass);
$oTpl->set('d', 'url', 'front_content.php?idcat='.$oCat->getIdCat());
$oTpl->set('d', 'title', htmlentities($oCat->getCategoryLanguage()->getName()));
$oTpl->set('d', 'label', htmlentities($oCat->getCategoryLanguage()->getName()));
$oTpl->set('d', 'subcategories', $sSubcats); // followup level
$oTpl->next();
}
function toTplArt(&$oTpl, $name, $sActiveCssClass, $sSubcats) {
$oTpl->set('d', 'css-class', $sActiveCssClass);
$oTpl->set('d', 'url', 'front_content.php?idart='.$idart);
$oTpl->set('d', 'title', htmlentities($name));
$oTpl->set('d', 'label', htmlentities($name));
$oTpl->set('d', 'subcategories', $sSubcats); // followup level
$oTpl->next();
}
?>
Hauptnavigationsmodul 4.8.9 mit 3. und 4. Ebene
Hallo zusammen,
ich weiß nicht wie, aber im Code-Dschungel des Hauptnavigationsmoduls habe ich mich so dermaßen verirrt, aber bin doch einigermaßen heile wieder rausgekommen. Die 3. und 4. Ebene funktioniert nun bei mir.
Wenn es jemand testen will, hier der Code.
ich weiß nicht wie, aber im Code-Dschungel des Hauptnavigationsmoduls habe ich mich so dermaßen verirrt, aber bin doch einigermaßen heile wieder rausgekommen. Die 3. und 4. Ebene funktioniert nun bei mir.
Wenn es jemand testen will, hier der Code.
Code: Alles auswählen
<?PHP
// include Contenido_FrontendNavigation class
cInclude('classes', 'Contenido_FrontendNavigation/Contenido_FrontendNavigation.class.php');
cInclude('classes', 'Contenido_FrontendNavigation/Contenido_FrontendNavigation_Breadcrumb.class.php');
// get start idcat
$iIdcatStart = getEffectiveSetting('navigation', 'idcat-home', 1);
// instantiate 2nd + 3rd template object, reset all
$tpl2 = new Template();
$tpl3 = new Template();
$tpl4 = new Template();
if (!isset($tpl) || !is_object($tpl)) {
$tpl = new Template();
}
$tpl->reset();
$tpl2->reset();
$tpl3->reset();
$tpl4->reset();
// build navigation
try {
$oFeNav = new Contenido_FrontendNavigation($db, $cfg, $client, $lang, $cfgClient);
$oBreadcrumb = new Contenido_FrontendNavigation_Breadcrumb($db, $cfg, $client, $lang, $cfgClient);
$aBreadcrumb = $oBreadcrumb->getAsArray($idcat, 1); // this nav starts at level 1
$oFeNav->setAuth($auth); // to make sure user sees what he's allowed to see
$oContenidoCategories = $oFeNav->getSubCategories($iIdcatStart, true);
if ($oContenidoCategories->count() > 0) {
foreach ($oContenidoCategories as $oContenidoCategory) {
$sSubcats = '';
$tpl2->reset();
$bHasActiveSubCat = false;
// check if we need to load subcategories
$oSubCatsLevel2 = $oFeNav->getSubCategories($oContenidoCategory->getIdCat(), true);
$aSubCatsLevel2 = $oFeNav->getSubCategories($oContenidoCategory->getIdCat(), false);
$bShowSubcatLevel2 = (intval($idcat) == $oContenidoCategory->getIdCat() || in_array(intval($idcat), $aSubCatsLevel2)
|| (isset($aBreadcrumb[2]) && intval($idcat) == $aBreadcrumb[2] && in_array($aBreadcrumb[1], $aSubCatsLevel2)))
? true : false;
if ($bShowSubcatLevel2 === true && $oSubCatsLevel2->count() > 0) {
foreach ($oFeNav->getSubCategories($oContenidoCategory->getIdCat(), true) as $oSubCategory) {
$bHasActiveSubSubCat = false;
// check if we need to load subsubcategories
$oSubCatsLevel3 = $oFeNav->getSubCategories($oSubCategory->getIdCat(), true);
$aSubCatsLevel3 = $oFeNav->getSubCategories($oSubCategory->getIdCat(), false);
$bShowSubcatLevel3 = (intval($idcat) == $oSubCategory->getIdCat() || in_array(intval($idcat), $aSubCatsLevel3) || in_array($oSubCategory->getIdCat(), $aBreadcrumb) || (isset($aBreadcrumb[3]) && intval($idcat) == $aBreadcrumb[3] && in_array($aBreadcrumb[2], $aSubCatsLevel3))) ? true : false;
$sSubcats2 = '';
if ($bShowSubcatLevel3 === true) {
foreach ($oSubCatsLevel3 as $oSubSubCategories) {
$bHasActiveSubSubCat = false;
// check if we need to load subsubcategories
$oSubCatsLevel4 = $oFeNav->getSubCategories($oSubSubCategories->getIdCat(), true);
$aSubCatsLevel4 = $oFeNav->getSubCategories($oSubSubCategories->getIdCat(), false);
$bShowSubcatLevel4 = (intval($idcat) == $oSubSubCategories->getIdCat() || in_array(intval($idcat), $aSubCatsLevel4) || (isset($aBreadcrumb[4]) && intval($idcat) == $aBreadcrumb[4] && in_array($aBreadcrumb[3], $aSubCatsLevel4))) ? true : false;
if ($bHasActiveSubCat === false && intval($idcat) == $oSubSubCategories->getIdCat()) {
$bHasActiveSubCat = true;
}
if ($bHasActiveSubSubCat === false && intval($idcat) == $oSubSubCategories->getIdCat()) {
$bHasActiveSubSubCat = true;
}
if ($bShowSubcatLevel4 === true && $oSubCatsLevel4->count() > 0) {
foreach ($oSubCatsLevel4 as $oSubSubSubCategories) {
$bHasActiveSubSubSubCat = false;
// check if we need to load subsubcategories
$oSubCatsLevel5 = $oFeNav->getSubCategories($oSubSubSubCategories->getIdCat(), true);
$aSubCatsLevel5 = $oFeNav->getSubCategories($oSubSubSubCategories->getIdCat(), false);
$bShowSubcatLevel5 = (intval($idcat) == $oSubSubSubCategories->getIdCat() || in_array(intval($idcat), $aSubCatsLevel5)) ? true : false;
if ($bHasActiveSubSubCat === false && intval($idcat) == $oSubSubSubCategories->getIdCat()) {
$bHasActiveSubSubCat = true;
}
if ($bHasActiveSubSubSubCat === false && intval($idcat) == $oSubSubSubCategories->getIdCat()) {
$bHasActiveSubSubSubCat = true;
}
toTpl($tpl4, $oSubSubSubCategories, (intval($idcat) == $oSubSubSubCategories->getIdCat() || $bHasActiveSubSubSubCat === true ? ' class="current"' : ''), $sSubcats4);
}
$sSubcats3 = $tpl4->generate('templates/navigation_subsubsub_item.html', true, false);
$tpl4->reset();
$tpl4->set('s', 'items', $sSubcats3);
$tpl4->set('s', 'css-class', ' class="subSubNavigation"');
$sSubcats3 = $tpl4->generate('templates/navigation_subsubsub_container.html', true, false);
}
toTpl($tpl3, $oSubSubCategories, (intval($idcat) == $oSubSubCategories->getIdCat() || $bHasActiveSubSubSubCat === true ?' class="current"' : ''), $sSubcats3);
}
$sSubcats2 = $tpl3->generate('templates/navigation_subsub_item.html', true, false);
$tpl3->reset();
$tpl3->set('s', 'items', $sSubcats2);
$tpl3->set('s', 'css-class', ' class="subSubNavigation"');
$sSubcats2 = $tpl3->generate('templates/navigation_subsub_container.html', true, false);
}
if ($bHasActiveSubCat === false && intval($idcat) == $oSubCategory->getIdCat()) {
$bHasActiveSubCat = true;
}
toTpl($tpl2, $oSubCategory,
(intval($idcat) == $oSubCategory->getIdCat() || $bHasActiveSubSubCat === true ? ' class="current"' : ''),
$sSubcats2);
}
$sSubcats = $tpl2->generate('templates/navigation_sub_item.html', true, false);
$tpl2->reset();
$tpl2->set('s', 'items', $sSubcats);
$tpl2->set('s', 'css-class', ' class="subNavigation"');
$sSubcats = $tpl2->generate('templates/navigation_sub_container.html', true, false);
}
toTpl($tpl, $oContenidoCategory, ($bHasActiveSubCat === true || intval($idcat) == $oContenidoCategory->getIdCat() ? ' class="current"' : ''), $sSubcats);
}
$sCats = $tpl->generate('templates/navigation_main_item.html', true, false);
$tpl->reset();
$tpl->set('s', 'css-class', '');
$tpl->set('s', 'items', $sCats);
$tpl->generate('templates/navigation_main_container.html');
}
} catch (Exception $e) {
echo 'Some error occured: ' . $e->getMessage() . ': ' . $e->getFile() . ' at line '.$e->getLine() . ' ('.$e->getTraceAsString().')';
}
/**
* Helper to push values to Template object
* @param Template $oTpl
* @param Contenido_Category $oCat
* @param string $sActiveCssClass must bei either empty string or " class="classname"
* @param string $sSubcats String with subcategories of current category
*/
function toTpl(&$oTpl, Contenido_Category $oCat, $sActiveCssClass, $sSubcats) {
$oTpl->set('d', 'css-class', $sActiveCssClass);
$oTpl->set('d', 'url', 'front_content.php?idcat='.$oCat->getIdCat());
$oTpl->set('d', 'title', $oCat->getCategoryLanguage()->getName());
$oTpl->set('d', 'label', $oCat->getCategoryLanguage()->getName());
$oTpl->set('d', 'subcategories', $sSubcats); // followup level
$oTpl->next();
}
?>
Re: Hauptnavigation 4.8.7 um eine Ebene erweitern?
Bei mir hat der Code von Nspacex funktioniert. Man muss noch ein paar Anpassungen vornehmen, dann klappt es aber.
Viele Danke Nspacex!!!
Viele Danke Nspacex!!!