にゃあ

Smarty2.0からSmarty3.0への変更点

Smarty3.0のパッケージに入っている、SMARTY2_BC_NOTESを和訳してみた。

分かっているSmarty2との非互換性

シンタクス

Smarty 3 APIはシンタクスが新しくなりました。Smarty2のシンタクスはサポートしますが、将来サポートが保証されない可能性があります。

PHPのバージョン

Smarty3はPHP5のみ対応します。PHP4では動きません。

{php}タグ

{php}タグはデフォルトでは無効になりました。{php}タグを使うことは非推奨です。$smarty->allow_php_tag=true;{php}タグを有効にすることができます。

しかし、複数の{php}タグにまたがるPHPコードは、これ以上は動かないでしょう。

デリミタとホワイトスペース

ホワイトスペースに囲まれたデリミタは今後、Smartyのタグとして扱われません。したがって、{ foo }はタグとしてコンパイルされません。この場合、コンパイルするには{foo}とする必要があります。この変更により、{literal}が必要とならないので、Javascript/CSSが扱いやすくなります。なお、$smarty->auto_literal = false;でこの設定を無効化できます。

クォートされなかった文字列

Smarty2は、パラメータにクォートしていない文字列が現れたとき、大雑把で曖昧な面がありました。一方、Smarty3はより厳密です。といっても、特別な文字(A-Za-z0-9_以外)を含まない限り、今でもクォーテーションなしの文字列を使うことはできます。

例えば、ファイル名の文字列はクォートしなければなりません。

{include file='path/foo.tpl'}

Smartyクラスの拡張

Smarty3は初期化するのに、__constructメソッドを使います。Smartyクラスを拡張するとき、もし、小クラスが独自のコンストラクタを定義すると、Smartyのコンストラクタは実行されません。Smartyのコンストラクタを実行する必要があれば、小クラスのコンストラクタでparent::__construct()を実行してください。

class MySmarty extends Smarty {
   function __construct() {
       parent::__construct();
    
       // your initialization code goes here

   }
}

オートローダー

Smarty3はspl_autoload_registerで独自のオートローダーを登録します。もしあなたのコード中に__autoload関数が存在するのなら、 それを明示的に__autoloadスタックに登録しなければなりません。 詳しくは、http://us3.php.net/manual/en/function.spl-autoload-register.php を御覧下さい。

プラグインファイル名

Smarty3ではPHP spl_autoloaderをサポートしています。このオートローダーは、ファイル名を小文字にすることを要求しています。したがって、Smartyプラグインのファイル名は小文字である必要があります。Smarty2では、大文字小文字が混在したファイル名でも動作しました。

特別なSmarty変数のスコープ

Smarty2では特別なSmarty変数(例えば、$smarty.section...$smarty.foreach)がグローバルスコープでした。もし、同じ名前のループがサブテンプレートにあると、親テンプレートの変数を上書きしていまします。

Smarty3では特別なSmarty変数は、ループがあるテンプレートのローカルスコープになります。もし、親テンプレートの変数をサブテンプレートに渡す場合は、パラメータにする必要があります。

{include file='path/foo.tpl' index=$smarty.section.foo.index}

SMARTY_RESOURCE_CHAR_SET

Smarty3はutf-8をデフォルトcharsetとして、定数SMARTY_RESOURCE_CHAR_SETに定義します。これは、escapeのような修飾子のデフォルトcharsetとして使われるようになります。もし、utf-8以外のcharsetをテンプレートで使う場合、適宜にSMARTY_RESOURCE_CHAR_SETを定義することに注意してください。そうしなければ、なにも出力されない可能性があります。

改行での{if}タグ

テンプレートのソースに予期される改行の出力を得るために、{if},{else},{elseif},{/if}タグのコンパイル後コードに¥nが追加されました。もし、{if}タグなどが行末にある場合、HTMLの出力結果が改行されます。


コメント&トラバ

トラックバックを送る

無関係なスパムのトラックバックを防止するため、リンク先で本サイト(suin.asia)への言及が確認されないトラックバックは破棄しています。

トラバURL : http://suin.asia/trackback/444

コメントを書く

お名前* URL
本文*
合い言葉* ←「inchopapen」と入力して下さい。
* この記事の話題と関係ないコメントはどんな内容でも削除します。(移動できないので)

トラックバック

トラックバックがないのはさみしいにゃん…。

コメント

よしくん(2010.03.29) #
smarty3についての日本語の記事が
webで探しても少ないので 参考になります。

$smarty->allow_php_tag=true;
$smarty->auto_literal = false;
で試してみたんですが シンタクス エラーが
相次いでいます。

まだ変更点がよくわかりませんね。

このブログの著者


Suinと申します。

@suin on Twitter

サブメニュー

最近気になるモノ!

WindowsからMacに乗り換えて半年ですが、Macは細かいところまで丁寧に作られていて、親切なユーザーインターフェイスが気に入ってます。iMacはMagic Mouseと洗練されたデザインのBluetoothキーボードがついてくるので、お得だなあ、なんて思ってます。私に買ってもいいという方、いたら教えてください 笑。

最近のエントリ

XOOPS Cube Dev Ring

最近のコメント

最近のトラックバック

ひとりで喜ぶログ
デュラララに登場するチャットを再現した (04/09)
ひとりで喜ぶログ
デュラララに登場するチャットを再現した (03/28)
http://www15.atpages.jp/~classicalstudio/wordpress/?p=50
getcwd()とdirname(__FILE__)は違う結果になるときがある (12/22)
Re:
CSSのtext-align:center;は<div>には通用しない (12/15)
XOOPS専門-株式会社RYUS - d3blog
Shiori 1.02 (12/02)
9deMaio.com - blog
Koins 1.00 (11/11)
インターネット覚え書き「ビボウログ」
CSSのtext-align:center;は<div>には通用しない (09/16)
hinoeuma1966
CSSのtext-align:center;は<div>には通用しない (07/03)
Suin.org
ブログ作ってみた (03/23)
Suin.org
ブログ作ってみた (03/23)