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の出力結果が改行されます。