D6では、contribモジュールを使用していますが、その動作の少しをオーバーライドしたいと思います。そのためのカスタムモジュールがありますが、関連するフックの実装がcontribモジュールの実装の前に呼び出されるため、contribモジュールのバージョンが「優先」されます。
それを変更し、最後に自分のフックを強制的に呼び出す方法はありますか?
具体的な詳細は次のとおりです。
未登録ユーザーのデフォルトの「匿名」ユーザー名をコメントフォームから削除したいと思います。 form_alterフックを実装し、名前フィールドからデフォルト値を削除する小さなカスタムモジュールTweak_comment_formを作成しました( これに関する以前の質問への回答を参照してください )。
ただし、form-alterも実装する RealName というcontribモジュールも使用します。 RealNameは、登録済みユーザーに必要なことを行います(ユーザー名を「実際の名前」に置き換えます)が、デフォルト値を名前フィールドに再割り当てします。
はい、非常に単純に、モジュールの重量をより重く設定する必要があります。これを行うにはいくつかの方法がありますが、モジュールがDrupal.orgにリリースされるcontribモジュールである場合、次のようなコードでhook_install()
に設定するのが最善の方法です。
db_query("UPDATE {system} SET weight = 100 WHERE name = 'MYMODULE'");
または、 tility module を使用してモジュールページからモジュールの重みを設定することもできますが、これは個人用のインストール専用です。
Drupal7の追加の役立つ情報と同じように、hook_module_implements_alterがあります。
そこで、他のモジュールのフックを変更することもできます。たとえば、モジュールを最後/最初に移動します。
function my_module_module_implements_alter(&$implementations, $hook) {
if ($hook != 'the_hook_to_change') {
return;
}
$module = 'my_module';
$group = array($module => $implementations[$module]);
unset($implementations[$module]);
$implementations = $group + $implementations; // If you want your implementation to run first.
//$implementations = $group + $implementations; If you want your implementation to run last.
}