Drupal 7: Как создать элемент меню / маршрута, который не отображается в навигации по сайту

Как я могу создать новый маршрут / меню в Drupal, которое не отображает автоматически навигационную ссылку?

Я пытаюсь создать простой обратный вызов страницы в Drupal, который не отображается в меню навигации.

У меня есть модуль с именем helloworld.

Файл .module содержит следующие

function _helloword_page_callback()
{
    return array('#markup'=>'The quick brown fox says hello, and the lazy dogs thanks you
    for following conventions.');
}

function helloworld_menu()
{
    $items['helloworld'] = array(
      'title'               => 'Hello World',
      'page callback'       => '_helloword_page_callback',
      'access arguments'    => array('content'),
      'type'                => MENU_CALLBACK
    );
    return $items;
}

Это успешно предоставляет URL-адрес на сайте

http://example.drupal.com/helloworld

Однако я все еще получаю ссылку в меню навигации слева (Bartik), несмотря на использование

'type'              => MENU_CALLBACK

Итак, почему это не работает? Правильно ли я настраиваю пункт меню? Более вероятный вопрос: как я неправильно интерпретирую использование констант / системы типа меню? Есть ли дополнительные кеши для очистки этого

drush cc all

не позаботится? Какие еще шаги я могу предпринять для отладки этого?


person Alan Storm    schedule 02.03.2011    source источник


Ответы (2)


Должно быть что-то еще не так (возможно, вы забыли очистить кеши?), Потому что даже с Bartik он работает должным образом. В этом примере в навигации отображается только «Hello 2»:

function helloworld_menu(){
    return array(
        'hello1' => array(
            'title'               => 'Hello 1',
            'page callback'       => 'helloworld_page_callback',
            'access arguments'    => array('content'),
            'type'                => MENU_CALLBACK
        ),
        'hello2' => array(
            'title'               => 'Hello 2',
            'page callback'       => 'helloworld_page_callback',
            'access arguments'    => array('content')
        )
    );
}

function helloworld_page_callback(){
    return array('#markup'=>'The quick brown fox says hello, and the lazy dogs thanks you for following conventions.');
}

Кстати, в вашем фрагменте есть опечатка (helloroute_menu следует называть helloworld_menu), но я предполагаю, что это связано с упрощением кода перед публикацией в StackOverflow.

person wildpeaks    schedule 02.03.2011
comment
И спасибо за информацию. Это определенно где-то тайник. Если изменить мой маршрут на другое имя (helloworld на helloworld2), с другим именем у нового маршрута не будет меню. Только когда у меня есть пункт меню с навигационной ссылкой по умолчанию и я пытаюсь изменить его, он не работает. (даже с вызовом drush's cc all, это другой вопрос в другой раз). Спасибо за проверку работоспособности! - person Alan Storm; 02.03.2011
comment
Пожалуйста :) И, кстати, забавный быстрый текст-наполнитель с коричневой лисой, я сначала не заметил, что это не обычная цитата: D - person wildpeaks; 03.03.2011

Проверьте эту ссылку меню в администрировании меню. Если вы настроили его там (например, изменение веса), возможно, он останется, даже если вы настроили тип на обратный вызов.

Если это так, вы можете просто удалить там.

person Berdir    schedule 02.03.2011
comment
+1 за (как всегда) хорошую информацию. Хотя это похоже на кеширование. - person Alan Storm; 02.03.2011