Вы здесь

Пункт меню не являющийся ссылкой — 1

Версия системы: 
Друпал 7
Друпал 6
Друпал 5
Оглавление документа

Меню Друпала позволяет определять любое количество пунктов, каждый из которых является ссылкой. Но иногда нужно сделать дерево пунктов, первый из которых ссылкой бы не являлся. Это нам поможет сделать приведенный ниже код.

Для начала определим волшебное значение <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>, не будет ссылкой. Отметьте, что на этот пункт не получиться нажать мышкой, поэтому для него надо отметить поле «Развернуть», чтобы его подменю было доступно.

Дополнительные модули

  • DHTML Menu — перемещение по меню без перезагрузки страниц
  • Menu Firstchild — пункт меню не являющийся ссылкой
  • Menu item container — контейнер для пунктов меню
  • Special menu items module — добавление разделителей в списки пунктов меню

Комментарии

Изображение пользователя Анонимно

В 6 не работает.

Изображение пользователя Анонимно
Изображение пользователя Алексей

Нашёл модуль Menu Firstchild
http://drupal.org/project/menu_firstchild

Практически безбажное решение для 6-ки.

Изображение пользователя Psyh

Вот то что нашел на друпалорге:

Добавляем в 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']);
  }
}
?>

Изображение пользователя Анонимно

если делать без ссылки то модулем вроде суперфиша или найс меню невозможно будет вывести всплывающие подпункты