2つのモジュールAとBがあり、両方に同じuser_loginフックがある場合。それで、私がログインすると、最初に呼び出したA_user_login()およびB_user_login()関数から、そしてdrupalこれら2つの関数の実行順序を決定する方法
フックは次の順序で呼び出されます
{system.weight}
として定義されています。重みが低いほど、呼び出しプロセスの早い段階で来ます。デフォルトでは、モジュールには0の重みが割り当てられるため、システム内のほぼすべてのフックがアルファベット順に実行されます。一部のモジュールは、インストールフックでこれを調整して、 module_invoke_all
関数の前後で実行されるようにします。
デフォルトでは、モジュールの重みは、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;
}
}