その6でも書いたようにメインコンテンツに関するブロックのデザインに関してはCSSの対応で事足りた。サイドバーと同じようにコンテンツごとにブロックに分けて表示するデザインも考えたが、そのデザインでは管理ページを表示した場合にブロック内に配置されるメニューやパンくずリストの表示に難がある。具体的には page.tpl.php でメインコンテンツに配置していたそれらを、node.tpl.php に引き込む必要がある。デザイン的にもPHPの効率的にも微妙という感じがするので、オーソドックスにボックスが下方に伸びていく形を維持した。
これでオリジナルデザインはほぼ完成である(現にこの時点でこのデザインを使うはずだったサイトに実装して試験運用をおこなっている)。
あとは運用しつつ各コンテンツを表示した際に生じる"ずれ"を補正していけばいいだろう。
page.tpl.php
block.tpl.php
style.css
メインとなる page.tpl.php の30行目と45行目あたりのPHPコードを見てほしい。
page.tpl.phpの30行目付近
<div id="header-block">
<?php
$host_name = $_SERVER['HTTP_HOST'];
if ($logo) {
print '<a href="'. check_url($front_page) .'" title="'. $host_name .'"><img src="'
. check_url($logo) .'" alt="'. $host_name .'" width="48" height="48" /></a>';
}
print ('<p><a href="'. check_url($front_page) .'" title="' . $host_name
.'">'.$host_name."</a></p>\n");
?>
<?php print $header; ?>
</div>45行目付近
<?php
if ($title) {
print '<h2 class="title">'. $title ."</h2>\n";
} elseif ($is_front) {
print '<h2 class="title">Update & News</h2>'."\n";
}
?>このあたりが個人的に気になるところだ。なんといえばいいか、スマートではないといった感じか。他のPHPコードがたいてい一行で収めている(無理やりに押し込んでいるところもあるが)のに対して、この部分の均整が取れていないように感じてしまうのだ。
機能的にまったく問題ないので好みの問題といえなくもないが、公式の Drupal ハンドブックではこのような場合テンプレート内に長ったらしいコードを置くのではなくプリプロセッサ内で処理させた方がより洗練されていると述べている。
ではプリプロセッサとはどういったものか?早い話がテーマテンプレート(.tpl.php)内で使用可能な変数や関数を定義する場所(ファイル)ということである。他のテンプレートファイル同様に既定のファイル名が存在し、その名称でファイルを作成しテーマディレクトリ内に配置すれば、自動的にプリプロセスコードとしてシステムに組み込まれる。ファイル名はtemplate.php だ。さらに詳細な情報が必要な場合は Beginners guide to overriding themable output やSetting up variables for use in a template (preprocess functions) を参照してほしい。
それでは template.php ファイルを作成し、上記の2つのコードを変数、または関数化してHTMLコードの見通しを良く(ある意味では悪く)してみよう。
その8につづく。
Recent comments