Drupal 7'de menu_rebuild işlevini nasıl çağırırım?


13

Menu_rebuild () işlevini çağırmak istiyorum , ancak tam olarak kod snippet'ini yapıştırdığından emin değilim.

Update.php dosyasını yerel örneğimde hiçbir yerde bulamıyorum .

Bunu denememizin nedeni, tüm düğümleri silmiş olmamdır, ancak yine de menü yapısı altında görünmektedirler.


Güncellemeden sonra Drupal menüsünü yeniden oluşturmak ister misiniz?
Aboodred1

update.php, drupal kök klasöründe olacaktır. /var/www/htdocs/drupalVe bunu değiştirmek kötü bir fikirdir. Menu_rebuild'ı neden aramak istediğinize ilişkin daha fazla ayrıntı ekleyebilir misiniz?
GoodSp33d

Aboodred1, evet, tüm düğümleri sildikten sonra drupal menüsünü yeniden oluşturmak istiyorum. 2-Stroker, drupal.stackexchange.com/questions/58606/…
user12804

@ user12804, Düğümle ilgili menüler olduğundan emin misiniz? Eğer öyleyse, diğer soruya zaten cevap verdim.
Ocak'ta Sithu

Yanıtlar:


5

Aşağıdaki içeriğe sahip bir dosya oluşturun ve Drupal kök dizinine bırakın. Diyelim menu-rebuild.php. Çalıştırın 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 kullanarak bunu çalıştırmak daha kolay olabilir
mbomb007

15

Drupal 7

Eğer drush kullanıyorsanız, şunları yapabilirsiniz:

drush eval 'menu_rebuild();'

Çalışmazsa, bkz. PHP Fatal hatası olduğunda menü nasıl yeniden oluşturulur?

Drupal 6

drush php-eval 'drupal_rebuild_theme_registry()'

memcached

Memcached kullanıyorsanız, yeniden başlatmanız gerekir.

Linux'ta: /etc/init.d/memcached restart

OS X'te (Homebrew kullanılıyorsa): brew services restart memcached


easely yapılacak doğru drush komutlar için yukarı oy, ama kesinlikle yukarıda @Valk bahsettiği gibi önce bazı durumlarda karşılık gelen veritabanı tabloları boşaltmak gerektiğini eklemek gerekir
Nilsun

11

Veritabanı şemasını açın, ardından aşağıdaki SQL sorgularıyla menu_links ve menu_router tablolarının tüm içeriğini silin:

DELETE FROM menu_links;
DELETE FROM menu_router;

Ardından http://example.com/update.php dosyasını çalıştırın . Bu tabloları 'yeni' verilerle dolduracak menu_rebuild () öğesini çağırır. Bir "PHP Ölümcül Hata: Bellek yetersiz" bazı menüler bir karmaşa haline sonra benim için çalıştı.

Ancak, manuel olarak yeniden oluşturmanız gereken tüm özel menüleri sileceğini unutmayın. Bundan kaçınmak için, menu_router ve menu_links'ten seçilen bazı kayıtların silinmesiyle biraz oynayabilirsiniz, ancak benim için iyi çalışmadı.

Ve tablolardan içerik silmeden önce veritabanınızı ve site dizininizi yedeklemeyi unutmayın.


2
menu_rebuild'ten önce ilgili veritabanı tablolarını KESİNLİKLE boşaltmanız gerektiğine dair gerekli ek bilgilere oy verin. Bu burada uzun vadeli deneyimlerden onaylandı ...
nilsun

3

Birkaç farklı yol:

  1. Hook_update_Nmenu_rebuild() numaralı telefondan arayın
  2. Drupal admin'den bir menü ayarları formunu düzenleyin ve kaydedin.
  3. Komut satırından, drush ile: drush cc menu

Teşekkür ederim. Bunu acele etmeden de yapabilir miyim?
user12804

Evet, yukarıdaki 3 yöntemden herhangi biri kendi başına çalışacaktır.
David Thomas

Ynt: Drupal admin'den bir menü bağlantısını düzenleyin ve kaydedin.
Çalışmıyor

Evet, bu menü ayarları sayfası içindir. menu_cache_clear_all()Menü önbelleğini yeniden oluşturmak için de arayabilirsiniz
David Thomas

2

Gitmek admin/config/development/performanceve "Clear tüm önbelleğe" düğmesine tıklayarak menü yeniden inşa yanı sıra açık şablon, blok, sayfa, vb önbellek olmasına yol açar.


Teşekkürler Penten, bunu birkaç kez denedim, ama şans yok. Silinmiş düğümler Gezinme menüsü yapısında görünmeye devam ediyor :(
user12804 28:13

2

Alternatif yol değişken ayarlamaktır:

variable_set('menu_rebuild_needed', TRUE);

Bu, menu_rebuild();


0

SQL'de yönetici menüsü kullanımını düzeltmek ve yukarıda belirtildiği gibi Valk'ın yönetim yönetim menünüzden tüm özelleştirmeleri kaldıracağını unutmayın. Önbelleğinizi temizledikten sonra yönetim menüsü varsayılan ayarlarına göre yeniden oluşturulacaktır.

İşte SQL sorgusu:

DELETE FROM menu_links WHERE menu_name='management' 

yeniden oluşturmak için menü çoğunlukla bir şey gerçekten kırık ve Drupal ortasında düzeltemez zaman gerekli olur. Bu yüzden Valks yöntemini tercih etmeyi tercih ederim, çünkü tam bir sıfırlama, daha fazla ayrıntı sağlanmamışsa, bu soru için daha iyi bir cevaptır.
nilsun
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.