Smarty用の拡張プラグインを作成する手順を示す。
目的:PHPのstrip_tagsに相当する修飾子を作成すること
Smartyのデフォルトの修飾子に、「strip_tags」というものがある。
文字列から、マークアップタグを取り除く修飾子であり、
タグ付きの不正な出力を避けるにはこれを利用するのが通例である。
けれども、これでは"ある特定のタグを許可したい"という要求に応えられない。
PHPのstrip_tags関数では第2引数で指定したタグを許可できるので、
これを利用して、Smartyのプラグインとして実現することにした。
実装方法:Smartyのマニュアルが秀逸(超平易な説明!!)
まず、プラグインファイルの命名規則に従い、
ファイル名を決定する。
type.name.php
- type は次のプラグインタイプのうちのいずれか1つです。
- function
- modifier
- block
- compiler
- prefilter
- postfilter
- outputfilter
- resource
- insert
- name には英数字とアンダースコアのみ使用できます。 PHP の変数 を参照してください。
とのことであり、ここで作成するのは修飾子(=modifier)であるので、typeは"modifier"。
また、strip_tagsの拡張なので、nameはextended_strip_tagsとしておく。
すなわち、今回作成するファイル名はmodifier.extended_strip_tags.phpとする。
また、プラグイン関数の命名規則は、
ファイル内で定義する プラグイン関数 は次のように指定します。
- smarty_type_name()
とのことなので、この場合はtypeとnameがそれぞれ"modifier"と"extended_strip_tags"なので、
プラグイン関数はsmarty_modifier_extended_strip_tags()となる。
繰返すと、modifier.extended_strip_tags.phpにsmarty_modifier_extended_strip_tags()を定義して、
プラグインとするわけである。
実装内容:やはりSmartyマニュアルを読みながら
今回のケースではこんな感じ。
$ cat /usr/share/Smarty/plugins/modifier.extended_strip_tags.php
<?php/**
* Smarty plugin
* @package Smarty
* @subpackage plugins
*//**
* Smarty strip_tags modifier plugin
*
* Type: modifier
* Name: extended_strip_tags
* Purpose: strip html tags from text except limited tags
* @link http://mahata.net
* @author Yasunori Mahata
* @param string
* @return string
*/function smarty_modifier_extended_strip_tags($string)
{
return strip_tags($string, "<a><b><em><strong><param><embed><object>");
}
?>
objectとかembedとか許可していいの??
つーのはまた別な話。
普通、そういうタグは設定に逃がすべきだろ??
つーのもまた別な話。
プラグインファイルの配置
<?php
require_once $smarty->_get_plugin_filepath('function', 'html_options');
?>
ただし、毎回これを呼び出すのは面倒臭いので、
一般にSmartyのpluginsディレクトリに配置する方がラクチン。
俺のところの環境(FedoraCore5でyumによるインストール)だと
"/usr/share/Smarty/plugins"にある。
なお、同ディレクトリにデフォルトプラグインのソースファイルが沢山あるので、
実装の際に参考にすると良い。
プラグインの適用
こんな感じ!!
{$long_long_strings|extended_strip_tags}
Enjoy MVC Modeling with Smarty Hacking!!

Leave a comment