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