WEB/システム/IT技術ブログ

Smartyで関数includeをまるで逆転させたような活用方法

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

B!

Comment

コメントはありません

コメントする

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

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

Monthly Archives