Изменение подменю Joomla Main Menu с помощью переопределения шаблона - PullRequest
0 голосов
/ 12 августа 2010

Я хотел бы добиться следующего в главном меню моего шаблона 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". Что я не получаю, так это то, как я могу различить элементы верхнего уровня ul, li и a и элементы в subnav. Например, чтобыдобавив класс "last" к последнему элементу списка в subnav, я пробовал следующее:

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. * верхнего уровня.

Есть ли способ достичь желаемого эффекта с помощью метода переопределения шаблонов?

Ответы [ 2 ]

0 голосов
/ 17 апреля 2012

Для назначения классов last и first на последний и первый элементы ветвей иерархического меню в текущей версии Joomla 2.5.4 я добавляю к 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';
}
0 голосов
/ 13 августа 2010

Не уверен насчет переопределения шаблонов меню.Вы можете взглянуть на http://extensions.joomla.org/extensions/structure-a-navigation/menu-systems/tree-menus/163, который является отличным модулем для настройки меню.

В качестве альтернативы, если вы хотите просто стилизовать пункты меню, которые вы могли бы изучить, используя ul li: last-child в своем CSS,Обратите внимание, что это поддерживается не во всех браузерах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...