我想在Joomla模板的主菜单中实现以下功能:
<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>
我已经覆盖了模块的default.php文件(我已将“default.php”从“modules \ mod_mainmenu \ tmpl”复制到“templates \ mytemplate \ html \ mod_mainmenu”。我不知道get是我如何区分顶级ul,li和元素以及subnav中的元素。例如,要将类“last”添加到subnav中的最后一个列表项,我尝试了以下内容: / p>
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++;
}
}
但是上面的类也在顶级ul的最后一项中添加了。
是否可以使用模板覆盖方法实现所需效果?
答案 0 :(得分:0)
不确定菜单的模板覆盖。您可以查看http://extensions.joomla.org/extensions/structure-a-navigation/menu-systems/tree-menus/163这是一个用于自定义菜单的好模块。
或者,如果您只想设置菜单项的样式,您可以在CSS中使用ul li:last-child来查看。请注意,并非所有浏览器都支持此功能。
答案 1 :(得分:0)
为了在当前2.5.4版本的Joomla中,对于分层菜单的最后和第一个分支项目预约last
和first
个类,我添加到default.php
(它已从modules\mod_mainmenu\tmpl\
复制到templates\mytemplate\html\mod_mainmenu\
)此代码:
后:
defined('_JEXEC') or die;
插入:
$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;
并替换:
if ($item->deeper) {
$class .= ' deeper';
}
使用:
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;
}
有可能摆脱在顶级 last
的最后一项中添加 ul
类 - 可以替换:
else if( in_array( $item->id, $last_items ) ) {
$class .= ' last';
}
使用:
else if( in_array($item->id, $last_items) && $item->level_diff > 0 ) {
$class .= ' last';
}