さまざまなモジュールによるどのフック実装の順序を変更できますか?

drupal.stackexchange https://drupal.stackexchange.com/questions/404

  •  16-10-2019
  •  | 
  •  

質問

D6では、Contribモジュールを使用しますが、その動作のほんの少しをオーバーライドしたいと思います。そのためのカスタムモジュールがありますが、関連するフックの実装は、contribモジュールでの実装の前に呼び出されるため、contribモジュールのバージョンは「wins」です。

それを変更し、私自身のフックを最後に呼ぶように強制する方法はありますか?

具体的な詳細は次のとおりです。

コメントフォームで未登録のユーザーのデフォルトの「匿名」ユーザー名を削除したいと思います。 form_alterフックを実装し、名前フィールドからデフォルト値を削除する小さなカスタムモジュール、tweak_comment_formを作成しました(名前フィールドからデフォルト値を削除します。それについての私の以前の質問への答えを参照してください).

ただし、呼ばれるContribモジュールも使用します 本名, 、form_alterも実装しています。 RealNameは、登録ユーザーに必要なことを行います(ユーザー名を「本名」に置き換えます)が、デフォルト値を名前フィールドに再割り当てします。

役に立ちましたか?

解決

はい、非常に簡単に言えば、モジュールの重量をより重くするように設定する必要があります。これを行う方法はいくつかありますが、モジュールがdrupal.orgにリリースされるコントリブモジュールである場合、最良の方法はそれを設定することです hook_install() 次のようなコードを使用してください

db_query("UPDATE {system} SET weight = 100 WHERE name = 'MYMODULE'");

または、使用することもできます ユーティリティモジュール モジュールページからモジュールの重みを設定するには、これは個人のインストール専用です。

他のヒント

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.
}

に基づく小さな変更 https://api.drupal.org/comment/48623#comment-48623

ライセンス: CC-BY-SA帰属
所属していません drupal.stackexchange
scroll top