drupal은 다른 모듈에서 동일한 후크의 실행 순서를 어떻게 결정합니까?


22

두 개의 모듈 A와 B가 있고 둘 다 동일한 user_login 후크를 갖는 경우. 그래서 내가 먼저 호출 한 A_user_login () 및 B_user_login () 함수에서 로그인 할 때 drupal 이이 두 함수의 실행 순서를 결정하는 방법

답변:


31

후크는 순서대로 호출됩니다.

  1. 가중치는 데이터베이스에서 모듈별로로 정의됩니다 {system.weight}. 낮은 무게는 통화 과정에서 더 일찍 나타납니다.
  2. 모듈 이름에 따라 알파벳순.

기본적으로 모듈에는 가중치 0이 할당되므로 시스템의 거의 모든 후크가 알파벳 순서로 실행됩니다. 일부 모듈은 설치 후크에서이를 조정하여 module_invoke_all기능 에서 이전 또는 이후에 실행되도록 합니다.

참조 : 모듈 무게 조정 :주의해야 할 위험과 사물은 무엇입니까?


3
D7에는가 있습니다 hook_module_implements_alter().
Andy

11

기본적으로 모듈 가중치는 hook_ * 함수를 실행할 위치를 정의합니다.

hook_module_implements_alter로 구현 모듈의 기본 순서를 변경할 수 있습니다 . 이 블로그 자습서 를 자세히 읽으면 작은 예를 찾을 수 있습니다 .

해당 블로그 게시물에서 구현 예는 다음과 같습니다.

function mymodule_module_implements_alter(&$module_list, $context){
 if($context === "node_insert"){
 $temp = $module_list['mymodule'];
 // Removing the mymodule key/value
 unset($module_list['mymodule']);
 // Adding the mymodule key value as the last member in the list
 $module_list['mymodule'] = $temp;
 }
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.