テーマ変数(page.tpl.php)
各テンプレートファイルでは、動的な内容を表示するために $variable のような変数を使用することができます。
変数にセットされた内容を出力するためには、該当する箇所に <?php print $variable; ?> と、PHP コードで記述する必要があります。
また、if 条件式などを使うことで、表示内容をコントロールすることも可能です。
以下が page.tpl.php で使用可能な変数と返される内容になります。
変数が返す値は、導入しているモジュールや適用している日本語翻ファイルなどの環境によって異なる場合もあるかもしれません。
サイトの設定内容や状況を表す変数
<head> や <body> 部分に出力するだけでなく、設定内容による条件分岐にも使用できます。
- $base_path
- ベースとなる URL を相対パスで返します。 通常 "/" のみが返されます。
- $language
- [管理セクション] → [ローカライズ] でデフォルトに設定してある "ja" "en" などの言語コードを返します。
- $is_front
- 現在のページがフロントページかどうかを "TRUE" または "FALSE" で返します。
- $layout
- サイドバーの有無に応じて、"none" "left" "right" "both" を返します。
- $directory
- "themes/" や "site/all/themes/" などのすべてのテーマディレクトリを示します。
drupal_system_listing('^page\.tpl\.php$', $directory, 'filename')のように、pege.tpl.php の存在を判定するような場面で使用します。
<head> ~ </head> タグ内で使用する変数
<head> 部分に出力します。Drupal を正しく動作させるためにはすべての内容を出力する必要があります。
- $head
- meta タグや link タグなど
drupal_set_html_head()で設定された内容を返します。
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <link rel="shortcut icon" href="/misc/favicon.ico" type="image/x-icon" /> - $styles
- style タグと、読み込む CSS について
drupal_add_css()で設定された内容を返します。
<style type="text/css" media="all">@import "/themes/garland/style.css";</style> - $scripts
- script タグと、読み込むファイルやコードなど
drupal_add_js()で設定された内容を返します。
<script type="text/javascript" src="/misc/drupal.js"></script> - $head_title
- title タグの内容となる内容を "コンテンツタイトル | サイト名" のような形式で返します。
<body> ~ </body> タグ内で使用される変数
基本的に body タグ内で使用されることが多いですが、head タグ内でも使用できます。
変数は省略することもできますが、省略するよりは などでの条件分岐で出力のコントロールを行う方が正しい動作になると思います。
- $logo
- [管理セクション] → [テーマ] → [設定] で設定したロゴのパスを返します。img タグなどは含みません。
- $site_name
- [管理セクション] → [サイトの環境設定] → [サイト情報] で設定した 「名前」 の内容を返します。
- $site_slogan
- [管理セクション] → [サイトの環境設定] → [サイト情報] で設定した 「スローガン」 の内容があれば、その内容を返します。
- $breadcrumb
- パンくずリストとして取得できる内容があれば、その内容を返します。
<div class="breadcrumb"> <a href="/">ホーム</a> » <a href="/blog">ブログ</a> » <a href="/blog/1">マイブログ</a> </div> - $mission
- [管理セクション] → [サイトの環境設定] → [サイト情報] で設定した 「ミッション」 の内容があれば、その内容を返します。
ミッションに入力する内容には HTML タグも利用できますので、入力内容を確認した上でテンプレートにセットする必要があります。 - $title
- 単一ページで表示されるタイトルを返します。テキストのみでリンクはありません。
ティーザリストなどに表示されるリンクを含めたタイトルは、node.tpl.php で設定します。 - $tabs
- コンテンツの「表示」「編集」タブや、管理セクションで表示されるタブの内容などを返します。
<ul class="tabs primary"> <li class="active"><a href="/admin/build/block" class="active">リスト</a></li> <li><a href="/admin/build/block/add">ブロックの追加</a></li> </ul> <ul class="tabs secondary"> <li class="active"><a href="/admin/build/block" class="active">garland の設定</a></li> <li><a href="/admin/build/block/list/bluemarine">bluemarine の設定</a></li> <li><a href="/admin/build/block/list/chameleon">chameleon の設定</a></li> <li><a href="/admin/build/block/list/pushbutton">pushbutton の設定</a></li> </ul> - $help
- ヘルプテキストを返します。
ヘルプテキストは、管理セクションなどで表示される、設定内容などに関する説明です。
<div class="help"> <p>..........</p> <div class="more-help-link"> [<a href="/admin/help/foo">さらに詳しく...</a>] </div> </div> - $messages
- システムメッセージを返します。メッセージの種類に応じた class が割り当てられています。
<div class="messages status">設定が更新されました。</div> <div class="messages error">「題名」フィールドは必須です。</div> - $content
- コンテンツや管理セクションでの内容を返します。
コンテンツのティーザーリストや単一ページでは node.tpl.php の内容が返されます。
ブロックの表示領域であるコンテンツ部の内容や、ページャーなども含まれます。 - $node
- page.tpl.php でコンテンツのティーザリストを表示せず、単一のページとして表示するような設計を行う場合などに使用できます。通常は node.tpl.php で使用されます。
- $feed_icons
- フィードアイコンとフィードページへのリンクを返します。
<a href="http://example.com/rss.xml" class="feed-icon"> <img src="/misc/feed.png" alt="コンテンツの配信" title="コンテンツの配信" width="16" height="16" /></a> - $primary_links
- [管理セクション] → [メニュー] で、プライマリリンクが設定されている場合、その内容を配列として返します。
そのまま出力した場合、"Array" のようになってしまいますので、<?php print theme('links', $primary_links); ?>や<?php print theme('menu_links', $primary_links); ?>のようにセットする必要があります。
それぞれの出力内容は以下のようになります。
# <?php print theme('links', $primary_links); ?> の場合 <ul> <li class="first menu-1-1-2"><a href="/" class="menu-1-1-2">Home</a></li> <li class="menu-1-2-2"><a href="/about" class="menu-1-2-2">About</a></li> <li class="last menu-1-3-2"><a href="/contact" class="menu-1-7-2">Contact</a></li> </ul> # <?php print theme('menu_links', $primary_links); ?> の場合 <ul class="links-menu"> <li><a href="/">Home</a></li> <li><a href="/about">About</a></li> <li><a href="/contact">Contact</a></li> </ul> - $secondary_links
- [管理セクション] → [メニュー] → [環境設定] で、セカンダリリンクが設定されている場合、その内容を配列として返します。
詳細については $primary_links の内容と同様です。 - $search_box
- [管理セクション] → [テーマ] → [設定] で検索ボックスの表示が有効になっている場合に、検索ボックスを返します。
<form action="/search/node" method="post" id="search-theme-form"> <div> <div id="search" class="container-inline"> <div class="form-item"> <input type="text" maxlength="128" name="search_theme_form_keys" id="edit-search-theme-form-keys" size="15" value="" title="検索したいキーワードを入力してください" class="form-text" /> </div> <input type="submit" name="op" id="edit-submit" value="検索" class="form-submit" /> <input type="hidden" name="form_token" id="edit-search-theme-form-form-token" value=".........." /> <input type="hidden" name="form_id" id="edit-search-theme-form" value="search_theme_form" /> </div> </div> </form> - $header
- ヘッダ領域にに表示設定されたブロックの内容を返します。
ブロックのテンプレートである block.tpl.php の内容を確認した上でテンプレートにセットする必要があります。 - $sidebar_left
- 左サイドバー領域に表示設定されたブロックの内容を返します。
ブロックのテンプレートである block.tpl.php の内容を確認した上でテンプレートにセットする必要があります。 - $sidebar_right
- 右サイドバー領域に表示設定されたブロックの内容を返します。
ブロックのテンプレートである block.tpl.php の内容を確認した上でテンプレートにセットする必要があります。 - $footer_message
- [管理セクション] → [サイトの環境設定] → [サイト情報] で設定した 「フッタメッセージ」 の内容があれば、その内容と、フッタ領域に表示設定されたブロックの内容を合わせて返します。
フッタメッセージに続けて、フッタブロックの内容が表示されます。
フッタメッセージでは HTML タグが利用できますので、フッタメッセージに入力した内容と、ブロックのテンプレートである block.tpl.php の内容を確認した上でテンプレートにセットする必要があります。 - $closure
- JavaScript のコードなど
hook_footer()で設定された内容があれば、その内容を返します。
通常は </body> タグの直前にセットします。
トラックバック
トラックバックは承認後に表示されます。
URLから "-nospam" を削除してトラックバックを送信してください。
コメント
add_css?
2007-06-20(水) 03:22 - amayadori@drupa...いつも、有用なドキュメントをありがとうございます。
「<head> ~ </head> タグ内で使用する変数」の
の部分、drupal_add_js()はdrupal_add_css()ですかね?
このドキュメント群を参考にしてテーマデザインの自作などしてみようかな・・・などと企んでいますが、企んでいるだけで実行されるのかどうかは未知数(笑)
デザインセンスのある人はいいですね(^-^;△フキフキ
うらやましい限りです。
drupal_add_css() です...
2007-06-20(水) 11:03 - 0829$styles ですからね。 drupal_add_css() ですよね。
コピペ後の再確認、自分ではちゃんとしたつもりでしたが、やはり...ですね。 いつもありがとうございます。