Drupal 7에서 menu_rebuild 함수를 어떻게 호출합니까?


13

menu_rebuild () 함수 를 호출하고 싶지만 코드 스 니펫을 정확히 어디에 붙여 넣는 지 확실하지 않습니다.

로컬 인스턴스에서 update.php 파일을 찾을 수 없습니다 .

이것을 시도하려는 이유는 모든 노드를 삭제했지만 여전히 메뉴 구조 아래에 표시되기 때문입니다.


업데이트 후 Drupal 메뉴를 다시 작성 하시겠습니까?
Aboodred1

update.php는 drupal root 폴더에있을 것입니다. /var/www/htdocs/drupal그리고 그것을 수정하는 것은 나쁜 생각입니다. menu_rebuild를 호출하려는 이유에 대한 자세한 내용을 추가해 주시겠습니까?
GoodSp33d

Aboodred1, 예, 모든 노드를 삭제 한 후 드루팔 메뉴를 다시 작성하고 싶습니다. 2-Stroker, drupal.stackexchange.com/questions/58606/…
user12804

@ user12804, 노드 관련 메뉴입니까? 그렇다면 이미 다른 질문에 대답했습니다.
Sithu

답변:


5

다음 내용으로 파일을 작성하고 Drupal 루트 디렉토리에 놓으십시오. 말해 보자 menu-rebuild.php. 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();

이 사용 (STABLE)을 실행하는 것이 더 쉬울 수 있습니다
mbomb007

15

드루팔 7

drush를 사용하는 경우 다음을 실행할 수 있습니다.

drush eval 'menu_rebuild();'

작동하지 않으면 PHP 치명적 오류가 발생했을 때 메뉴를 다시 작성하는 방법을 참조하십시오.

드루팔 6

drush php-eval 'drupal_rebuild_theme_registry()'

memcached

memcached를 사용하는 경우 다시 시작해야합니다.

Linux에서 : /etc/init.d/memcached restart

OS X (Homebrew를 사용하는 경우) : brew services restart memcached


올바른 drush 명령을 쉽게 수행 할 수 있도록 투표하십시오. 그러나 어떤 경우에는 위의 @Valk에서 언급 한 것처럼 해당 데이터베이스 테이블을 비워야합니다.
nilsun

11

데이터베이스 스키마를 연 후 다음 SQL 쿼리를 사용하여 menu_links 및 menu_router 테이블의 모든 내용을 삭제하십시오.

DELETE FROM menu_links;
DELETE FROM menu_router;

그런 다음 http://example.com/update.php를 실행 하십시오 . 이 테이블을 'fresh'데이터로 채울 menu_rebuild ()를 호출합니다. "PHP 치명적인 오류 : 메모리 부족"으로 인해 일부 메뉴가 엉망으로 된 후에 그것은 저에게 효과적이었습니다.

그러나 수동으로 다시 작성 해야하는 모든 사용자 정의 메뉴가 지워집니다. 이를 피하기 위해 menu_router 및 menu_links에서 선택한 레코드를 삭제하여 약간 재생할 수 있지만 나에게는 잘 작동하지 않았습니다.

또한 테이블에서 내용을 삭제하기 전에 데이터베이스와 사이트 디렉토리를 백업하는 것을 잊지 마십시오.


2
필요한 추가 정보에 투표하십시오. 때로는 menu_rebuild 전에 해당 데이터베이스 테이블을 비워야합니다. 이것은 장기적인 경험에서 확인되었습니다 ...
이것은

3

몇 가지 다른 방법 :

  1. hook_update_Nmenu_rebuild() 에서 전화
  2. Drupal 관리자의 메뉴 설정 양식을 편집하고 저장하십시오.
  3. drush를 사용하여 명령 행에서 : drush cc menu

감사합니다. 서두르지 않고 이것을 할 수 있습니까?
user12804

예, 위의 세 가지 방법 중 하나가 저절로 작동합니다.
David Thomas

다시 : Drupal 관리자에서 메뉴 링크를 편집하고 저장하십시오. 작동하지 않습니다, 이미 몇 번 시도했습니다 ...
user12804

예, 메뉴 설정 페이지를위한 것입니다. menu_cache_clear_all()메뉴 캐시를 다시 만들 수도 있습니다
David Thomas

2

에가는 admin/config/development/performance하고 "모두 지우기 캐시 '버튼을 클릭하면 메뉴가 재건뿐만 아니라 명확 템플릿, 블록, 페이지 등 캐시로 발생합니다.


고마워 펜텐, 나는 여러 번 시도했지만 운이 없다. 삭제 된 노드는 여전히 탐색 메뉴 구조에 나타납니다. (
user12804


0

SQL에서 관리 메뉴 사용을 수정하고 위에서 언급 한 Valk는 관리 관리 메뉴에서 모든 사용자 정의를 제거합니다. 캐시를 지우고 실행하면 관리 메뉴가 기본 설정으로 재구성됩니다.

다음은 SQL 쿼리입니다.

DELETE FROM menu_links WHERE menu_name='management' 

실제로 메뉴가 깨져서 Drupal이 메뉴를 수정하지 못하는 경우 메뉴를 다시 빌드해야합니다. 그래서 더 자세한 정보가 제공되지 않으면 완전한 재설정이 그러한 질문에 대한 더 나은 대답이기 때문에 Valks 방법을 권장하는 이유입니다.
nilsun
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.