Меню Друпала позволяет определять любое количество пунктов, каждый из которых является ссылкой. Но иногда нужно сделать дерево пунктов, первый из которых ссылкой бы не являлся. Это нам поможет сделать приведенный ниже код.
Для начала определим волшебное значение <notlink>
, которое будет определять «путь в никуда», также как <front>
определяет первую страницу. Решающее значение здесь имеет функция theme_menu_item_link(). Поместите следующий код в файл template.tpl.php:
function НАЗВАНИЕ-ТЕМЫ_menu_item_link($item, $link_item) {
if ($item['path'] == '<notlink>') {
$attributes['title'] = $link['description'];
return '<span'. drupal_attributes($attributes) .'>'. $item['title'] .'</span>';
}
else {
return l($item['title'], $link_item['path'], !empty($item['description']) ? array('title' => $item['description']) : array(), isset($item['query']) ? $item['query'] : NULL);
}
}
Теперь любой пункт меню для которого мы укажем путь <notlink>
, не будет ссылкой. Отметьте, что на этот пункт не получиться нажать мышкой, поэтому для него надо отметить поле «Развернуть», чтобы его подменю было доступно.
Комментарии
В 6 не работает.
http://drupal.org/node/143322
Нашёл модуль Menu Firstchild
http://drupal.org/project/menu_firstchild
Практически безбажное решение для 6-ки.
Вот то что нашел на друпалорге:
Добавляем в template.php
<?php
function yourthemename_menu_item_link($link) {
if (empty($link['localized_options'])) {
$link['localized_options'] = array();
}
if ($link['type'] && $link['href'] == 'node/120') {
return '<a href="javascript:void(0)" class="nolink">'. $link['title'] .'</a>';
}
else {
return l($link['title'], $link['href'], $link['localized_options']);
}
}
?>
Добавляем в style.css:
<?php
.nolink:hover {
cursor: default;
}
?>
Но мне не очень ясно зачем было оставлять уже "не ссылку" в тегах
<a>
, портя карму сайта с точки зрения поисковиков. Поэтому убираем эти теги и получаем такой код:<?php
function yourthemename_menu_item_link($link) {
if (empty($link['localized_options'])) {
$link['localized_options'] = array();
}
if ($link['type'] && $link['href'] == 'node/23') {
return $link['title'];
}
else {
return l($link['title'], $link['href'], $link['localized_options']);
}
}
?>
если делать без ссылки то модулем вроде суперфиша или найс меню невозможно будет вывести всплывающие подпункты