2010-08-12 9 views
0

Je voudrais obtenir les résultats suivants dans le menu principal de mon modèle Joomla:Modifier Joomla sous-menu du menu principal à l'aide override modèle

<ul class="topmenu"> 
     <li><a class="nav_link" id="active" href="#">Home</a></li><span class="separator"></span> 
     <li><a class="nav_link" href="#">About Us</a></li><span class="separator"></span> 
     <li><a class="nav_link" href="#">Services</a> 
<div class="subnav_wrapper"> 
     <ul class="subnav"> 
     <li><a class="sub_nav_link" href="#">Custom Software</a></li> 
     <li><a class="sub_nav_link" href="#">Software Solutions</a></li> 
     <li><a class="sub_nav_link" href="#">Mobile SMS</a></li> 
     <li><a class="sub_nav_link" href="#">Web Solutions</a></li> 
     <li class="last"><a class="sub_nav_link" href="#">ICT Consultancy</a></li> 
     </ul> 
     </div> 
    </li><span class="separator"></span> 
</ul> 

Je l'ai déjà outrepassée le fichier default.php pour le module (je l'ai recopié « default.php » de « modules \ mod_mainmenu \ tmpl » dans « templates \ mytemplate \ html \ mod_mainmenu ». Ce que je n'est que je ne peux pas faire la différence entre le haut niveau ul, li et un des éléments et ceux de la Par exemple, pour ajouter la classe "last" au dernier élément de liste dans le sous-abaque, j'ai essayé ce qui suit:

if ($node->name() == 'ul') { 
    foreach ($node->children() as $child) 
    { 
    if ($child->attributes('access') > $user->get('aid', 0)) { 
    $node->removeChild($child); 
    } 
    } 
    $children_count = count($node->children()); 
    $children_index = 0; 
    foreach ($node->children() as $child) { 
    if ($children_index == $children_count - 1) { 
    $child->addAttribute('class', 'last'); 
    } 
    $children_index++; 
    } 

} 

Mais ce qui précède ajoute la classe aussi dans le dernier élément de l'UL de haut niveau.

est une manière d'obtenir l'effet désiré en utilisant la méthode de remplacement du modèle?

Répondre

0

Pour un rendez-vous last et first cours aux derniers et premiers éléments de branches du menu hiérarchique dans la version actuelle 2.5.4 de Joomla, j'ajouter à default.php (il est copié modules\mod_mainmenu\tmpl\-templates\mytemplate\html\mod_mainmenu\) ce code:

après:

defined('_JEXEC') or die; 

insert:

$last_items = array(); 
foreach(array_reverse($list, true) as $v) { 
    if(! isset($last_items[$v->parent_id])) 
     $last_items[$v->parent_id] = $v->id; 
} 
$first_start = true; 

un d Raccrochez:

if ($item->deeper) { 
    $class .= ' deeper'; 
} 

avec:

if($first_start) { 
    $class .= ' first'; 
    $first_start = false; 
} 
else if(in_array($item->id, $last_items)) { 
    $class .= ' last'; 
} 

if ($item->deeper) { 
    $class .= ' deeper'; 
    $first_start = true; 
} 

Il y a la possibilité de se débarrasser de tels que l'ajout d'une classelastdans le dernier élément du haut niveauul - peut être remplacé:

else if(in_array($item->id, $last_items)) { 
    $class .= ' last'; 
} 

avec:

else if(in_array($item->id, $last_items) && $item->level_diff > 0) { 
    $class .= ' last'; 
} 
Questions connexes