web-dev-qa-db-fra.com

Comment appeler la fonction menu_rebuild dans Drupal 7?

Je voudrais appeler la fonction menu_rebuild () , mais je ne sais pas où coller exactement l'extrait de code.

Je ne trouve le fichier pdate.php nulle part dans mon instance locale.

La raison pour laquelle je voudrais tenter cela est que j'ai supprimé tous les nœuds, mais ils apparaissent toujours sous la structure du menu.

13
user12804

Créez un fichier avec le contenu suivant et déposez simplement dans le répertoire racine Drupal. Disons menu-rebuild.php. Exécutez-le 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();
5
Sithu

Drupal 7

Si vous utilisez drush, vous pouvez exécuter:

drush eval 'menu_rebuild();'

Si cela ne fonctionne pas, voir: Comment faire la reconstruction du menu en ayant PHP Erreur fatale?

Drupal 6

drush php-eval 'drupal_rebuild_theme_registry()'

memcached

Si vous utilisez memcached, vous devez le redémarrer.

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

Sous OS X (si vous utilisez Homebrew): brew services restart memcached

15
kenorb

Ouvrez le schéma de base de données, puis supprimez tout le contenu des tables menu_links et menu_router avec les requêtes SQL suivantes:

DELETE FROM menu_links;
DELETE FROM menu_router;

Exécutez ensuite http://example.com/update.php . Il appellera menu_rebuild (), qui remplira ces tables de données "fraîches". Cela a fonctionné pour moi après qu'une "erreur fatale PHP: mémoire insuffisante" ait transformé certains de mes menus en désordre.

Mais sachez qu'il effacera tous vos menus personnalisés que vous devrez reconstruire manuellement. Pour l'éviter, vous pouvez jouer un peu en supprimant certains enregistrements sélectionnés de menu_router et menu_links, mais pour moi, cela n'a pas bien fonctionné.

Et n'oubliez pas de sauvegarder votre base de données et votre répertoire de site avant de supprimer le contenu des tables.

11
Valk

Deux façons différentes:

  1. Appelez menu_rebuild() depuis hook_update_N
  2. Modifiez et enregistrez un formulaire de paramètres de menu à partir de Drupal admin.
  3. Depuis la ligne de commande, avec drush: drush cc menu
3
David Thomas

Une autre méthode consiste à définir une variable:

variable_set('menu_rebuild_needed', TRUE);

Cela déclenchera la menu_rebuild();

2

Aller à admin/config/development/performance et en cliquant sur le bouton "Effacer tous les caches", le menu sera reconstruit, ainsi que le cache du modèle, du bloc, de la page, etc.

2
penten

Pour corriger l'utilisation du menu d'administration dans SQL et notez que, comme Valk l'a indiqué ci-dessus, il supprimera toute personnalisation de votre menu de gestion d'administration. Une fois que vous l'avez exécuté, effacez votre cache et le menu de gestion sera reconstruit à ses paramètres par défaut.

Voici la requête SQL:

DELETE FROM menu_links WHERE menu_name='management' 
0
user28323