Làm cách nào để gọi hàm menu numbuild trong Drupal 7?


13

Tôi muốn gọi hàm menu numbuild () , nhưng tôi không chắc chắn nơi dán chính xác đoạn mã.

Tôi không thể tìm thấy tệp update.php ở bất cứ đâu trong trường hợp cục bộ của tôi.

Lý do tôi muốn thử điều này là vì tôi đã xóa tất cả các nút, nhưng chúng vẫn xuất hiện dưới cấu trúc menu.


Bạn có muốn xây dựng lại menu Drupal sau khi cập nhật hay không?
Aboodred1

update.php sẽ nằm trong thư mục gốc drupal tức là /var/www/htdocs/drupalsửa đổi nó là một ý tưởng tồi. Bạn có thể vui lòng thêm chi tiết về lý do tại sao bạn muốn gọi menu numbuild không?
GoodSp33d

Aboodred1, vâng, tôi muốn xây dựng lại menu drupal sau khi xóa tất cả các nút. 2-Stroker, drupal.stackexchange.com/questions/58606/ trên
user12804

@ user12804, Bạn có chắc chúng là các menu liên quan đến nút không? Nếu vậy, tôi đã trả lời trong câu hỏi khác.
Sithu

Câu trả lời:


5

Tạo một tệp có nội dung sau và chỉ cần thả vào thư mục gốc Drupal. Hãy nói menu-rebuild.php. Chạy 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();

Có thể dễ dàng hơn để chạy điều này bằng cách sử dụng
Devel

15

Drupal 7

Nếu bạn đang sử dụng drush, bạn có thể chạy:

drush eval 'menu_rebuild();'

Nếu không hoạt động, hãy xem: Làm thế nào để xây dựng lại menu khi gặp lỗi PHP Fatal?

Drupal 6

drush php-eval 'drupal_rebuild_theme_registry()'

nhớ

Nếu bạn đang sử dụng memcached, bạn sẽ khởi động lại nó.

Trên Linux: /etc/init.d/memcached restart

Trên OS X (nếu sử dụng Homebrew): brew services restart memcached


bỏ phiếu cho các lệnh drush đúng để làm điều đó easely, nhưng bạn chắc chắn nên thêm rằng trong một số trường hợp, bạn cần dọn sạch bảng cơ sở dữ liệu tương ứng trước giống như được đề cập bởi @Valk trên
nilsun

11

Mở lược đồ cơ sở dữ liệu, sau đó xóa tất cả nội dung của các bảng menu_links và menu_router với các truy vấn SQL sau:

DELETE FROM menu_links;
DELETE FROM menu_router;

Sau đó chạy http://example.com/update.php . Nó sẽ gọi menu numbuild (), sẽ điền vào các bảng này dữ liệu 'mới'. Nó hoạt động với tôi sau khi "Lỗi nghiêm trọng PHP: hết bộ nhớ" đã biến một số menu của tôi thành một mớ hỗn độn.

Nhưng hãy lưu ý rằng nó sẽ xóa sạch tất cả các menu tùy chỉnh của bạn mà bạn sẽ phải xây dựng lại bằng tay. Để tránh điều đó, bạn có thể chơi một chút với việc xóa một số bản ghi đã chọn từ menu_router và menu_links, nhưng đối với tôi nó không hoạt động tốt.

Và đừng quên sao lưu cơ sở dữ liệu và thư mục trang web của bạn trước khi xóa nội dung khỏi các bảng.


2
bỏ phiếu cho các thông tin bổ sung cần thiết, đôi khi bạn HOÀN TOÀN cần phải làm trống các bảng cơ sở dữ liệu giảm dần trước menu numbuild. Điều này được xác nhận ở đây từ những kinh nghiệm lâu dài ...
nilsun

3

Một vài cách khác nhau:

  1. Gọi menu_rebuild()từ hook_update_N
  2. Chỉnh sửa và lưu biểu mẫu cài đặt menu từ quản trị viên Drupal.
  3. Từ dòng lệnh, với drush: drush cc menu

Cảm ơn bạn. Tôi có thể làm điều này mà không cần drush là tốt?
dùng12804

Có, bất kỳ phương pháp nào trong 3 phương pháp trên sẽ tự hoạt động.
David Thomas

Re: Chỉnh sửa và lưu một liên kết menu từ quản trị viên Drupal. Không hoạt động, đã thử điều đó một vài lần ...
user12804

Vâng, cái đó có nghĩa là cho trang cài đặt menu. Bạn cũng có thể gọi menu_cache_clear_all()để xây dựng lại bộ nhớ cache của menu
David Thomas

2

Truy cập admin/config/development/performancevà nhấp vào nút "Xóa tất cả bộ nhớ cache" sẽ khiến menu được xây dựng lại, cũng như xóa mẫu, chặn, trang, v.v.


Cảm ơn Penten, tôi đã thử điều đó một số lần, nhưng không có may mắn. Các nút bị xóa vẫn xuất hiện trong cấu trúc menu Điều hướng :(
user12804

2

Cách khác là đặt biến:

variable_set('menu_rebuild_needed', TRUE);

Điều này sẽ kích hoạt menu_rebuild();


0

Để sửa lỗi trình đơn quản trị viên sử dụng trong SQL và lưu ý rằng như Valk đã nêu ở trên, nó sẽ xóa tất cả các tùy chỉnh khỏi menu quản lý quản trị của bạn. Sau khi bạn chạy, xóa bộ nhớ cache của bạn, menu quản lý sẽ được xây dựng lại thành cài đặt mặc định.

Đây là truy vấn SQL:

DELETE FROM menu_links WHERE menu_name='management' 

để xây dựng lại menu hầu như trở nên cần thiết khi một cái gì đó thực sự bị hỏng và Drupal không thể sửa nó ở giữa. Đó là lý do tại sao tôi muốn giới thiệu phương pháp Valks vì thiết lập lại hoàn toàn là câu trả lời tốt hơn cho câu hỏi đó nếu không có thêm chi tiết nào được cung cấp WHAT bị hỏng.
nilsun
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.