Hauptnavigation 4.8.7 um eine Ebene erweitern?

Gesperrt
homtata
Beiträge: 1145
Registriert: Mi 14. Jan 2004, 14:41
Kontaktdaten:

Hauptnavigation 4.8.7 um eine Ebene erweitern?

Beitrag 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?
Zuletzt geändert von homtata am Mi 27. Aug 2008, 07:18, insgesamt 1-mal geändert.
Supporter
Beiträge: 124
Registriert: Mo 12. Mai 2008, 14:21
Wohnort: In the middle of something...
Kontaktdaten:

Beitrag 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 ;)
Ειμαστε στη μεση απο κατι...
homtata
Beiträge: 1145
Registriert: Mi 14. Jan 2004, 14:41
Kontaktdaten:

Beitrag 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.
homtata
Beiträge: 1145
Registriert: Mi 14. Jan 2004, 14:41
Kontaktdaten:

Beitrag 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();
}
?>
nspacex
Beiträge: 1
Registriert: Fr 5. Sep 2008, 00:04
Kontaktdaten:

Beitrag 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,
barni
Beiträge: 127
Registriert: Fr 28. Okt 2005, 20:54
Kontaktdaten:

Beitrag 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
ich bin genauso hilflos wie ich tu ;)
barni
Beiträge: 127
Registriert: Fr 28. Okt 2005, 20:54
Kontaktdaten:

Beitrag 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
ich bin genauso hilflos wie ich tu ;)
micro2001
Beiträge: 76
Registriert: Sa 18. Nov 2006, 10:44
Kontaktdaten:

Beitrag 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
micro2001
Beiträge: 76
Registriert: Sa 18. Nov 2006, 10:44
Kontaktdaten:

Hauptnavigationsmodul 4.8.9 mit 3. und 4. Ebene

Beitrag 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();
}
?>
rbi
Beiträge: 95
Registriert: Do 27. Sep 2007, 21:33
Kontaktdaten:

Beitrag 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.. ;)
micro2001
Beiträge: 76
Registriert: Sa 18. Nov 2006, 10:44
Kontaktdaten:

Beitrag von micro2001 »

Ich glaube, das könnte so einige User sehr gut gebrauchen (-; Inkl. mir.
Leo
Beiträge: 308
Registriert: Mi 19. Apr 2006, 19:26
Kontaktdaten:

Re: Hauptnavigation 4.8.7 um eine Ebene erweitern?

Beitrag von Leo »

Bei mir hat der Code von Nspacex funktioniert. Man muss noch ein paar Anpassungen vornehmen, dann klappt es aber.

Viele Danke Nspacex!!!
Gesperrt