質問

既存のモジュールを変更せずに拡張するにはどうすればよいですか?実際、これは寄稿されたモジュールなので、ハッキングしたくありません。しかし、特定の機能を変更して追加したいと思います。 私はdrupalに慣れていないので、それについてのチュートリアルを読みながら、何度も何度も耳を傾けています。コアをハッキングしないでください。そして、モジュールにも同じことが当てはまります。

役に立ちましたか?

解決

可能な限り、モジュールのハッキングや分岐を避けてください。モジュールをハッキングすると、「ハッキングコア」の種類が少なくなります。痛み、モジュールの分岐(明確に優れたアーキテクチャと機能セットなし)。モジュールの水をさらに汚すだけです。サイトビルダーが使用するものについて効果的な決定を下すのはさらに難しくなります。

最適なソリューションは次のとおりです。

  1. モジュールが提供するAPIを使用します。 API呼び出しとして使用できる関数がありますが、必ずしもそのように意図されているわけではありません。
  2. 追加の機能を作成し、モジュール発行キューにパッチを提出してください。そうすれば、他の人があなたの作業から恩恵を受けることができます。
  3. 常にではありませんが、しばしばhook_form_alterを実装し、処理のためにモジュールに戻る送信ハンドラーを追加するカスタムモジュールを作成できます。

他のヒント

非常に優れた 投稿 を拡張について発見しましたdrupalのモジュール。必須パーツ:

  • モジュールが変更するページコールバックのコードを使用する場合、hook_menu_alter()でページコールバックを変更します。

  • 変更したいテーマ関数がモジュールに実装されている場合、hook_theme_registry_alter()に関連付けられている関数を変更します。あるいは、テーマ関数が取得する変数を変更するだけで十分な場合、そのテーマ関数の前処理関数を実装できます(例えば、theme_rdf_metadata()のhook_preprocess_rdf_metadata()、テーマ関数が取得する変数を変更できます。

  • モジュールがdb_select()を使用してSQLクエリを実行し、タグをクエリに割り当てる場合、実行されたクエリをhook_query_alter()で変更します。

  • モジュールが実行したくないフックを実装している場合、hook_module_implements_alter()を実装して実行を回避できます。

  • モジュールがalterフック(例hook_page_alter())を実装し、そのフックが変更したものを変更したい場合は、同じalterフックを実装します。 / p>

変更する関数がフックではない場合:

  • 関数が他のモジュールから実装されたフックを使用していることを確認します。たとえば、node_save()はhook_node_presave()を呼び出します。 「変更済み」を変更する場合は、ノードのプロパティ、node_save()をハックするのではなく、hook_node_presave()を実装して変更します。

  • フックから関数が参照/使用されていることを確認します。その場合、前に説明したように、そのフックに対して何かを行うことができます。

これまで述べたことが当てはまらない場合は、カスタムモジュールを作成し、他のモジュールのコードを使用して作成することをお勧めします。また、機能が実装されることを期待して、既存のモジュールの機能要求を要求してみます。 サードパーティのモジュールをハッキングすることは決してお勧めできません。特に、モジュールの自動更新(Update ManagerまたはDrushを介した)は、そのモジュールでは不可能になるためです。

新しいモジュールを作成して既存のモジュールを拡張する方法の詳細については、次の簡単な例をご覧ください こちら

それはどのモジュールですか?一部のモジュールは、独自のモジュールを記述することで拡張できるAPIを提供します。 「拡張」するモジュールのトンがあります。 Views APIを基に構築したビュー。拡張したいモジュールに適切なAPIがない場合は、いつでもフォークして、ニーズに合ったバージョンを作成できます。おそらく他の人にも役立つでしょう。

一部の機能を使用する必要がある場合でも、次の方法で実行できます。 モジュールから関数をコピーする必要があり、template.phpファイルに関数を貼り付けることができます。それに応じて、その機能に変更を加えることができます。

モジュールに表示されるフォームを変更するには、 hook_form_alter()または hook_form_FORM_ID_alter()を実装するモジュールを作成するだけです。ほとんどの場合、モジュールの動作を変更する場合は、使用する設定フォーム(または、使用する場合は使用する他のフォーム)も変更する必要があります。

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