Jak wywołać funkcję menu_rebuild w Drupal 7?

13

Chciałbym wywołać funkcję menu_rebuild () , ale nie jestem pewien, gdzie dokładnie wkleić fragment kodu.

Nie mogę znaleźć pliku update.php nigdzie w mojej lokalnej instancji.

Powodem, dla którego chciałbym to zrobić, jest usunięcie wszystkich węzłów, ale nadal pojawiają się one w strukturze menu.

użytkownik12804
źródło
chcesz odbudować menu Drupal po aktualizacji czy co?
Aboodred1
update.php będzie w folderze głównym drupal, /var/www/htdocs/drupala modyfikowanie go to zły pomysł. Czy możesz dodać więcej szczegółów, dlaczego chcesz zadzwonić do menu_rebuild?
GoodSp33d 28.01.2013
Aboodred1, tak, chciałbym odbudować menu drupal po usunięciu wszystkich węzłów. 2-Stroker, drupal.stackexchange.com/questions/58606/…
user12804 28.01.2013
@ user12804, Czy na pewno są to menu związane z węzłami? Jeśli tak, odpowiedziałem już na inne pytanie.
Sithu

Odpowiedzi:

5

Utwórz plik o następującej treści i po prostu upuść go w katalogu głównym Drupal. Powiedzmy Spójrzmy prawdzie menu-rebuild.php. Uruchom 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();
Sithu
źródło
Uruchomienie tego może być łatwiejsze przy użyciu Devel
mbomb007
15

Drupal 7

Jeśli używasz drush, możesz uruchomić:

drush eval 'menu_rebuild();'

Jeśli nie zadziała, zobacz: Jak wykonać przebudowę menu, gdy wystąpił błąd krytyczny PHP?

Drupal 6

drush php-eval 'drupal_rebuild_theme_registry()'

memcached

Jeśli używasz memcached, musisz go ponownie uruchomić.

W systemie Linux: /etc/init.d/memcached restart

W systemie OS X (jeśli używasz Homebrew): brew services restart memcached

kenorb
źródło
zagłosuj na właściwe polecenia drush, aby to zrobić z łatwością, ale zdecydowanie powinieneś dodać, że w niektórych przypadkach musisz opróżnić odpowiednie tabele bazy danych, jak wspomniano powyżej przez @Valk
nilsun,
11

Otwórz schemat bazy danych, a następnie usuń całą zawartość tabel menu_links i menu_router za pomocą następujących zapytań SQL:

DELETE FROM menu_links;
DELETE FROM menu_router;

Następnie uruchom http://example.com/update.php . Wywoła menu_rebuild (), które zapełni te tabele „świeżymi” danymi. Zadziałało to po tym, jak „Błąd krytyczny PHP: brak pamięci” zamienił niektóre moje menu w bałagan.

Pamiętaj jednak, że usunie wszystkie niestandardowe menu, które będziesz musiał ręcznie odbudować. Aby tego uniknąć, możesz trochę pograć z usunięciem niektórych wybranych rekordów z menu_router i menu_links, ale dla mnie to nie działało dobrze.

I nie zapomnij wykonać kopii zapasowej bazy danych i katalogu witryny przed usunięciem zawartości z tabel.

Valk
źródło
2
głosuj za potrzebnymi dodatkowymi informacjami, które czasami ZDECYDOWANIE musisz opróżnić odpowiednie tabele bazy danych przed menu_rebuild. Potwierdzają to tutaj wieloletnie doświadczenia ...
nilsun,
3

Kilka różnych sposobów:

  1. Zadzwoń menu_rebuild()z hook_update_N
  2. Edytuj i zapisz formularz ustawień menu od administratora Drupala.
  3. Z wiersza poleceń, z drush: drush cc menu
David Thomas
źródło
Dziękuję Ci. Czy mogę to zrobić również bez drake'a?
user12804
Tak, każda z powyższych 3 metod będzie działać sama.
David Thomas
Re: Edytuj i zapisz łącze menu od administratora Drupala. Nie działa, już kilka razy próbowałem ...
user12804 28.01.2013
Tak, ten był przeznaczony do strony ustawień menu. Możesz także zadzwonić, menu_cache_clear_all()aby odbudować pamięć podręczną menu
David Thomas
2

Przejście do admin/config/development/performancei kliknięcie przycisku „Wyczyść wszystkie pamięci podręczne” spowoduje przebudowanie menu, a także wyczyszczenie pamięci podręcznej szablonów, bloków, stron itp.

penten
źródło
Dzięki Penten, próbowałem tego kilka razy, ale bez powodzenia. Usunięte węzły nadal pojawiają się w strukturze menu Nawigacja :(
użytkownik12804
2

Alternatywnym sposobem jest ustawienie zmiennej:

variable_set('menu_rebuild_needed', TRUE);

Spowoduje to uruchomienie menu_rebuild();

Michał Przybylowicz
źródło
0

Aby naprawić menu administratora, użyj SQL i zauważ, że jak podano powyżej Valk, usunie wszystkie dostosowania z menu zarządzania administracyjnego. Po uruchomieniu wyczyść pamięć podręczną i menu zarządzania zostanie przywrócone do ustawień domyślnych.

Oto zapytanie SQL:

DELETE FROM menu_links WHERE menu_name='management' 
kenorb
źródło
odbudowanie menu staje się potrzebne, gdy coś jest naprawdę zepsute, a Drupal nie może tego naprawić w środku. Właśnie dlatego wolałbym zalecać metodę Valksa, ponieważ całkowity reset jest lepszą odpowiedzią na takie pytanie, jeśli nie podano więcej szczegółów. CO jest zepsute.
nilsun