DrupalBook.org.ua
Готовые решения для сайта на Drupal.Использование primary/secondary links для построения разделенного двухуровневого меню
Задача:
- Организовать двухуровневое меню.
- Вверху строка основных разделов (первого уровня), слева при выборе раздела появляется меню подразделов.
- Родительский пункт в меню основных разделов остается активным при навигации по подразделам.
Решение:
Нужно сделать одно меню, создавая структуру через выбор родительских пунктов (все пункты меню можно оставить неразвернутыми), а потом в настройках меню выбрать основным (primary) и дополнительным (secondary) одно и то же меню, а в page.tpl.php прописать расположение этих самых меню в виде 'links'.
Все это по шагам можно описать так:
- Перейти: Админка → Конструкция → Меню
- Создать меню (можно создать необходимые пункты прямо в primary links - меню уже создано по умолчанию). Чтобы сделать его многоуровневым, выбирайте у пунктов родителя. Не нужно создавать 2 отдельных меню.
- Зайти на вкладку Настройки - выбрать:
Меню, содержащее основные ссылки: ваше меню (Primary links)
Меню, содержащее дополнительные ссылки: ваше меню (Primary links) - Написать в нужном месте в page.tpl.php такой код:
Для primary_links
<?php if (isset($primary_links)) { ?><?php print theme('links', $primary_links) ?><?php } ?>
Для secondary_links:
<?php if (isset($secondary_links)) { ?><?php print theme('links', $secondary_links) ?><?php } ?>
получение разрешения на применение | кондитерские витрины
Но недостаток этого метода в том, что он применим только при двухуровневой иерархии, то есть существуют только разделы вверху и подразделы слева, а под-подразделов уже быть не может, так как их secondary menu не покажет.
Для того чтобы сделать родительскую ссылку с class="active", воспользуемся TemplatePHP сниппетом с этой страницы. Вставляем в template.php данный код (без закрывающего ?>).
<?php
function phptemplate_links($links, $attributes = array()) {
if (!count($links)) {
return '';
}
$level_tmp = explode('-', key($links));
$level = $level_tmp[0];
$output = "<ul class=\"links-$level ".$attributes['class']. "\">\n";
foreach ($links as $index => $link) {
$output .= '<li';
if (stristr($index, 'active')) {
$output .= ' class="active"';
}// frontpage AND current-link in menu is <front>
elseif((drupal_is_front_page()) && ($link['href']=='<front>')){
$link['attributes']['class'] = 'active';//add class active to <li
$output .= ' class="active"';//add class active to <a
}
$output .= ">". l($link['title'], $link['href'], $link['attributes'], $link['query'], $link['fragment']) ."</li>\n";
}
$output .= '</ul>';
return $output;
}
?>Использованные материалы:
http://www.drupal.ru/node/13380, http://www.drupal.ru/node/3335
- Страница для печати
- 189 reads
Creative Commons: Attribution-Share Alike 2.5
Данные материалы выложены под лицензией Creative Commons: Attribution-Share Alike 2.5. Это значит, что вы можете распространять, копировать и модифицировать эти произведения при условии упоминания авторства оригинала, и при условии, что они также будут распространяться на условиях этой лицензии (то есть, изменённую работу нельзя защитить копирайтом). Подробнее смотри: http://ru.wikipedia.org/wiki/Creative_Commons