logo

パレット - カラフルに🎨

Palette — ビジュアルページビルダー、デザインの専門知識は不要です。

ライブデモ パレットをダウンロード

Scroll

Drupal 7 モジュールは何で構成されているか?

17/04/2025, by Ivan

モジュールの作成を始める前に、Drupal API の機能についてもう少しお話ししたいと思います。API は、タクソノミー、ノード、ユーザー、データベースの入出力を扱う強力なツールを提供します。モジュールと Drupal コアの間、あるいは異なるモジュール間の通信を可能にするために、Drupal はフックシステムを提供しています。フックはコールバックです:コードの実行がフックに達すると、モジュールの関数が実行フローに組み込まれます。これにより、ユーザーデータ、メニュー、タクソノミー、コンテンツタイプを処理できます。

こちらを訪れてください:

http://api.drupal.org/api/drupal/includes--module.inc/group/hooks/7

このページには、Drupal コアで利用可能なフックが一覧表示されています。フックの一覧は Drupal のバージョンによって異なることに注意してください。私は Drupal 7 用のモジュールを作成しているので、バージョン 7 に該当するフックを使います。
Drupal のフック は次のパターンに従います:

ModuleName_HookName

フック名の中で「hook」が見えるところは、実装時にあなたのモジュールの名前に置き換える必要があります。

では、モジュールの作成から始めましょう:

1. sites/all/modules に、モジュールにちなんだ名前のフォルダーを作成します。私は site-made と名付けます。

2. このフォルダー内に、ModuleName.infoModuleName.module の 2 つのファイルを作成します。私の場合、これらは sitemade.infositemade.module です。

Drupal module

3. sitemade.info に、次を記述します:

;$Id$ ; Optional comment to simplify upload to drupal.org
name = Sitemade module ; Module name shown in the admin list
package = sitemade ; Package name
core = 7.x ; Drupal core version
files[] = sitemade.module ; Include PHP file

sitemade.module では、PHP コードを次で始めます:

これで、あなたのモジュールが管理モジュール一覧に表示されるはずです。有効にしましょう:

Drupal module list

モジュールが有効になったので、コードを追加できます。ユーザープロフィールページから「History(履歴)」ブロックを非表示にしましょう:

Drupal block

まず、hook_user_view を使ってテストしましょう:

hook_user_view のドキュメント

考え方は、Drupal がユーザーページをレンダリングするときに、私たちのフックが追加のコードを注入するというものです。私たちのモジュールでは、History ブロックの削除を試みます。sitemade.module を開き、次のコードを追加します:

function sitemade_user_view($account, $view_mode, $langcode){
    print_r($account);
}

ファイルを保存し、フックが認識されるように Drupal のキャッシュをクリアします。すると、ユーザーページの上部に何らかの出力が表示されます:

Drupal module

これは、hook_user_view によって提供される $account 配列で、print_r を使って表示されています。(開発に推奨される)Firefox を使っている場合は、CTRL+U を押してページのソースを表示すると、配列の内容を確認できます。

Drupal account array

uidname のようなフィールドに注目してください――これらはそれぞれユーザー ID とユーザー名を格納しており、プロフィールやユーザーコンテンツへのリンクによく使われます。

ご覧のとおり、History ブロックの情報はこの配列にはありません。代わりに hook_user_view_alter を試してみましょう:

hook_user_view_alter のドキュメント

コードを次に変更します:

function sitemade_user_view_alter($account, $view_mode, $langcode){
    print_r($account);
}

保存してページを再読み込みします。変更された配列が表示されます。今度は $account はこの配列の中の 1 つのフィールドにすぎません。summary の中に History ブロックの内容があります。unset() を使って削除しましょう:

function sitemade_user_view_alter($account, $view_mode, $langcode){
  unset($account['summary']);
  print_r($account);
}

summary が配列から消えるのに、ブロックはまだレンダリングされることに気づくかもしれません。なぜでしょうか? それは、$account が参照ではなく値渡しで渡されているからです。実際のデータを変更するには、パラメーターの前にアンパサンドを付けます:

function sitemade_user_view_alter(&$account, $view_mode, $langcode){
  unset($account['summary']);
  print_r($account);
}

保存して、再度キャッシュをクリアします。これで History ブロックがなくなるはずです。アンパサンドは参照を作成し、実際の $account 配列を変更できるようにします。PHP の参照については、どの PHP プログラミングチュートリアルでも詳しく読めます。

?>