Як мені викликати функцію menu_rebuild в Drupal 7?


13

Я хотів би зателефонувати на функцію menu_rebuild () , але я не впевнений, куди саме вставити фрагмент коду.

Я не можу знайти файл update.php ніде в моєму локальному екземплярі.

Причиною цього я хотів би спробувати це те, що я видалив усі вузли, але вони все ще з’являються під структурою меню.


Ви хочете відновити меню Drupal після оновлення чи що?
Aboodred1

update.php буде в кореневій папці drupal, тобто /var/www/htdocs/drupalзмінити його - погана ідея. Не могли б ви додати більше деталей щодо того, чому ви хочете викликати menu_rebuild?
GoodSp33d

Aboodred1, так, я хотів би відновити друпальське меню після видалення всіх вузлів. 2-Stroker, drupal.stackexchange.com/questions/58606/…
користувач12804

@ user12804, Ви впевнені, що вони пов'язані з вузлами? Якщо так, я вже відповів на інше запитання.
Сіту

Відповіді:


5

Створіть файл із наступним вмістом та просто занесіть у кореневий каталог Drupal. Скажімо menu-rebuild.php. Запустіть його http://example.com/menu-rebuild.php

<?php
error_reporting(E_ALL);
define('DRUPAL_ROOT', getcwd());
require_once './includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

menu_rebuild();

Це може бути простіше запустити це за допомогою Devel
mbomb007

15

Drupal 7

Якщо ви використовуєте барабан, ви можете запустити:

drush eval 'menu_rebuild();'

Якщо не виходить, дивіться: Як зробити перебудову меню, коли виникає фатальна помилка PHP?

Друпал 6

drush php-eval 'drupal_rebuild_theme_registry()'

запам’ятовується

Якщо ви використовуєте запам’ятоване, вам потрібно перезапустити його.

У Linux: /etc/init.d/memcached restart

В OS X (якщо використовується Homebrew): brew services restart memcached


проголосуйте за правильні команди "drush", щоб зробити це легко, але вам обов'язково слід додати, що в деяких випадках вам потрібно спорожнити відповідні таблиці баз даних раніше, як це згадувало @Valk вище
nilsun

11

Відкрийте схему бази даних, а потім видаліть увесь вміст таблиць_посилання та таблиць_контролера меню за допомогою таких запитів SQL:

DELETE FROM menu_links;
DELETE FROM menu_router;

Потім запустіть http://example.com/update.php . Він викличе menu_rebuild (), який заповнить ці таблиці "свіжими" даними. Це спрацювало для мене після того, як "PHP Fatal Error: Out memory" перетворило деякі мої меню на безлад.

Але майте на увазі, що це знищить усі ваші користувацькі меню, які вам доведеться переробляти вручну. Щоб уникнути цього, ви можете трохи пограти зі видаленням деяких вибраних записів із меню_рутер та меню_посилання, але для мене це не спрацювало добре.

І не забудьте створити резервну копію вашої бази даних та каталогу сайтів перед видаленням вмісту з таблиць.


2
проголосуйте за необхідну додаткову інформацію, що іноді вам ВІДКЛЮЧЕНО потрібно спорожнити таблицю бази даних, що коректується, перед тим, як меню_ремонтувати. Це підтверджено тут із багаторічного досвіду ...
nilsun

3

Кілька різних способів:

  1. Зателефонуйте menu_rebuild()з гачка_піддачі_N
  2. Відредагуйте та збережіть форму налаштувань меню від адміністратора Drupal.
  3. З командного рядка за допомогою друку: drush cc menu

Дякую. Чи можу я це зробити і без дрилі?
користувач12804

Так, будь-який з перерахованих вище 3 методів спрацює сам по собі.
Девід Томас

Re: Відредагуйте та збережіть посилання на меню від адміністратора Drupal. Не працює, я вже кілька разів це намагався ...
user12804

Так, це було призначено для сторінки налаштувань меню. Ви також можете зателефонувати, menu_cache_clear_all()щоб відновити кеш-меню меню
Девід Томас

2

Перехід admin/config/development/performanceі натиснення кнопки «Очистити всі кеші» призведе до перебудови меню, а також очищення кеша шаблону, блоку, сторінки тощо.


Дякую Пентен, я це кілька разів намагався, але не пощастило. Видалені вузли все ще з’являються у структурі меню навігації :(
user12804


0

Щоб виправити меню адміністратора, використовуйте в SQL і зауважте, що як зазначено вище Valk, воно видалить усі налаштування з меню управління адміністрацією. Після запуску очистіть кеш-пам'ять і меню управління буде відновлено до своїх стандартних налаштувань.

Ось запит SQL:

DELETE FROM menu_links WHERE menu_name='management' 

для відновлення меню в основному стає необхідним, коли щось дійсно порушено і Drupal не може виправити це посередині. Ось чому я б скоріше рекомендував метод Valks, оскільки повне скидання є кращою відповіддю на таке питання, якщо більше деталей не надано, ЩО не порушено.
nilsun
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.