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関数って一度しか使えないと思ってました。。。
コメントする