2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Smartyを組み込んだFuelPHP環境に自作の修飾子プラグインを追加する

Last updated at Posted at 2018-12-29

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をテンプレートエンジンっぽく使いこなせるからテンプレートエンジン使わない。って人も多少増えてると思います。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?