アイキャッチ画像: デスクの上でパソコンを使用している

本日は「 Drupal 7 の各種テンプレートで使えるデフォルトの変数まとめ」と題して Drupal (ドルーパル)がテンプレート内で使える変数としてデフォルトで用意しているものをまとめてみました。

対象とする Drupal のバージョンは 7.x です。

Drupal のテンプレートには template_preprocess_HOOK() 関数を実装することで自由に変数を追加することができますが、デフォルトの状態ですでに多くの変数が用意されているので、それらをひととおり知っておくと「すでにある変数を重複して用意してしまう」というムダな開発作業を未然の防ぐことができます。

以下、メジャーなテンプレート 4 つを順に取り上げてそれぞれで利用可能な変数を取り上げていきます。

html.tpl.php

利用できる変数:

  • $css: 現在のページの CSS ファイルの配列。
  • $language: サイトが表示されている言語を表すオブジェクト。 $language->language には言語のテキストでの表現が含まれている。 $language->dir には言語の方向が含まれており、 'ltr''rtl' のどちらか。
  • $rdf_namespaces: HTML ドキュメントで使用されるすべての RDF の名前空間プレフィックス。
  • $grddl_profile: GRDDL プロファイル。これによってエージェントが RDF を抽出できる。
  • $head_title: ページタイトルの修正版。 title タグで使うためのもの。
  • $head_title_array: 連想配列。 $head_title 変数を生成するために使用された文字列パーツを格納した連想配列。 $head_title については title タグとして出力されるものとして準備済み。キー/バリューのペアには条件によって以下のものがひとつ以上含まれる。
    • title: 現在のページのタイトル。
    • name: サイト名。
    • slogan: サイトスローガン。スローガンが設定されていてタイトルがない場合。
  • $head: head セクションのマークアップ。メタタグやキーワードタグなどを含む。
  • $styles: 現在のページのすべての CSS ファイルをインポートするのに必要なスタイルタグ。
  • $scripts: 現在のページのすべての JavaScript ファイルと setting を読み込むのに必要なスクリプトタグ。
  • $page_top: ページを変更したすべてのモジュールから生成された最初のマークアップ。この変数は必ず他の動的なコンテンツよりも前のいちばん最初に出力されるべきもの。
  • $page: レンダリングされたページコンテンツ。
  • $page_bottom: ページを変更したすべてのモジュールから生成された最後の終端マークアップ。この変数は必ず他の動的なコンテンツよりも後のいちばん最後に出力されるべきもの。
  • $classes: CSS を使ってコンテクストに応じてスタイリングを行うために使用できるクラスの文字列の集まり。

page.tpl.php

利用できる変数:

汎用変数:

$base_path: Drupal がインストールされているベース URL パス。最短の場合は /$directory: テンプレートが配置されているディレクトリ。例: modules/systemthemes/bartik$is_front: 現在のページがフロントページなら TRUE 。 $logged_in: 現在のユーザがサインインした登録ユーザでであれば TRUE 。 $is_admin: 現在のユーザが管理者ページにアクセスできる権限を持っていれば TRUE 。

サイトアイデンティティ:

$front_page: フロントページの URL 。フロントページにリンクする場合は $base_path の代わりにこちらを使う。これには言語ドメインやプレフィックスが含まれる。 $logo: ロゴ画像へのパス。テーマ設定で定義されたもの。 $site_name: サイト名。テーマ設定で無効化された場合は空となる。 $site_slogan: サイトスローガン。テーマ設定で無効化された場合は空となる。

ナビゲーション:

$main_menu (array): サイトの Main menu のリンクを含む配列。設定されている場合のみ表れる。 $secondary_menu (array): サイトの Secondary menu のリンクを含む配列。設定されている場合のみ表れる。 $breadcrumb: 現在のページのパンくず。

ページコンテンツ:

  • $title_prefix (array): モジュールが作成した追加の出力を含む配列。メインタイトルタグの前に表示される想定のもの。
  • $title: ページタイトル。実際の HTML コンテンツとして使用するためのもの。
  • $title_suffix (array): モジュールが作成した追加の出力を含む配列。メインタイトルタグの後に表示される想定のもの。
  • $messages: 目立つところに表示されるステータスメッセージ/エラーメッセージの HTML 。
  • $tabs (array): 現在のページの配下にあるサブページにリンクするタブ(ノードページの場合の「ビュー」「編集」など)。
  • $action_links (array): ページローカルなアクション。メニュー管理ページの「メニューを追加」など。
  • $feed_icons: 現在のページのすべてのフィードアイコンの文字列。
  • $node: ノードオブジェクト。ページに関連したノードが自動で読み込まれる場合、ノード ID がパスの第 2 引数(例えば node/12345 node/12345/revisions/ など)の場合に表れる。

リージョン:

  • $page['help']: 動的なヘルプテキスト。通常管理者ページで出てくる。
  • $page['highlighted']: ハイライトされたコンテンツリージョンの項目。
  • $page['content']: 現在のページのメインコンテンツ。
  • $page['sidebar_first']: 最初のサイドバーの項目。
  • $page['sidebar_second']: ふたつめのサイドバーの項目。
  • $page['header']: ヘッダーリージョンの項目。
  • $page['footer']: フッターリージョンの項目。

node.tpl.php

利用できる変数:

  • $title: ノードのタイトル(サニタイズ済み)。
  • $content: ノードのアイテムの配列。すべてを描画したい場合は render($content) を使う。要素を指定して描画したい場合は render($content['field_example']) を使う。すべてを描画したいときに一部の要素を描画しないようにしたい場合は hide($content['field_example']) を使う。
  • $user_picture: ノードの作成者の写真。 user-picture.tpl.php から来たもの。
  • $date: フォーマットされた作成日時。フォーマットを変更したい場合は preprocess 関数内で $create 変数に対して format_date() を使うことで可能。
  • $name: テーマを適用した後のノードの作成者のユーザ名。 theme_username() から来たもの。
  • $node_url: 現在のノードの URL 。
  • $display_submitted: 投稿情報を表示するかどうかを表すフラグ。
  • $submitted: template_preprocess_node() で作成された $name$date で作られた投稿情報。
  • $classes: CSS を使ってスタイルをつけるのに利用できる class の文字列の集まり。 preprocess 関数の中で $classes_array 変数を通して変更することができる。
    • デフォルトの値は次のうちのひとつ以上からなる:
      • node: 現在のテンプレートタイプ。
      • node-[type]: 現在のノードタイプ。
      • node-teaser: ティーザー形式のノード。
      • node-preview: プレビューモードのノード。
    • ノードの投稿オプションによって次の値がつく:
      • node-promoted: ノードがフロントページに掲載されるものである。
      • node-sticky: ノードがティーザーのリストでページ上部に固定されるものである。
      • node-unpublished: ノードが管理者のみが閲覧できるものである。
  • $title_prefix (array): メインタイトルのタグの前に描画したい内容の配列。
  • $title_suffix (array): メインタイトルのタグの後に描画したい内容の配列。

その他の変数:

  • $node: 完全なノードオブジェクト。安全でないデータを含むことがある。
  • $type: ノードタイプ。例えば story page blog など。
  • $comment_count: ノードにつけられているコメントの数。
  • $uid: ノードの作成者のユーザ ID 。
  • $created: ノードが投稿された時刻。 Unix タイムスタンプ形式。
  • $classes_array: html の class 属性の値の配列。 $classes 変数に展開される。
  • $zebra: 「 even 」か「 odd 」のどちららかを出力する。ティーザーのリストで有用。
  • $id: ノードのポジション。出力される度にカウントアップされる。

ノードステータスの変数:

  • $view_mode: ビューモード。例えば「 full 」「 teaser 」など。
  • $teaser: ティーザー状態を表すフラグ( $view_mode == 'teaser' のショートカット)。
  • $page: フルページの状態を表すフラグ。
  • $promote: フロントページに掲載する状態を表すフラグ。
  • $sticky: 上位に固定の設定を表すフラグ。
  • $status: 掲載状態を表すフラグ。
  • $comment: ノードのコメント設定のフラグ。
  • $readmore: ノードのティーザーコンテンツがメインボディコンテンツを持てない場合に真となるフラグ。
  • $is_front: フロントページに掲載されているときに真となるフラグ。
  • $logged_in: 現在のユーザがログインメンバーであるときに真となるフラグ。
  • $is_admin: 現在のユーザが管理者である場合に真となるフラグ。

フィールドの変数:

ノードにつけられたフィールドインスタンスに対してそれぞれ対応する変数が定義されています。 例えば $node->body$body となります。 開発者/テーマ作成者がフィールドのローデータにアクセスする必要がある場合はこちらの変数を使うとよいでしょう。 その他の場合は、例えば $node->body['en'] というようにフィールドの言語を明示的に指定する必要があります。

block.tpl.php

利用できる変数:

  • $block->subject: ブロックタイトル。
  • $content: ブロックのコンテンツ。
  • $block->module: ブロックを生成したモジュール。
  • $block->delta: ブロックの ID 。各モジュールにおいてユニーク。
  • $block->region: 現在のブロックを含んでいるブロックリージョン。
  • $classes: CSS を使ってスタイルをつけるのに利用できる class の文字列の集まり。 preprocess 関数の中で $classes_array 変数を通して変更することができる。デフォルトの値は次のうちのひとつ以上からなる:
    • block: 現在のテンプレートタイプ。
    • block-[module]: ブロックを生成しているモジュール。
  • $title_prefix (array): メインタイトルのタグの前に描画したい内容の配列。
  • $title_suffix (array): メインタイトルのタグの後に描画したい内容の配列。

ヘルパー変数:

  • $classes_array: html の class 属性の値の配列。 $classes 変数に展開される。
  • $block_zebra: 各ブロックリージョンに依存して「 odd 」と「 even 」を出力する。
  • $zebra: $block_zebra と同じ出力を返す。ただしブロックリージョンには依存しない。
  • $block_id: 各ブロックリージョンに依存したカウンター。 Counter dependent on each block region.
  • $id: $block_id と同じ出力を返す。ただしブロックリージョンには依存しない。
  • $is_front: フロントページに表示される場合に真となるフラグ。
  • $logged_in: 現在のユーザがログインメンバーの場合に真となるフラグ。
  • $is_admin: 現在のユーザが管理者メンバーの場合に真となるフラグ。
  • $block_html_id: 正しい HTML ID 。ユニークであることが保証されている。

以上です。

冒頭にも述べましたが、今回取り上げた変数の中には活用シーンがかぎられるものもたくさんありますが、これらをひととおり押さえておくといざというときのテーマ開発の「困った!」をスムーズに解決できるかと思うので、ぜひ押さえてみていただければと思います。 Drupal のテーマ開発を行う方のリファレンスとしてお役に立てば幸いです。

Happy theming!