, 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();
}
?>