Bagaimana saya memanggil fungsi menu_rebuild di Drupal 7?

13

Saya ingin memanggil fungsi menu_rebuild () , tetapi saya tidak yakin di mana tepatnya menempelkan potongan kode.

Saya tidak dapat menemukan file update.php di manapun dalam instance lokal saya.

Alasan saya ingin mencoba ini adalah karena saya menghapus semua node, tetapi mereka masih muncul di bawah struktur menu.

pengguna12804
sumber
Anda ingin membangun kembali menu Drupal setelah pembaruan atau apa?
Aboodred1
update.php akan berada di folder root drupal yaitu /var/www/htdocs/drupalDan memodifikasinya adalah ide yang buruk. Bisakah Anda menambahkan lebih detail mengapa Anda ingin memanggil menu_rebuild?
GoodSp33d
Aboodred1, ya, saya ingin membangun kembali menu drupal setelah menghapus semua node. 2-Stroker, drupal.stackexchange.com/questions/58606/…
user12804
@ user12804, Apakah Anda yakin itu adalah menu yang berhubungan dengan simpul? Jika demikian, saya sudah menjawab dalam pertanyaan lain.
Sithu

Jawaban:

5

Buat file dengan konten berikut dan cukup masukkan direktori root Drupal. Katakan saja menu-rebuild.php. Jalankan 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
sumber
Mungkin lebih mudah untuk menjalankan ini menggunakan
Devel
15

Drupal 7

Jika Anda menggunakan drush, Anda dapat menjalankan:

drush eval 'menu_rebuild();'

Jika tidak berhasil, lihat: Bagaimana cara membangun kembali menu ketika mengalami kesalahan PHP Fatal?

Drupal 6

drush php-eval 'drupal_rebuild_theme_registry()'

memcached

Jika Anda menggunakan memcached, Anda harus me-restart itu.

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

Pada OS X (jika menggunakan Homebrew): brew services restart memcached

kenorb
sumber
pilih perintah drush yang benar untuk melakukannya dengan mudah, tetapi Anda harus menambahkan bahwa dalam beberapa kasus Anda perlu mengosongkan tabel database yang sesuai sebelum seperti yang disebutkan oleh @Valk di atas
nilsun
11

Buka skema database, lalu hapus semua konten menu_links dan menu_router tabel dengan kueri SQL berikut:

DELETE FROM menu_links;
DELETE FROM menu_router;

Kemudian jalankan http://example.com/update.php . Ini akan memanggil menu_rebuild (), yang akan mengisi tabel ini dengan data 'segar'. Ini bekerja untuk saya setelah "Kesalahan PHP Fatal: Kehabisan memori" mengubah beberapa menu saya menjadi berantakan.

Tetapi perlu diketahui, bahwa itu akan menghapus semua menu kustom Anda yang harus Anda bangun kembali secara manual. Untuk menghindarinya Anda dapat bermain sedikit dengan menghapus beberapa catatan yang dipilih dari menu_router dan menu_links, tetapi bagi saya itu tidak berfungsi dengan baik.

Dan jangan lupa untuk mencadangkan database dan direktori situs Anda sebelum menghapus konten dari tabel.

Valk
sumber
2
pilih info tambahan yang diperlukan, yang kadang-kadang Anda PASTI perlu mengosongkan tabel database yang sesuai sebelum menu_rebuild. Ini dikonfirmasi di sini dari pengalaman jangka panjang ...
nilsun
3

Beberapa cara berbeda:

  1. Telepon menu_rebuild()dari hook_update_N
  2. Edit dan simpan formulir pengaturan menu dari admin Drupal.
  3. Dari baris perintah, dengan drush: drush cc menu
David Thomas
sumber
Terima kasih. Bisakah saya melakukan ini tanpa mabuk juga?
user12804
Ya, salah satu dari 3 metode di atas akan bekerja dengan sendirinya.
David Thomas
Re: Edit dan simpan tautan menu dari admin Drupal. Tidak berfungsi, sudah mencobanya beberapa kali ...
user12804
Ya, yang itu dimaksudkan untuk halaman pengaturan menu. Anda juga dapat menelepon menu_cache_clear_all()untuk membangun kembali cache menu
David Thomas
2

Pergi ke admin/config/development/performancedan mengklik tombol "Hapus semua cache" akan menyebabkan menu dibangun kembali, serta menghapus templat, blokir, halaman, dll. Cache.

terpendam
sumber
Terima kasih Penten, saya mencobanya beberapa kali, tetapi tidak berhasil. Node yang dihapus masih muncul dalam struktur menu Navigasi :(
user12804
2

Cara alternatif adalah dengan mengatur variabel:

variable_set('menu_rebuild_needed', TRUE);

Ini akan memicu menu_rebuild();

Michal Przybylowicz
sumber
0

Untuk memperbaiki penggunaan menu admin dalam SQL dan perhatikan bahwa seperti yang dinyatakan Valk di atas, ia akan menghapus semua penyesuaian dari menu manajemen administrasi Anda. Setelah Anda menjalankannya, hapus cache Anda dan menu manajemen akan dibangun kembali ke pengaturan standarnya.

Ini query SQL:

DELETE FROM menu_links WHERE menu_name='management' 
kenorb
sumber
untuk membangun kembali menu sebagian besar diperlukan ketika ada sesuatu yang benar-benar rusak dan Drupal tidak dapat memperbaikinya di tengah. Itu sebabnya saya lebih suka merekomendasikan metode Valks karena reset lengkap adalah jawaban yang lebih baik untuk pertanyaan seperti itu jika tidak ada rincian lebih lanjut APA yang rusak.
nilsun