スポンサーサイト
-------- --:--
SmartyのメジャーバージョンアップSmarty3のBETAが煮詰まってきた感じなので試してみました。BETAなので機能は変更されるかもしれません。
まずソースを眺めて最初に気づくのは本体であるSmarty.class.phpが異様に小さいことです。assignやdisplayといったメソッドさえも見当たりません。個々の機能は小さなクラスに分かれていて、いわゆるLazy load(遅延ロード)をとりいれているようです。必要の無い機能は読み込まないというわけです。
smarty:nodefaultsはどうするのかというと
public function __construct($tmplPath = null, $extraParams = array())
{
$this->_smarty->loadPlugin('smarty_modifier_escape');
//$this->_smarty->register_variablefilter(array($this, 'escape'));
//release8で_を使ったメソッド名は廃止されました。
$this->_smarty->register->variableFilter(array($this, 'escape'));
}
public function escape($value, $smarty)
{
if(is_string($value))
{
return smarty_modifier_escape($value);
}
else
{
return $value;
}
}
nofilterをつけます。
{$form.name->render() nofilter}
メソッドがあってうまい具合に配列に変換してくれるので使うと良いかもしれません。ちなみに、互換を保つためかメンバ変数はpublicのままで名前も同じです。
public function setScriptPath($path)
{
$this->_smarty->setTemplateDir($path);
}
{$record->getCategory()->getName()}
{$record->getArticle('3 days')}
配列のキーやカウントなどは、@でキーワードをつないで出せます。
{foreach $list as $item}
{$item->geName()}
{$item@key} / {$item@iteration} / {$item@total} / {$item@index} / {$item@first} / {$item@last}
{/foreach}
{$var = 'test'}
{$var = 'test'}
{$foo_{$var}}//$foo_testを表示します
{time()}
独自関数(スタティックメソッド)もいけます。デバッグ表示する場合はこんな感じ
{Sdx_Debug::dump('hoge', 'title', false) nofilter}
これはすごいですね。
{time()}
{time() nocache}
child.tplに
{block name='title'}My site name{/block}
{block name='page-title'}Default page title{/block}
{block name='content'}
Default content
{/block}
grandchild.tplに
{extends file='parent.tpl'}
{block name='title'}
Child title
{/block}
ヘッダーフッター、メニューなどを共有する時に便利そうです。symfonyっぽいベーステンプレートが実現できます。
{extends file='child.tpl'}
{block name='title'}Home - {$smarty.parent}{/block}
{block name='page-title'}My home{/block}
{block name='content'}
{foreach $images as $img}
{/foreach}
{/block}
{function name=menu level=0}