Drupal 7 hook_block_info() と hook_block_view() ブロックに情報を表示する
前のレッスンでは、Drupal 7 用のモジュールを作成しました。このレッスンでは、引き続きモジュールを強化していきます。hook_block_info() と hook_block_view() を使ってブロック出力を追加します。このブロックは、サイトの最新ユーザーを、それぞれのプロフィールページへのリンク付きで表示します。
まず、hook_block_info() の説明から始めましょう:
モジュールが作成するすべてのブロックを定義します。
このフックは、モジュールがどのブロックを表示するかを Drupal に伝え、ブロックの設定オプションを記述することもできます。
hook_block_info() では、各ブロックに「delta」と呼ばれる一意の識別子(返される配列のキー)が割り当てられます。delta の値はモジュール内で一意でなければならず、次の用途に使われます:
- 設定またはレンダリングするブロックを識別するために、引数として他のブロックフックに渡されます。
- Drupal がスタイリングとスクリプトのために適用するブロックテンプレートファイル
block-MODULE-DELTAを作成するために使われます。 - 高度なテーミングのためのテーミング関数
block__MODULE__DELTAを定義するために使われます。 hook_block_info_alter()やその他の関連フックであなたのブロックを識別するために使われます。
delta は文字列または整数で、その最大長は 32 バイトです。
戻り値
各キーが delta で、その値が説明配列である連想配列です。各説明配列には、次のキーと値のペアを含められます:
- 'info'(必須):管理インターフェースに表示される、人間が読めるブロックの名前。
- 'cache'(任意):ブロックのキャッシュ動作を記述します。オプションには次のものがあります:
- DRUPAL_CACHE_PER_ROLE(デフォルト):ユーザーロールに基づいてキャッシュ。
- DRUPAL_CACHE_PER_USER:ユーザー ID に基づいてキャッシュ。
- DRUPAL_CACHE_PER_PAGE:ページに基づいてキャッシュ。
- DRUPAL_CACHE_GLOBAL:すべてのユーザーとページで同じキャッシュ。
- DRUPAL_NO_CACHE:ブロックはキャッシュされません。
- 'properties'(任意):追加のメタデータ配列。次を含みます:
- 'administrative':ブロックが管理目的かどうかを示すブール値。
- 'weight':ブロックの weight 値。
- 'status':初期状態(1 = 有効、0 = 無効)。
- 'region':初期のリージョン配置。
- 'visibility':ブロックの表示ルール(たとえば、列挙したページ、列挙していないページ、または PHP コード)。
- 'pages':表示設定に関連するパスの一覧。
このフックでブロックを追加しましょう:
これでブロックが管理インターフェースに表示されるはずです。それを左サイドバーに追加しましょう:

ブロックを追加したので、hook_block_view() フックを使ってその内容を定義しましょう。
hook_block_view($delta = ''):
パラメーター
$delta — どのブロックがレンダリングされているかを識別します。これは hook_block_info() が返した delta と一致します。
戻り値
次の要素を持つ 配列:
- subject:ブロックのタイトル。タイトルが不要な場合は NULL を返します。
- content:ブロックの本文。レンダリング可能な配列(推奨)または生の HTML 文字列として。
このフックを実装しましょう:
fields('u', array('uid', 'name')) // select uid and name
->orderBy('u.uid', 'DESC') // order by uid descending
->range(0, 5) // limit to 5 users
->execute(); // execute the query
$users = $query->fetchAll(PDO::FETCH_ASSOC); // fetch results
foreach ($users as $user) {
$block['content'] .= '
'; // base_path() returns the base path of the Drupal site } break; } return $block; } ?>
これは、サイトに最近登録された 5 人のユーザーを、それぞれのプロフィールへのリンクとして出力します。もちろん、リンクの作成には l() 関数を使う方がよいのですが、それは別の記事に値します。
