サードパーティモジュールがモジュールによって実行されたクエリを変更できるようにする
質問
パブリックAPIを公開するモジュールを開発しています。これには、モジュールを使用する任意のモジュールから使用することになっている独自のデータベーステーブルにデータを保存する機能が含まれています。
モジュールは、データベースのコンテンツをチェックして、ユーザーがサイトへのアクセスが許可されていないか、ユーザーがユーザープロファイルの何かを変更したときにユーザーにエラーメッセージを通知する必要があるかどうかを確認します。
ほとんどの場合、データベーステーブルが確認する唯一のテーブルであることを考慮して、コードを変更してサードパーティモジュールがモジュールから実行されているクエリを変更できるようにする必要がある場合は、 hook_query_TAG_alter()
(またはより一般的なもの hook_query_alter()
)、または他のモジュールが実装する必要があるカスタムフックを使用しますか?
解決
あなたの質問が今正確に何なのか本当にわかりません。
hook_query_alter()が存在する理由はわかりませんが、最初はそうではありませんでした。私はそのフックがあまり理にかなっているとは思わない、私はあなたが変更したいユースケースを考えることができない 毎日 クエリ。
他のモジュールがクエリを拡張することを期待する場合は、「 - > addtag( 'yourmodule_tag')」を使用して、それを変更できるようにします。すでに言ったように、これは同じ既存のクエリを変更する必要がある場合のみをカバーしています。他のチェックを実行してから、クエリでは決して真実ではない条件(1 = 0など)を追加することが可能かもしれませんが、それは私にはハッキーに聞こえます。
他のモジュールがやりたいと思うより複雑なチェックがある可能性があると思われる場合は、独自のフックを定義することもできます。おそらく、hook_node_accessパターンを3つの可能な返品値(無視、許可、否定)で再利用する必要があります。 node_access().
これらの2つのことのいずれかまたは両方を実行できます。フックの実装がキャッシュされており、フックが呼び出されるたびに再チェックする必要がないため、フックコールはD7ではかなり高速です。