https://www.smarty.net/docs/ja/plugins.modifiers.tpl
修飾子プラグインの作り方自体は、上記の公式ドキュメントに書かれてあるとおり。簡単なことしか書いてないのに難しく感じられるので、もう少し噛み砕いた説明をします。
修飾子プラグインを作る
<?php
function smarty_modifier_osakaben($string)
{
return str_replace('です。','やで。',$string);
}
上記のようなコードを書いて、modifier.osakaben.php というファイル名で任意のディレクトリ(※後述)に保存する。
- modifier.osakaben.php
- function smarty_modifier_osakaben($string)
修飾子プラグインの作り方としては、覚えるルールは基本的にこれだけ。次に、FuelPHPとの連携について説明します。
FuelPHPに設定を追加する
parser.phpを編集します。
'View_Smarty' => array(
'environment' => array(
'plugins_dir' => array(APPPATH.'smarty_custom_plugin/'),
),
),
smarty_pluginsというディレクトリに保存したとしたら、こんなふうに指定します。
あとはテンプレートのほうで、
<div>
{$content|osakaben}
</div>
こんなふうに書けば動作します。
説明終わり。
ちなみに、今回説明したようにファイルで作るのではなくて、FuelPHPのコントローラ内だけでレジストして完結させる方法もあって、それはまた機会があれば説明します。そのページの中だけでしか使わない処理は、ファイルを増やしたりしないでそのように実装するのがよいです。そうすれば、ああこの修飾子はこのページでしか使わないんだってことを暗黙的に示すこともできるし。
自作修飾子の保存ディレクトリについて
上記の説明では適当にsmarty_custom_plugin
などとしてますが、
APPPATH.'override/vender/smarty/libs/plugins/'
実務ではこんなふうにしてます。Smarty_Fuel_Extensionのディレクトリ構成に沿っています。
Smarty本体にプリセットされている修飾子について
Smartyではデフォルトで20種類くらいの修飾子が使えるようになっています。nl2br
とかstrip_tags
とか、便利なものは10種類くらい。他は・・・
日本語サイトではあまり使わない修飾子
- lower
- capitalize
- wordwrap
- count_words
あまり使いみちがない修飾子
- count_characters
- count_paragraphs
- count_sentences
どう便利なのかよく分からない修飾子
- cat
- indent
- spacify
catって文字列連結に使うみたいだけど、普通に文字列書けばよくない?修飾子を数珠つなぎにする場合に必要ってことかな。
あと、PHPの関数を修飾子として使えます。
修飾子は、上手に使うとテンプレートがすっきりします。たとえばSmarty_Fuel_Extensionではブロックプラグイン方式のヘルパとしてmarkdown変換を実装していたりしますが、テンプレート内で「ここから~ここまで」って指定するのはあまりスマートではない。修飾子として実装し、{$content|markdown}
というふうに書くほうがすっきりします。
余談ですが、修飾子という呼び方はあまりピンとこなくて、自分は勝手に「カスタムモディファイア」または「カスタムフィルター」などと呼んでます。
そもそもSmartyって
https://www.smarty.net/documentation
ドキュメントは英語・日本語・中国語の3つしか用意されていません。v2の頃は9カ国語対応でしたが、TwigやBladeの勢いに押されてユーザが減ってるってことかな。WordPress普及の影響で、ネイティブPHPをテンプレートエンジンっぽく使いこなせるからテンプレートエンジン使わない。って人も多少増えてると思います。