Come posso chiamare la funzione menu_rebuild in Drupal 7?


13

Vorrei chiamare la funzione menu_rebuild () , ma non sono sicuro di dove incollare esattamente lo snippet di codice.

Non riesco a trovare il file update.php da nessuna parte nella mia istanza locale.

Il motivo per cui vorrei provare questo è che ho eliminato tutti i nodi, ma continuano ad apparire sotto la struttura del menu.


vuoi ricostruire il menu Drupal dopo l'aggiornamento o cosa?
Aboodred1

update.php sarà nella cartella principale di drupal, vale a dire /var/www/htdocs/drupalE modificarlo è una cattiva idea. Potresti aggiungere maggiori dettagli sul motivo per cui vuoi chiamare menu_rebuild?
GoodSp33d

Aboodred1, sì, vorrei ricostruire il menu Drupal dopo aver eliminato tutti i nodi. 2-Stroker, drupal.stackexchange.com/questions/58606/…
user12804

@ user12804, Sei sicuro che siano menu relativi al nodo? In tal caso, ho già risposto nell'altra domanda.
Sithu,

Risposte:


5

Crea un file con il seguente contenuto e rilascialo semplicemente nella directory principale di Drupal. Diciamo di Let menu-rebuild.php. Eseguilo 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();

Potrebbe essere più semplice eseguirlo usando
Develop

15

Drupal 7

Se stai usando drush, puoi eseguire:

drush eval 'menu_rebuild();'

Se non funziona, vedi: Come fare la ricostruzione del menu in caso di errore irreversibile PHP?

Drupal 6

drush php-eval 'drupal_rebuild_theme_registry()'

memcached

Se stai usando memcached, devi riavviarlo.

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

Su OS X (se si utilizza Homebrew): brew services restart memcached


vota per i comandi drush corretti per farlo facilmente, ma sicuramente dovresti aggiungere che in alcuni casi devi svuotare le tabelle del database corrispondenti prima come menzionato da @Valk sopra
nilsun

11

Aprire lo schema del database, quindi eliminare tutto il contenuto delle tabelle menu_link e menu_router con le seguenti query SQL:

DELETE FROM menu_links;
DELETE FROM menu_router;

Quindi eseguire http://example.com/update.php . Chiamerà menu_rebuild (), che popolerà queste tabelle con dati "freschi". Ha funzionato per me dopo che un "Errore irreversibile PHP: memoria insufficiente" ha trasformato alcuni dei miei menu in un casino.

Tuttavia, tieni presente che eliminerà tutti i menu personalizzati che dovrai ricostruire manualmente. Per evitarlo potresti giocare un po 'con l'eliminazione di alcuni record selezionati da menu_router e menu_links, ma per me non ha funzionato bene.

E non dimenticare di eseguire il backup del database e della directory del sito prima di eliminare i contenuti dalle tabelle.


2
vota per le informazioni aggiuntive necessarie, che a volte DEFINITAMENTE devi svuotare le tabelle di database corrispondenti prima di menu_rebuild. Questo è confermato qui da esperienze a lungo termine ...
nilsun,

3

Un paio di modi diversi:

  1. Chiama menu_rebuild()da hook_update_N
  2. Modifica e salva un modulo per le impostazioni dei menu dall'amministratore di Drupal.
  3. Dalla riga di comando, con drush: drush cc menu

Grazie. Posso farlo anche senza drush?
user12804,

Sì, uno dei 3 metodi sopra funzionerà da solo.
David Thomas,

Ri: Modifica e salva un collegamento di menu dall'amministratore di Drupal. Non funziona, l'ho già provato alcune volte ...
user12804,

Sì, quello era destinato alla pagina delle impostazioni del menu. Puoi anche chiamare menu_cache_clear_all()per ricostruire la cache dei menu
David Thomas,

2

Accedere admin/config/development/performancee fare clic sul pulsante "Cancella tutte le cache" provocherà la ricostruzione del menu, nonché la cancellazione di cache di modello, blocco, pagina, ecc.


Grazie Penten, l'ho provato diverse volte, ma senza fortuna. I nodi eliminati appaiono ancora nella struttura del menu di Navigazione :(
user12804

2

Il modo alternativo è di impostare la variabile:

variable_set('menu_rebuild_needed', TRUE);

Questo attiverà il menu_rebuild();


0

Per correggere il menu di amministrazione, utilizzare in SQL e notare che, come indicato in precedenza da Valk, verranno rimosse tutte le personalizzazioni dal menu di gestione dell'amministrazione. Dopo averlo eseguito, svuota la cache e il menu di gestione verrà ripristinato alle impostazioni predefinite.

Ecco la query SQL:

DELETE FROM menu_links WHERE menu_name='management' 

per ricostruire il menu diventa per lo più necessario quando qualcosa è veramente rotto e Drupal non può ripararlo nel mezzo. Ecco perché preferirei raccomandare il metodo Valks perché un ripristino completo è una risposta migliore a tale domanda se non vengono forniti ulteriori dettagli COSA è rotto.
nilsun,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.