Seite 1 von 1

Hauptnavigation 4.8.7 um eine Ebene erweitern?

Verfasst: Di 26. Aug 2008, 14:35
von homtata
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?

Verfasst: Mi 27. Aug 2008, 03:25
von Supporter
Ich würde sagen Du schaust einfach mal in einen der Threads aus der 4.6er, da wurde das schon hinreichend besprochen > Die Suche bemühen ;)

Verfasst: Mi 27. Aug 2008, 07:11
von homtata
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.

Verfasst: Mi 27. Aug 2008, 20:03
von homtata
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:

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

Verfasst: Fr 5. Sep 2008, 00:09
von nspacex
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.

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

Verfasst: Di 18. Nov 2008, 11:33
von barni
Halo,
habe das selbe Problem.
Aber der Code von Nspacex geht bei mir garnicht.

Hat das jemand schon gelöst?
Ist doch eigentlich nix aussergewöhnliches, das man ne Navi mit mehr Ebenen braucht.

Danke euch!
Barni

Verfasst: Di 18. Nov 2008, 11:40
von barni
Bei mir wird das Standardmenü so angezeigt:
Hauptnavi
--Ebene1
---Ebene2
----Ebene3
-----Ebene4 wird nicht mehr angezeigt aber wird benötigt.

Benutze die 4.8.8

Verfasst: Mi 7. Jan 2009, 23:29
von micro2001
Hallo zusammen,

hat wirklich keiner das Navigationsmodul so umgebaut, dass die dritte und vierte Ebene angezeigt wird? Bin jetzt schon ca. 3 Std. damit beschäftigt und verzweifele so langsam.

Weiß jemand Rat?

Danke und Grüße,
Ralph

Hauptnavigationsmodul 4.8.9 mit 3. und 4. Ebene

Verfasst: Mi 7. Jan 2009, 23:47
von micro2001
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.

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

Verfasst: Do 8. Jan 2009, 11:43
von rbi
Wenn ich mal wieder etwas Zeit habe, werde ich das ganze mal dynamisch bauen, sodass man die Leveltiefe angeben kann und nichts mehr editieren muss. Wie gesagt, wenn Zeit vorhanden ist.. ;)

Verfasst: Do 8. Jan 2009, 15:44
von micro2001
Ich glaube, das könnte so einige User sehr gut gebrauchen (-; Inkl. mir.

Re: Hauptnavigation 4.8.7 um eine Ebene erweitern?

Verfasst: Mi 27. Jan 2010, 19:02
von Leo
Bei mir hat der Code von Nspacex funktioniert. Man muss noch ein paar Anpassungen vornehmen, dann klappt es aber.

Viele Danke Nspacex!!!