首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Smarty v2升级到v3

从Smarty v2升级到v3
EN

Stack Overflow用户
提问于 2012-08-16 04:18:37
回答 2查看 3.3K关注 0票数 3

我正在将一个基于PHP的网站从Smarty2升级到Smarty3。通过将require_once('Smarty.class.php'替换为以下代码,我已经成功地在两个版本上实现了几乎所有功能:

代码语言:javascript
复制
@ 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上有一个symlink,它指向版本2或版本3。为了在这两个版本之间切换,我只需要更改符号链接。通过使用兼容层类(SmartyBC),几乎所有东西都可以在两个版本中使用。我希望保持与两个版本的兼容性,直到一切都经过充分测试,并对旧模板进行尽可能少的更改。考虑到这一点,下面是我正在尝试升级的代码:

代码语言:javascript
复制
//someinclude.php:
define('SOME_CONSTANT', 'someConst');

//somepage.tpl:
{if $dynVal == SOME_CONSTANT}dynamic content{/if}

这在V3中不起作用,但它可以:

代码语言:javascript
复制
{if $dynVal == $smarty.const.SOME_CONSTANT}dynamic content{/if}

这些常量(相当多的常量)到处都在使用,所以理想情况下,我希望找到一种方法让第一种方法在版本3中工作。如果这不可能,那么暂时支持两个版本的最干净的可能方法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-16 04:44:33

我没有意识到我在问题中描述的更改也适用于版本2:

代码语言:javascript
复制
{if $dynVal == $smarty.const.SOME_CONSTANT}dynamic content{/if}

我将继续等待其他答案的出现,因为如果没有必要,我仍然希望不必更改模板,但我认为这可能是进行更改的最干净的方式。我担心我将不得不做这样的事情:

代码语言:javascript
复制
{if ($newSmarty && $dynVal == $smarty.const.SOME_CONSTANT) || (!newSmarty && 'dynVal' == SOME_CONSTANT) }dynamic content{/if}

没有人想要保持这一点。

票数 0
EN

Stack Overflow用户

发布于 2012-08-16 04:29:48

我的理解是,在v3中,这些常量总是被解释为字符串。

无论您在何处定义这些常量,都可以使用

代码语言:javascript
复制
$smarty->assign( 'constant', CONSTANT );

无论哪种方式,如果您想要升级,都需要修改您的代码。也许你应该权衡v2->v3更新的优缺点,然后从那里开始。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11976629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档