我正在将基于 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。为了在两者之间进行交换,我只需要更改符号链接。通过使用兼容层类(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 中工作。如果这不可能,那么最干净的支持方法是什么两个版本都暂时?