Drupal: как перестроить навигацию по меню

В Drupal 7.0, когда я изменяю путь/меню маршрутизации с типом MENU_NORMAL_ITEM на тип MENU_CALLBACK, Drupal 7.0 не удаляет элемент из таблицы menu_links. Я не уверен, что это ошибка или нет, но я подал заявку в основной команде.

С учетом этого контекста, есть ли способ заставить Drupal выполнить перестройку всех своих навигационных меню? Ошибка, описанная выше, происходит даже тогда, когда я очищаю кэш Drupal после изменения элемента меню.

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

Это существует? Если вы собираетесь упомянуть drush или devel, вы удивительны, но конкретные инструкции по этим инструментам - это то, что мне нужно.

Ответ 1

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

Восстановление меню просто перестраивает элементы меню и ссылки меню, поскольку они автоматически генерируются на основе элементов меню маршрутизатора. Известны проблемы с этим, например, переименование ссылок меню (http://drupal.org/node/550254). Если ссылки меню были настроены или добавлены вручную (или Drupal считает, что они были изменены..), то они не будут затронуты.

Как уже упоминалось в другом вопросе, плотная связь между этими двумя системами, вероятно, будет изменена в D8, так что вам придется объявлять ссылки меню отдельно от элементов меню маршрутизатора.

Ответ 2

Вот еще один вариант, когда вы не можете получить доступ к сайту или установить Devel или Drush. Создайте файл, такой как rebuild.php, и поместите его в свой корень Drupal (хотя это не имеет значения, поскольку chdir переключится на указанный корень Drupal). Затем, после посещения этого script, он должен перестроить меню, и тогда все должно быть хорошо на сайте.

<?php
  // Bootstrap
  // Change chdir to the full path of your Drupal root
  chdir('/home/myusername/public_html/');
  define('DRUPAL_ROOT', getcwd());
  require_once './includes/bootstrap.inc';
  drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

  // Rebuild
  menu_rebuild();
?>

Ответ 3

variable_set('menu_rebuild_needed', TRUE);

Ответ 4

Посещение страницы списка модулей обычно перестраивает меню.

Вы также можете попробовать установить Dev modules Включить блок dev, и у вас есть ссылка для меню перестройки.

Ответ 5

Я столкнулся с той же проблемой. Я переключился с MENU_NORMAL_ITEM на MENU_CALLBACK и не смог избавиться от пунктов меню в навигационном блоке. Я попробовал пару решений выше, не добившись успеха. То, что работало на меня, заключалось в комментировании моих пунктов меню в hook_menu, очистке кеша, повторном включении их и очистке кеша еще раз.

Это то, что я вернулся в Hook_menu, чтобы очистить все пункты меню:

return array();//$элементов;

Ответ 6

Если у вас установлен модуль Devel, вы можете перейти на страницу настройки меню (/admin/build/menu), а затем выбрать меню Devel.

Внутри этой страницы появятся опции Перестроить меню.

Ответ 7

Есть много способов сделать это, но лучший способ сделать это - использовать модуль devel. После того, как вы включите модуль, перейдите к блокам и включите блок devel на боковой панели ur. Затем обратитесь к красному ящику на изображении

http://cyrve.com/screenshots/devel_theme_snap-20080113-205127.jpg

У него есть возможность очистить кеш меню. Местоположение блока будет зависеть от места размещения блока.

Ответ 8

В D7 страница конфигурации меню переместилась в admin/structure/menu/.

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