Drupal: как перестроить навигацию по меню - PullRequest
10 голосов
/ 03 марта 2011

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

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

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

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

Ответы [ 8 ]

10 голосов
/ 03 марта 2011

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

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

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

7 голосов
/ 02 августа 2011

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

<?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();
?>
4 голосов
/ 02 мая 2013
variable_set('menu_rebuild_needed', TRUE);
3 голосов
/ 12 июля 2013

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

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

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

2 голосов
/ 03 марта 2011

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

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

1 голос
/ 03 марта 2011

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

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

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

0 голосов
/ 08 июня 2012

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

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

0 голосов
/ 03 марта 2011

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

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

...