Read it later.

Web製作に関するサーバ構成やコーディングネタの備忘録として使ってます。

*

Smarty2からSmarty3へのアップグレードガイド

      2011/05/20

Smarty2を以前から愛用していたのだけど、Smarty3にそろそろ移行しようかと思ってサイトを見てみると、
Smarty2へのユーザに対するプログラムの移行ガイドが翻訳されていなかったので、
Smartyマニュアルサイトの「Smarty 2->3 upgrade notes」の和訳にチャレンジしてみました。
たった100行ほどの英文だけど、訳すのに結構な時間が掛かってしまった。
やってみて改めて痛感したのだけど、PHPマニュアル等、ほんと翻訳者に対して敬意と感謝を感じます。
やってる最中に、SMARTY2_BC_NOTESの和訳が記載されているページを見つけたので、参考にしながら進めたのだけど、細部がやっぱりちょっと異なっていた。PHPの仕様を確認しながらやっていたので、ちょうど足して2で割れば一番正しい翻訳にたどり着けるかもしれません。
あくまで翻訳の練習なので、間違っていても自己責任ということで。もし誤りがあればご指摘頂けると嬉しいです。

Smarty 2 and Smarty 3 are quite similar in implementation, but do have a few
differences you need to be aware of when upgrading from Smarty 2 to Smarty 3.

Smarty3は、Smarty2と非常によく似た方法で導入できますが、
Smarty2からSmarty3へアップグレードするときにいくつかの注意点があります。

= Known incompatibilities with Smarty 2 =

= アップグレードに伴う、既知の問題点 =

== Syntax ==
The Smarty 3 API has been updated in various places. Some Smarty 2 API calls
need to be updated to comply with Smarty 3. You will get a deprecation notice
with old Smarty 2 API calls, and informed what the new one is. See the README that
comes with Smarty 3 for more information.

==文法==
Smarty3のAPIは、様々な箇所で更新が行われています。
コード上、Smarty2のAPIの呼び出しが行われている幾つかの箇所で、Smarty3の仕様に合うようにコードを変更する必要があります。
非推奨となった、Smarty2での旧バージョンの呼び出し方法と、Smarty3での新バージョンの呼び出し方法を知ることができます。
詳しくは、Smarty3のREADMEをご覧下さい。

The {$array|@mod} syntax has always been a bit confusing, where an “@” is required
to apply a modifier to an array instead of the individual array elements. Normally you
always want the modifier to apply to the variable regardless of its type. In Smarty 3,
{$array|mod} and {$array|@mod} behave identical. It is safe to drop the “@” and the
modifier will still apply to the array. If you really want the modifier to apply to
each array element, you must loop the array in-template, or use a custom modifier that
supports array iteration. Most smarty functions already escape array elements where
necessary such as {html_options}

{$array|@mod}構文は、配列の個々の要素に対してではなく、配列そのものに対し『修正子(modifier)』を機能させる為「@」をどこにをつければ良いか少し分かりづらくなっていました。
変数の型に関係なくその変数に対し『修正子(modifier)』が機能することを、普通は望みますよね。
Smarty3では、{$array|mod} 構文 {$array|@mod}構文のどちらでも同じ動作をするようになりました。
「@」抜きでも配列に対し『修正子(modifier)』が機能するので削除しても大丈夫です。
もし配列の個々の要素に対し『修正子(modifier)』を機能させたいなら、テンプレート内で配列を走査するか、Array Iteration(配列の繰り返し)をサポートする『カスタム関数(function)』を作成して使用して下さい。
<翻訳が少し怪しい>{html_options}のような、配列要素を必要とする多くの『カスタム関数(function)』で対応済みとなっています。</翻訳が少し怪しい>

== PHP Version ==
Smarty 3 is PHP 5 only. It will not work with PHP 4.

==PHPバージョン==
Smarty3は、PHP5でのみ動作し、PHP4では動作しません。

== {php} Tag ==
The {php} tag is disabled by default. The use of {php} tags is
deprecated. It can be enabled with $smarty->allow_php_tag=true.

Variables inside {php} blocks no longer share scope with other
{php} blocks on the page, so be aware of this change if you use them.

=={php}タグ==
初期状態では、{php}タグが使用できなくなりました。{php}タグは廃止予定となっています。「 $smarty->allow_php_tag=true」を実行することで、現在{php}タグを使用することが出来ます。

{php}タグ内部での変数は、他の{php}タグと共有できなくなりました。もしそれらを使用している場合は、この変更に留意しなくてはなりません。

== Delimiters and whitespace ==
Smarty delimiters {} surrounded by whitespace are no longer treated as Smarty tags.
Therefore, { foo } will be ignored by Smarty, but {foo} is recognized. This change
makes Javascript/CSS easier to work with, eliminating the need for {literal}.
This feature can be disabled by setting $smarty->auto_literal = false;

== デリミタと空白 ==
空白に囲われたSmartyのデリミタ{}は、Smartyのタグとして扱われなくなりました。
なので、{ foo }は認識はされているが、Smartyからは無視されます。
この変更は、{literal}の必要性を取り除き、Javascript/CSSの実装を簡単に行うこと実現させます。
この仕様は、「$smarty->auto_literal = false;」を実行することで、無効にすることが出来ます。

== Unquoted Strings ==
Smarty 2 was a bit more forgiving (and ambiguous) when it comes to unquoted strings
in parameters. Smarty3 is more restrictive. You can still pass strings without quotes
so long as they contain no special characters. (anything outside of A-Za-z0-9_)

For example filename strings must be quoted:
{assign var=foo value=baz} <– works ok
{include file=”path/foo.tpl”} <– needs quotes!

==引用符で囲まれていない文字列==
Smarty2では、パラメタに、引用符で囲まれていない文字列を指定した場合に、少し大雑把で曖昧に扱われていました。
Smarty3ではより厳密に扱われますが、特殊な文字(A-Za-z0-9_以外の文字列)が含まれていない文字列に対しては、引用符で囲まなかったとしてもエラーなく動作させることが出来ます。

== Extending the Smarty class ==
Smarty 3 follows standard PHP5 constructor rules. When extending the Smarty class,
use __construct() as the class constructor name. If you implement your own constructor,
be certain to call parent::__construct() first.
class MySmarty extends Smarty {
function __construct() {
parent::__construct();

// your initialization code goes here

}
}

==Smartyクラスの拡張==
Smarty3では、標準的なPHP5のクラス構成ルールに従っています。
Smartyクラスを拡張する場合は、コンストラクタの名称には「__construct()」を使用して下さい。
もし独自にコンストラクタを実装する場合は、まず初めに「parent::__construct()」を必ず実行するようにして下さい。

class MySmarty extends Smarty {
  function __construct() {
    parent::__construct();
    // ここに独自クラスの初期化処理を記載してください。
  }
}

== Autoloader ==
Smarty implements its own autoloader with spl_autoload_register. If you
use an autoloader in your own application, you MUST register yours as well. Using
__autoload() WILL FAIL. This is standard PHP5 autoloader procedure for shared libraries.
See http://us3.php.net/manual/en/function.spl-autoload-register.php

== オートローダー ==
Smartyでは、独自のオートローダ機能をspl_autoload_register()を使用して実装しています。
もしアプリケーション内で独自にオートローダを使用する場合は、それらも登録しなければなりません。
__autoload()関数を使用すると失敗するでしょう。PHP5の標準ライブラリのオートローダ関数の仕様に関係します。
詳しくは、http://us3.php.net/manual/en/function.spl-autoload-register.phpをご覧下さい。

== Plugin Filenames ==
Since Smarty 3 uses the default spl_autoloader, the plugin filenames are now required to be
lower case. Smarty 2 allowed mixed case plugin names, you must rename them for Smarty 3.

== プラグインのファイル名 ==
Smarty3では、標準的にsql_autoloader機能を使用します。その関係で、プラグインのファイル名は小文字である必要があります。
Smarty2では、大文字と小文字の混同は許可されていましたが、Smarty3では小文字にリネームしなければなりません。

== Scope of Special Smarty Variables ==
In Smarty 2 the special Smarty variables $smarty.section.* and $smarty.foreach.*
had global scope. If you had loops with the same name in subtemplates, you could accidentally
overwrite values of a parent template.

In Smarty 3 these special Smarty variables now have local scope in the template which
is defining the loop. In the rare case you need these values in a subtemplate, you have to
pass them as parameters.
{include file=”path/foo.tpl” index=$smarty.section.foo.index}

== 特定のSmarty変数のスコープ ==
Smarty2では、「$smarty.section.*」や「$smarty.foreach.*」のような特定の変数のスコープはグローバルスコープでした。
もし、サブテンプレートで同じない前でループ処理が行われた場合、親テンプレートの値を誤って上書きしていました。
Smart3では、これらの特定の変数のスコープは、ループ処理が定義されているテンプレート単位でのローカルスコープとなりました。
もし親テンプレートでのそれらの値をサブテンプレートで使用したい場合は、それらをパラメタにセットする必要があります。

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

== SMARTY_RESOURCE_CHAR_SET ==
Smarty 3 sets the constant SMARTY_RESOURCE_CHAR_SET to utf-8 as the default template charset.
This is now used with modifiers like escape as the default charset. If your templates use
another charset, make sure that you define the constant accordingly.

== SMARTY_RESOURCE_CHAR_SET ==
Smarty3では、テンプレートの文字コードの指定を意味する定数「SMARTY_RESOURCE_CHAR_SET」に、「utf-8」が初期設定されています。
これは、escapeのような修正子(modifier)の文字コードの初期値として使用されています。
もしテンプレート内で他の文字コードを使用するなら、それに応じてこの定数を定義しているかを確認してください。

== trigger_error() ==
The API function trigger_error() has been removed. It is still included in the Smarty2 API wrapper.

== trigger_error()関数 ==
既にtrigger_error()関数は廃止されましたが、Smarty2との互換性から、現段階ではまだ実装されています。

== Smarty constants ==
The constants
SMARTY_PHP_PASSTHRU
SMARTY_PHP_QUOTE
SMARTY_PHP_REMOVE
SMARTY_PHP_ALLOW
have been replaced with class constants
Smarty::PHP_PASSTHRU
Smarty::PHP_QUOTE
Smarty::PHP_REMOVE
Smarty::PHP_ALLOW

== Smarty 用の定数 ==
下記の定数が、Smartyクラスの定数に置き換わっています。
SMARTY_PHP_PASSTHRU => Smarty::PHP_PASSTHRU
SMARTY_PHP_QUOTE => Smarty::PHP_QUOTE
SMARTY_PHP_REMOVE => Smarty::PHP_REMOVE
SMARTY_PHP_ALLOW => Smarty::PHP_ALLOW

 - PHP ,

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

  関連記事

php
headers_list

リダイレクトやNot Found処理をする時に、header()を使用しHTTP …

php
$_REQUEST($_POST)に全てのアイテムが格納されない – max_input_vars

フォームに大量のINPUTタグを配置している場合に、 部分的には取れるけど、PO …

php
マルチバイト文字列を1文字づつ分解して配列化する – preg_split

便利な標準関数があったので、サンプルを。 マルチバイト文字列を1文字づつ分解し配 …

centos
GeoIPのインストール

IPアドレスから国や都市を取得するためのライブラリが、MaxMind社のGeoI …

php
[Smarty]確認画面などで使う、Hidden項目を全力で自動生成

入力確認画面や完了通知画面で、前画面(入力画面)のリクエストを元に一気にHidd …

mysql
[MySQL][phpMyAdmin]Allowed memory size of XXXXXX bytes exhausted (tried to allocate XXXXXX bytes)

こんな現象がおきました phpMyAdminでデータベース全体をエクスポートした …

php
$_SERVER[“REQUEST_TIME_FLOAT”]

$_SERVER[“REQUEST_TIME”]には置き …