Smartyのタグって変更できるって知ってました? | 今日もWEB更新してたら

Smartyのタグって変更できるって知ってました?

http://smarty.php.net/manual/en/language.escaping.php


Smartyを使うとJavaScriptに{literal}{/literal}をつかうから不便だと。そういうブログを見たことがある。

なんで詳しく調べもしないでそういう事言うかなぁと、Smartyの制作者の不満が聞こえてきそう・・・



Example 3-7. changing delimiters example

<?php

$smarty
= new Smarty;
$smarty->left_delimiter = '<!--{';
$smarty->right_delimiter = '}-->';
$smarty->assign('foo', 'bar');
$smarty->display('example.tpl');

?>

Where example.tpl is:

<script language="javascript">
  var foo = <!--{$foo}-->;
  function dosomething() {
    alert("foo is " + foo);
  }
  dosomething();
</script>



このポイントはSmarty:delim変数を使う点。

上の例ではSmartyの特殊文字を 「<!--{」 「}-->」のペアに変更してる。これでJavaScriptやCSSにも邪魔されないですよね?


個人的にはASPやJSPで使うタグ <%%> にすることをオススメしたい。JSPが大好きだから。というかHTMLしか知らないデザイナーさんには<%%>が一番わかりやすい。


$smarty->left_delimiter = '<%';
$smarty->right_delimiter = '%>'
;




こうしておけばSmartyタグは{}から<%%>に変更されます。



--------------追記

<% %> を使うと PHP.ini allow_asp_tagの相性問題が出そうなのでそのうち調べておきます。

-------------追記2

Smartyのインスタンス毎にSmartyのASPタグを変えると楽しいことが出来ます。hatenaプラグインがやってるような独自Blogタグをに作ってしまえる。つまり、CMS提供元が提供するタグを "{" " }" のペアにしてユーザーがブログ入力に使うタグを "<tag:username" "/tag:username>" などと2つのタグをSmartyテンプレート内に共存させることが出来そう。


この応用は面白そうなので実際使ってみて、レポート書きます。