2010-12-01 13 views
2

comment_save関数をオーバーライドしたいと思います。私の機能を追加できるように、それを上書きする方法はありますか?他のモジュールに存在する関数をオーバーライドする方法

http://drupal.org/node/375833などのトリガーを作成するのが最適ですか?それは事実の後に起こるので、それは非常に信頼できるように見えません。

ところで、これはD6にあります。

答えて

5

に役立ちます願っています。まず、hook_comment(http://api.drupal.org/api/drupal/developer--hooks--core.php/function/hook_comment/6)を使用して、必要なものを管理できるかどうかを調べることをお勧めします。これは、これが本当に必要なものです。

の場合、実際ににcomment_saveを上書きする必要がある場合は、しばしば、どのようなものを呼び出すかを調べることをお勧めします。この状況では、あなたは幸運です - comment_saveはcomment_form_submitの中のcomment.moduleの1542行目の1か所でのみ呼び出されます。

comment_form_submitは、フォーム送信関数です。comment_saveを置き換える代わりに、独自のカスタムバージョンのcomment_form_submitを作成することもできます(また、引数として 'custom_module'モジュールで作業していると仮定します)。ですから、私が使っているcomment_saveのバリエーションを呼び出すcustom_module_comment_form_submitという新しい関数を作成し、hook_form_alter()(http://api.drupal.org/api/drupal/developer--hooks--core.php/function/hook_form_alter/6)を使って$ form ['#submit']を設定して「comment_form_submit」に「custom_module_comment_form_submit」と入力します。

これは完璧ではありません。comment_saveを使用する別のモジュールをインストールする場合は、同様の回避策を見つける必要があります。また、ここで取り組んでいる部分で修正されたDrupalにバグやセキュリティホールが見つかった場合、そのセキュリティホールがコードに固定されることはありません。しかし、あなたが絶対にcomment_saveを置き換えなければならない場合、これはほとんどそれを行う唯一の方法です。

2

comment_save関数を「オーバーライド」できませんが、カスタムモジュールでhook_commentを実装できます。

drupal.org'sのドキュメントを参照してください。

あなたがなりのために便利になり、問題の2つの$ OPS:

  • 「挿入」:コメントが挿入されています。
  • "更新":コメントが更新されています。

が、これはそれがトリッキーだ

+0

同意。コアや他のモジュールの動作を「オーバーライド」する必要があるときには、hook_commentとフックを使用することに固執します。 –

1

確かに理想的ではありませんが、私は独自のカスタムモジュールを作成した後、オリジナルのコメントをコメントアウトしています(これがなぜ行われたのか他の人に伝えてください)。元の機能を持っているモジュールをアップグレードすると、機能がすでに再宣言されているか、少なくとも再コメントするように宣言されているというエラーが表示されます。フックは確かにベストプラクティスですが、ピンチでは、これは少なくとも、既存のモジュールで実際に関数を編集するよりも少し優れています。いくつかのケースでは、特定のモジュールをうまく組み合わせるために必要なことがわかりました。

関連する問題