Modul Navigation_Main

Gesperrt
Kozu
Beiträge: 42
Registriert: Mo 27. Aug 2007, 11:38
Kontaktdaten:

Modul Navigation_Main

Beitrag von Kozu »

Hi,

hatte das Problem, dass das bei Contenido mitgelieferte Navigationsmodul "Navigation_Main" von Rudi Bieller für die zweite und folgenden Navigations-Ebenes keine eigene <ul> ausgegeben hat. Alle Navigationsebenen waren in einer <ul> mit verschiedenen <li>-Klassen. Ein Freund von mir (ich kann so was leider nicht) hat das Modul so umgeschrieben, dass jede weitere Navigationsebene in eine extra <ul> gepackt wird. Das umgeschriebene Modul würde ich hier gerne posten, vielleicht kann es der ein oder andere gebrauchen.

Hier der geänderte Code für die Datei "Contenido_NavMain_Util.class.php" in /cms/includes/Util/Modules:

Code: Alles auswählen


<?php
/**
 * Project:
 * Contenido Content Management System
 *
 * Description:
 * Recursive loop over given category for building a frontend navigation
 *
 * Requirements:
 * @con_php_req 5.0
 *
 *
 * @version    1.0.0
 * @author     Rudi Bieller
 * @copyright  four for business AG <www.4fb.de>
 *
 * {@internal
 *   created 2009-01-15
 *
 *   $Id: Contenido_NavMain_Util.class.php 969 2009-01-19 12:32:13Z rudi.bieller $
 * }}
 *
 */

class Contenido_NavMain_Util {
    /**
     * Recursive Loop over all (sub)categories.
     * Each level will be assigned a css class navmainStandardLevel_x
     *
     * @param Contenido_Category $oCategory
     * @param Contenido_FrontendNavigation $oFrontendNavigation
     * @param Template $oTpl
     * @param string $sUrlStyle
     * @param array $aCfg
     * @param int $iLang
     * @param array $aLevelInfo Information for marking active cat per levels
     * @param array $aDepthInfo Info on level depth / where to stop. Format: array(iCurrentLoopCount, iMaxLoopCount)
     * @return void
     */
    public static function loopCats(Contenido_Category $oCategory, Contenido_FrontendNavigation $oFrontendNavigation, Template $oTpl, array $aCfg, $iLang, array $aLevelInfo, $iCurrentPageIdcat, array $aDepthInfo = array()) {
    	$aDepthInfo[0] = isset($aDepthInfo[0]) ? $aDepthInfo[0] + 1 : 1;
    	$aDepthInfo[1] = isset($aDepthInfo[1]) ? $aDepthInfo[1] : 1;
        // display current item
    	$iItemLevel = $oFrontendNavigation->getLevel($oCategory->getIdCat());
    	if (!isset($aLevelInfo[$oCategory->getIdCat()])) {
    		$aLevelInfo[$oCategory->getIdCat()] = array();
    	}
    	$oCurrentSubcategories = $oFrontendNavigation->getSubCategories($oCategory->getIdCat());
    	$aLevelInfo[$oCategory->getIdCat()]['has_children'] = $oCurrentSubcategories->count() > 0;
    	$aLevelInfo[$oCategory->getIdCat()]['first_child_item'] = -1;
    	$aLevelInfo[$oCategory->getIdCat()]['last_child_item'] = -1;
        $bMarkActive = $oCategory->getIdCat() == $iCurrentPageIdcat || $oFrontendNavigation->isInPathToRoot($oCategory->getIdCat(), $iCurrentPageIdcat);
    	if ($oCurrentSubcategories->count() > 0) {
    		$aLevelInfo[$oCategory->getIdCat()]['first_child_item'] = $oCurrentSubcategories[0]->getIdCat();
    		$aLevelInfo[$oCategory->getIdCat()]['last_child_item'] = $oCurrentSubcategories[$oCurrentSubcategories->count()-1]->getIdCat();
    	}
    	// this is just for sample client - modify to your needs!
    	if ($aCfg['url_builder']['name'] == 'front_content') {
    	    $aParams = array('lang' => $iLang, 'idcat' => $oCategory->getIdCat());
    	} else {
        	$aParams = array('a' => $oCategory->getIdCat(), 
        					'idcat' => $oCategory->getIdCat(), // needed to build category path
        					'lang' => $iLang, // needed to build category path
        					'level' => 1); // needed to build category path
    	}
    	// fill template with values
    	$oTpl->set('d', 'name', $oCategory->getCategoryLanguage()->getName());
    	$oTpl->set('d', 'css_level', $iItemLevel);
    	$oTpl->set('d', 'css_first_item', ($aLevelInfo[$oCategory->getIdParent()]['first_child_item'] == $oCategory->getIdCat() ? '_first' : ''));
    	$oTpl->set('d', 'css_last_item', ($aLevelInfo[$oCategory->getIdParent()]['last_child_item'] == $oCategory->getIdCat() ? '_last' : ''));
    	$oTpl->set('d', 'css_active_item', ($bMarkActive === true ? '_active' : ''));
    	try {
    	   $oTpl->set('d', 'url', Contenido_Url::getInstance()->build($aParams));
    	} catch (InvalidArgumentException $e) {
    	    $oTpl->set('d', 'url', '#');
    	}
		if ($aLevelInfo[$oCategory->getIdParent()]['first_child_item'] == $oCategory->getIdCat())
			$oTpl->set('d', 'subcat_open', '<li class="gringobuba"><ul class="navmainSubCatLevel_' . $iItemLevel . '">');
		else
			$oTpl->set('d', 'subcat_open', '');
		if ($aLevelInfo[$oCategory->getIdParent()]['last_child_item'] == $oCategory->getIdCat())
			$oTpl->set('d', 'subcat_close', '</ul></li>');
		else
			$oTpl->set('d', 'subcat_close', '');
    	$oTpl->next();
    	// continue until max level depth
    	if ($aDepthInfo[1] > $aDepthInfo[0]) {
        	// check if current item has sub-items to be displayed
        	$bShowFollowUps = ($oCategory->getIdCat() == $iCurrentPageIdcat || $oFrontendNavigation->isInPathToRoot($oCategory->getIdCat(), $iCurrentPageIdcat))
        							? true : false;
        	if ($bShowFollowUps === true && $oCurrentSubcategories->count() > 0) {
        		$oSubCategories = $oCurrentSubcategories;
        		foreach ($oSubCategories as $oSubCategory) {
        			self::loopCats($oSubCategory, $oFrontendNavigation, $oTpl, $aCfg, $iLang, $aLevelInfo, $iCurrentPageIdcat, $aDepthInfo);
        		}
        	}
    	}
    }
}
?>



Hier der Code für das geänderte Modul-Template "navigation_standard.html":

Code: Alles auswählen


<ul>
    <!-- BEGIN:BLOCK -->
    {subcat_open}
    <li class="navmainStandardLevel_{css_level}{css_first_item}{css_last_item}{css_active_item}">
        <a href="{url}" title="{name}" class="navmainStandardLevel_{css_level}{css_first_item}{css_last_item}{css_active_item}">{name}</a>
    </li>
    {subcat_close}
    <!-- END:BLOCK -->
</ul>

GaMbIt_
Beiträge: 674
Registriert: Do 16. Mär 2006, 16:17
Kontaktdaten:

Re: Modul Navigation_Main

Beitrag von GaMbIt_ »

Öhhh,,,

Wieso wird da in den Utils gebastelt?
sowas sollte man doch im Modul machen ...

Dafür ist ja Contenido so modular aufgebaut.. und es gibt ne Menge Module die Dir für jede Ebene ne eigene UL schreiben...

Auf Anhieb fällt mir da die Navigation Universell ein... sehr feines Ding...
Aber dieses Modul stellt mit einer zusätzlichen Klasse eine Ausnahme dar...

Diese Klasse wird aber in "/mandant/incudes" abgelegt.. und erweitert damit den Funktionsumfang..

Den Contenido Core zu verändern bringt garnichts weil beim nächsten Update alles wieder beim Alten ist und man die Änderungen nochmal, möglicherweise an einer geänderten Klasse machen muss...
Nützliche Contenido Infos gibts hier: Contenido Wiki
Kozu
Beiträge: 42
Registriert: Mo 27. Aug 2007, 11:38
Kontaktdaten:

Re: Modul Navigation_Main

Beitrag von Kozu »

Tja, mmhh. Wie gesagt: Ich habe generell nicht so die Ahnung und meine Freund kann zwar PHP, ist aber kein Contenido-Experte. Wenn hier die Meinung vorherrscht, dass das geänderte Modul eher schadet als nützt, können die Admins den Threat ja löschen. Hab ich kein Problem mit.
GaMbIt_
Beiträge: 674
Registriert: Do 16. Mär 2006, 16:17
Kontaktdaten:

Re: Modul Navigation_Main

Beitrag von GaMbIt_ »

Du hast nicht das Modul geändert.. bzw. ändern lassen.. sondern eine Kernfunktionalität...
Nützliche Contenido Infos gibts hier: Contenido Wiki
Kozu
Beiträge: 42
Registriert: Mo 27. Aug 2007, 11:38
Kontaktdaten:

Re: Modul Navigation_Main

Beitrag von Kozu »

Tut mir leid :( . Wie gesagt: Ich will hier niemanden dazu verleiten, sein Contenido zu demolieren. @Admins: Im Zweifelsfall bitte Threat löschen. Danke.
GaMbIt_
Beiträge: 674
Registriert: Do 16. Mär 2006, 16:17
Kontaktdaten:

Re: Modul Navigation_Main

Beitrag von GaMbIt_ »

Naaaa... gelöscht werden muss das doch nicht...

Ich verstehs nur nicht ;)
Nützliche Contenido Infos gibts hier: Contenido Wiki
Gesperrt