Wie rufe ich die menu_rebuild-Funktion in Drupal 7 auf?

13

Ich möchte die menu_rebuild () - Funktion aufrufen , bin mir aber nicht sicher, wo genau das Code-Snippet eingefügt wird .

Ich kann die Datei update.php nirgendwo in meiner lokalen Instanz finden.

Der Grund, warum ich dies versuchen möchte, ist, dass ich alle Knoten gelöscht habe, sie jedoch immer noch in der Menüstruktur angezeigt werden.

user12804
quelle
Möchten Sie das Drupal-Menü nach dem Update neu erstellen oder was?
Aboodred1
update.php wird im Drupal-Root-Ordner sein, dh /var/www/htdocs/drupalund es ist eine schlechte Idee, es zu modifizieren. Könnten Sie bitte weitere Details hinzufügen, warum Sie menu_rebuild aufrufen möchten?
GoodSp33d
Aboodred1, ja, ich möchte das Drupal-Menü nach dem Löschen aller Knoten neu erstellen. 2-Stroker, drupal.stackexchange.com/questions/58606/…
user12804
@ user12804, Sind Sie sicher, dass es sich um knotenbezogene Menüs handelt? Wenn ja, habe ich bereits in der anderen Frage beantwortet.
Sithu

Antworten:

5

Erstellen Sie eine Datei mit folgendem Inhalt und legen Sie sie einfach im Drupal-Stammverzeichnis ab. Sagen wir mal menu-rebuild.php. Führen Sie es aus 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
quelle
Es ist möglicherweise einfacher, dies mit Devel
mbomb007
15

Drupal 7

Wenn Sie Drush verwenden, können Sie Folgendes ausführen:

drush eval 'menu_rebuild();'

Wenn dies nicht funktioniert, lesen Sie: Wie erstelle ich ein Menü neu, wenn ein schwerwiegender PHP-Fehler auftritt?

Drupal 6

drush php-eval 'drupal_rebuild_theme_registry()'

zwischengespeichert

Wenn Sie memcached verwenden, müssen Sie es neu starten.

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

Unter OS X (wenn Homebrew verwendet wird): brew services restart memcached

Kenorb
quelle
stimme für die korrekten drush-befehle ab, um das einfach zu machen, aber du solltest definitiv hinzufügen, dass du in einigen fällen die entsprechenden datenbanktabellen leeren musst, bevor das von @Valk oben erwähnt wird
nilsun
11

Öffnen Sie das Datenbankschema und löschen Sie dann den gesamten Inhalt der Tabellen menu_links und menu_router mit den folgenden SQL-Abfragen:

DELETE FROM menu_links;
DELETE FROM menu_router;

Führen Sie dann http://example.com/update.php aus . Es wird menu_rebuild () aufgerufen, das diese Tabellen mit "frischen" Daten auffüllt. Es hat bei mir funktioniert, nachdem ein "PHP Fatal Error: Out of Memory" einige meiner Menüs in ein Chaos verwandelt hat.

Beachten Sie jedoch, dass alle benutzerdefinierten Menüs gelöscht werden, die manuell neu erstellt werden müssen. Um dies zu vermeiden, können Sie ein bisschen mit dem Löschen einiger ausgewählter Datensätze aus menu_router und menu_links spielen, aber für mich hat es nicht gut funktioniert.

Vergessen Sie nicht, Ihre Datenbank und Ihr Site-Verzeichnis zu sichern, bevor Sie Inhalte aus den Tabellen löschen.

Valk
quelle
2
Stimmen Sie für die benötigten zusätzlichen Informationen ab, die manchmal DEFINITIV geleert werden müssen, bevor menu_rebuild ausgeführt werden kann. Dies wird hier aus langjährigen Erfahrungen bestätigt ...
Nilsun
3

Ein paar verschiedene Möglichkeiten:

  1. Aufruf menu_rebuild()von hook_update_N
  2. Bearbeiten und speichern Sie ein Menüeinstellungsformular über den Drupal-Administrator.
  3. Von der Kommandozeile mit drush: drush cc menu
David Thomas
quelle
Vielen Dank. Kann ich das auch ohne Schnupfen machen?
user12804
Ja, jede der oben genannten 3 Methoden funktioniert von alleine.
David Thomas
Betreff: Bearbeiten und speichern Sie einen Menü-Link von Drupal-Administrator. Funktioniert nicht, schon ein paar Mal
ausprobiert
Ja, das war für die Menüeinstellungsseite gedacht. Sie können auch anrufen menu_cache_clear_all(), um den Menü-Cache wiederherzustellen
David Thomas
2

Wenn admin/config/development/performanceSie auf die Schaltfläche "Alle Caches löschen" klicken, wird das Menü neu erstellt und der Cache für Vorlagen, Blöcke, Seiten usw. gelöscht.

penten
quelle
Danke Penten, ich habe das ein paarmal versucht, aber kein Glück. Die gelöschten Knoten erscheinen immer noch in der Navigationsmenüstruktur :(
user12804
2

Alternativ können Sie die Variable setzen:

variable_set('menu_rebuild_needed', TRUE);

Dies löst die aus menu_rebuild();

Michal Przybylowicz
quelle
0

Um das Admin-Menü zu korrigieren, verwenden Sie SQL und beachten Sie, dass Valk, wie oben angegeben, alle Anpassungen aus Ihrem Administrationsverwaltungsmenü entfernt. Nachdem Sie den Cache geleert haben, wird das Verwaltungsmenü auf die Standardeinstellungen zurückgesetzt.

Hier ist die SQL-Abfrage:

DELETE FROM menu_links WHERE menu_name='management' 
Kenorb
quelle
Das Menü neu zu erstellen wird meistens benötigt, wenn etwas wirklich kaputt ist und Drupal es nicht in der Mitte reparieren kann. Aus diesem Grund würde ich die Valks-Methode eher empfehlen, da ein vollständiges Zurücksetzen eine bessere Antwort auf diese Frage ist, wenn keine weiteren Details angegeben werden. WAS ist defekt?
Nilsun