PHPベースのサイトをSmarty2からSmarty3にアップグレード中です。require_once('Smarty.class.php'
次のように置き換えることで、両方のバージョンでほとんどすべてが機能するようになりました。
@ include_once('SmartyBC.class.php');
if (class_exists('SmartyBC')) {
$smarty = new SmartyBC();
//this is for use outside templates. inside templates, $smarty.version == 'Smarty-3.x.y.z'
$smartyVersion = 3;
}
//catch (Exception $e) {
else {
require_once('Smarty.class.php');
$smarty = new Smarty();
$smartyVersion = 2;
}
次に、/ usr / local / lib / php / Smartyに、バージョン2またはバージョン3のいずれかを指すシンボリックリンクがあります。2つを切り替えるには、シンボリックリンクを変更するだけです。互換性レイヤークラス(SmartyBC)を使用することにより、ほとんどすべてがすでに両方のバージョンで機能します。すべてが完全にテストされるまで両方のバージョンとの互換性を維持し、古いテンプレートへの変更をできるだけ少なくしたいと思います。それを念頭に置いて、これが私がアップグレードしようとしているコードの一部です:
//someinclude.php:
define('SOME_CONSTANT', 'someConst');
//somepage.tpl:
{if $dynVal == SOME_CONSTANT}dynamic content{/if}
これはV3では機能しませんが、次のようになります。
{if $dynVal == $smarty.const.SOME_CONSTANT}dynamic content{/if}
これらの定数(かなりの数)は至る所で使用されているので、理想的にはバージョン3で最初の方法を機能させる方法を見つけたいと思います。これが不可能な場合、サポートするための最もクリーンな方法は何ですか。一時的に両方のバージョン?