smarty

smarty2からsmarty3に移行する際の注意点

今更Smarty…って思わないことはないのですが使われているので仕方が無い
せめて2系から3系にアップグレードできないかなと思って軽い気持ちで試したら3日ほどハマりましたよ

Download | Smarty

Smartyクラスを使わずに互換用のSmartyBCを使う

~~~
$this->_smarty = new Smarty();
~~~

~~~
require_once ‘Smarty/libs/SmartyBC.class.php’;
$this->_smarty = new SmartyBC();
~~~

もっと簡単に書くにはextendsして__constructを使う

~~~
class MySmarty extends SmartyBC {
function __construct() {
parent::__construct();
$this->allow_php_tag = false;
}
}
~~~

{php}タグを使いたいとき

allow_php_tagを有効にする

~~~
$this->_smarty->allow_php_tag = true;
~~~

{include_php}タグを使いたいとき

{include_php file=$php_path}とすると変数が展開されずに動かないので
include_php_exというプラグインを新たに作るほうが手っ取り早いです

function.include_php_ex.phpの中身は超適当に書くとこんな感じ
~~~
trigger_error(“{include_php} file ‘”. $params[‘file’] .”‘ is not readable”, E_USER_NOTICE);
}
include_once $params[‘file’];
}
~~~

SmartyCompilerException

Smarty3はテンプレートの書き方が厳密になりこのエラーが出まくりますのでテンプレートを頑張って直しましょう…
エラー内容 PHP Fatal error: Uncaught exception ‘SmartyCompilerException’ with message ‘Syntax Error in template

■具体的にダメな記述
不要な`(バッククオート)
~~~
☓ {assign var=var value=`$arrVal[num]`}
◯ {assign var=var value=$arrVal[num]}~~~

“(ダブルクオートが足りない)
~~~
☓ {section name=d loop=`$levdiff*-1`}
◯ {section name=d loop=”`$levdiff*-1`”}~~~