PHPでSmartyを活用されている方は多いかと思いますが、
何年もたって「実はこんな機能があったのか~!」と後から
気づくことが多々あります。
今回は私がもっと前に知っておけば良かったと
思う機能を中心にいくつかご紹介します。
テンプレート内で定数を使用する
PHPでdefineされた定数をテンプレートで使用したい場合、
-
{$smarty.const.XXXX}
でアクセスできます。(XXXX は定数名)
-
{if $smarty.const.XXXX == 'ABC'}
-
-
{/if}
なんて書き方もできます。
PHPの組み込み関数を使用する
PHPの組み込み関数はそのまま修飾子として使用できます。
-
{$str|trim}
これで$strに対してtrim関数があたります。
-
{$str|strip_tags}
-
{$str|strtoupper}
-
{$str|mb_strlen}
-
{$str|rtrim:"/"}
-
{$str|htmlspecialchars:$smarty.const.ENT_QUOTES}
などなどいろんな応用が考えられますね!
修飾子に渡すパラメータがそのまま関数の
第二引数以降への引数になります。
関数プラグインに対して修飾子を適用する
実は、修飾子は変数だけでなく関数に対しても適用できます。
{func}という関数プラグインと、
|mod という修飾子プラグインがあるとします。
-
{func arg=$aaa}
という関数があった場合、
-
{func|mod:aaa arg=$aaa}
という書き方で関数の結果に対してmod修飾子を
あてることができます。
また、
-
{func arg=$aaa|mod:aaa}
とすれば引数に対して修飾子を個別にあてることができます。
ブロック関数は
-
{block}
-
-
{/block|mod:aaa}
でOK! (閉じタグにあてるのがポイント)
これは便利です。
テンプレートパス、プラグインパスを複数使用する
通常Smartyを使う場合、
-
require_once(SMARTY_DIR.'Smarty.class.php');
-
-
$smarty = new Smarty();
-
-
$smarty->template_dir = '/path/templates/';
-
$smarty->compile_dir = '/path/templates_c/';
-
$smarty->config_dir = '/path/configs/';
-
$smarty->cache_dir = '/path/cache/';
こんな感じで設定するかと思いますが、
実はこのプロパティ、配列も受け付けます。
-
require_once(SMARTY_DIR.'Smarty.class.php');
-
-
$smarty = new Smarty();
-
-
$smarty->template_dir = array(
-
'/path/templates/',
-
'/path/common_templates/');
-
$smarty->config_dir = array(
-
'/path/configs/',
-
'/path/common_configs/');
-
$smarty->compile_dir = '/path/templates_c/';
-
$smarty->cache_dir = '/path/cache/';
こんな感じで配列を渡せば、
include_pathに指定したかの様に、
その順番でファイルの読み込みを行ってくれます。
共通でよく使うテンプレートなどを、
この方法でシステム間共有するととても便利です。
また、plugins_dir も配列で指定できます。
configのiniファイルで使える拡張文法
Smartyでは設定ファイルとしてiniファイルを読む機能があります。
-
$smarty->config_load('config.ini');
読み込んだiniファイルの値は、テンプレート内で
-
{#var#}
として参照できます。
iniファイルは文法がとても簡単なので、デザイナーと協業するときなどに
商品名や住所など変わる可能性があるものを
iniファイルで管理しておくととても便利です。
実はこのiniファイル、PHPの組み込み関数である
parse_ini_file関数を使っていません。
Smartyのインストールフォルダにある、
Config_File.class.php というクラスで、
自前でiniファイルを解析しているのです。
なぜそんなことをしているのか?
おそらくですが、PHPのparse_ini_file関数には
致命的な欠点があって、変数の値に
ダブルクォーテーションが使えないのです。
parse_ini_fileでダメな例
-
var = '<div style="color:red">重要</div>'
これはエラーになってしまいます。
SmartyのConfig_File.class.phpを使うとこの記述で
ちゃんと意図通りに取得できます。
また、"""~"""という書き方をサポートしています。
-
var = """<html>
-
<body onload="init()">
-
テスト
-
</body>
-
</html>
-
"""
こうすれば、変数の中に改行でも " でも ' でも
自由に含めることができてとても便利です。
おそらく、SmartyのiniファイルはHTMLタグを含む可能性があるので、
自前でiniファイルを解析するライブラリを持っているのだと思います。
このiniを解析するライブラリは他でも活用できるので、
単体で読み込んで使っても便利です。
知らないものはありましたか?
他にも何か「もっと前に知っておきたかった!」と思うようなものが
あれば、是非コメントで教えてください!
関連した記事:
■ 「日本でいちばん社員満足度が高い会社の非常識な働き方」
この記事へのコメント (0)
コメントはまだありません。


















ページの先頭に戻る
コメントを投稿