CMS構築を目的にPHPをベースとしたWordPress、CakePHPやPEARなどオープンソースを中心に解説しています

Smartyでテンプレートを作る場合に、どの部分までテンプレート化するか設計が重要になってきます。
可能な限りテンプレート化することによって、更新作業が楽にはなりますが、一方で柔軟性に欠けるサイトになったりします。急にテンプレートの一部を切り替えたいなど要望があると、テンプレート構成を見直すなど、大改修になることもしばしばです。
そこでSmartyでは、予めテンプレートを細分化し、テンプレートでテンプレートを読み込む構成を組むことができます。例えば、親となるテンプレートを以下のように記述します。

{include file='header.tpl'}
{include file='sidemenu.tpl'}
コンテンツコンテンツコンテンツ
{include file='footer.tpl'}


それでも、コンテンツ部分を変更したいなどで、上記のテンプレートをテンプレート1とテンプレート2に分けたり。。。運用する上でテンプレートが増えてゆき、管理が難しくなることも。

一番の問題点は、本来テンプレートエンジンは、コーディングとプログラムを明確に分け、デザイナとプログラマの作業を分割する目的があるのですが、こういう複雑なテンプレート構成になると、デザイナが触れなくなるということです。

そこで、今回、逆な発想でテンプレートを組み込んでみました。いや「逆」とは言わないかな。。。

簡単に説明すると、SmartyテンプレートをSSIのように使います。
テンプレートにincludeを記述するのではなく、以下のようにphpからテンプレートを呼び込む「$smarty->display()」を複数回コールします。

<?php $smarty->display('header.tpl'); ?>
<?php $smarty->display('sidemenu.tpl'); ?>
コンテンツコンテンツコンテンツ
<?php $smarty->display('footer.tpl'); ?>

PHPプログラムの記述を外部に置くことで、見た目の構成はほぼSSIと一緒なので、デザイナさんでもこのファイルを編集できると思います。また、コンテンツ毎にファイルが分かれているので、前者のようにコンテンツ部分に変更があっても問題ないですね。

一概にこの方法が良いとはいいませんが、場合によってはこういう構成もありなんじゃないでしょうか。

それにしてもdisplay関数って一度しか使えないと思ってました。。。

このエントリーをはてなブックマークに追加

Comment

Comment Form

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Monthly Archives

Search