You are here

テーマの作成 その6

その5で、page.tpl.php はほぼ完成し、機能やページの表示は問題なくおこなえるところまで来た。

ただ、当初のデザインとして意図していたものとデフォルトのサイドバーの出力が違っていたため、出力されるブロックのコードを変更するべく新たに、block.tpl.php を作成した。

block.tpl.php
<?php /* MnM Design block template */ ?>
<div class="block-header<?php if (!$block->subject){print '-short';}  ?>">
  <?php ($block->subject)? print "<h2>". $block->subject . "</h2>\n": print "<p>&nbsp;</p>\n"; ?> </div>
<div id="block-<?php print $block->module .'-'. $block->delta; ?>" class="block block-<?php print $block->module; ?>">
  <div class="content">
    <?php print $block->content."\n"; ?> </div> </div> <div class="block-footer">&nbsp;</div>

短いが、ブロックの外枠のみなのでこんなものである。

block.tpl.phpで使用できる内部変数に関しては、block.tpl.php を参照してほしい。テンプレートによって出力されるコード(ここでは各ブロック)の概要がわかっていれば使用できる変数はそれに関連するものしかないので、大体分かってくる。

この block.tpl.php を組み込んで出力したページが下の画像になる。
ページスナップショット3
サイドバーに表示されるコンテンツが各ブロックごとに独立して表示されるようになった。

小技として、ブロックのタイトルが非表示の場合はテンプレート内でスタイルの指定を変更し、それによってブロック部のヘッダーの長さを短いものに切り替えるようにしている。テンプレート内で直接HTMLコードを生成するようにしても良かったが、CSSでできることはなるべくCSSにやらせたほうがメンテナンス性がよくなる。またテンプレート内のphp実行による負担はできる限り避けた方が良い(CSSの解釈によるページのレンダリングはローカル(ブラウザ)側の処理なので、phpでHTMLを書き出してデザインを変更するよりは、CSS側でデザインを切り替えたほうが良い)。

プライマリメニューの表示についてもCSSでデザインの変更を加えてみた。Drupal が出力するコードには手を加えていない。もっとも、ヘッダーregion に表示される部分のみの対応だが。

プライマリメニューのデザイン変更にあわせてセカンダリメニューを使用不可にしてみた。サイトのコンテンツ内容から当分使用しないと判断したためである。.infoファイル内の features セクションから secondary_links の項目をコメントアウトする。これだけで、メニュー設定画面にはセカンダリメニューの項目が出なくなる。

各ソースを添付しておく。
page.tpl.php
style.css
block.tpl.php

ソースがかなりスパゲッティ状態だが、完成した時点でクリーンアップをおこなうのでいまのところは容赦していただきたい。そしてblock.tpl.php をテーマに追加した際はキャッシュのクリアを忘れないように。これはテーマレジストリ(ページの内容ではなくテーマの構成内容)がDrupal にキャッシュされるせいで、キャッシュをクリアしないと何度再読み込みしてもデフォルトのままになってしまう。キャッシュのクリアは以下のどれかをおこなえばいい。

  1. "管理セクション>サイトの環境設定>パフォーマンス"ページにある"キャッシュデータのクリア"を使う。
  2. devel block を有効にし (devel module に付属しています)、"Empty cache" リンクをクリックする。
  3. 単純にテーマセレクトページ "管理セクション>サイト構築>テーマ" から再設定する。

 さて、残るは、メインコンテンツ部分だ。block.tpl.php と同じようにこの部分もデフォルトのテンプレートnode.tpl.php に手を加えてもいいが、機能的にとくに過不足はないので、page.tpl.php の修正とスタイルシートの対応で何とかなりそうである。

その7につづく。