3

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で最初の方法を機能させる方法を見つけたいと思います。これが不可能な場合、サポートするための最もクリーンな方法は何ですか。一時的に両方のバージョン?

4

2 に答える 2

0

質問で説明した変更がバージョン 2 でも機能することに気づきませんでした。

{if $dynVal == $smarty.const.SOME_CONSTANT}dynamic content{/if}

テンプレートを変更する必要がない場合は、変更する必要がないことを望んでいるので、他にどのような回答が得られるかを待ちますが、これが変更を行うための最もクリーンな方法になる可能性が高いと思います. 私は次のようなことをしなければならないのではないかと心配していました:

{if ($newSmarty && $dynVal == $smarty.const.SOME_CONSTANT) || (!newSmarty && 'dynVal' == SOME_CONSTANT) }dynamic content{/if}

そして、誰もそれを維持したくありません。

于 2012-08-15T20:44:32.567 に答える
0

私の理解では、これらの定数は常に v3 では文字列として解釈されます。

これらの定数を定義する場所はどこでも使用します

$smarty->assign( 'constant', CONSTANT );

いずれにせよ、アップグレードする場合は、コードを変更する必要があります。おそらく、v2 から v3 への更新の長所と短所を比較検討して、そこから移行する必要があります。

于 2012-08-15T20:29:47.713 に答える