2015-10-07 204 views
1

我使用从smarty 2更新到smarty 3的商店系统,这导致了我们网站上的问题列表。最糟糕的是我们分配给PHP使用它们的所有Smarty变量都不能工作了。使用Smarty 3将Smarty变量赋值给PHP

一个简单的例子:

{assign var=test value=$ORDER_NUMBER} 
{php} 
    $order = $this->get_template_vars('test'); 
    echo $order; 
{/php} 

这将导致以下错误:

FATAL ERROR(1): "Using $this when not in object context" 

现在的Smarty的页面,我发现一些代码行做同样的,但看上去有点不同的,例如,这一个:

$order = $smarty->getTemplateVars('test'); 

这导致:

FATAL ERROR(1): "Call to a member function getTemplateVars() on null" 

所有这些“解决方案”没有,我发现工作不再因为Smarty的3

+0

'get_template_vars()'被弃用使用'getTemplateVars()'并确保在这行之前:'$ smarty-> getTemplateVars('test')'初始化了你的smarty对象。 –

+0

'php'-tag在smarty3中也被废弃了,你应该使用可用的可能性来扩展smarty来替换你对'php'-blocks的用法和自定义块/函数/ ... –

+0

你的第二种方法应该使用$聪明的变数。如果不是,也许尝试把全球性的$ smarty;在你的代码之前。但是,您的代码很糟糕,非常过时,需要随时更改。在smarty的下一个版本中,它可能根本不会工作。 –

回答

0

无论出于何种原因,没有的东西上面工作。我现在将外部PHP文件中的{PHP}标签中的代码外包,然后将函数返回给smarty。

下面我有任何人与它挣扎为例(不`吨忘记,包括你的PHP文件到您的index.php或其他):

我想获得有关产品的一些信息从数据库中但只有smarty的{$module_data.PRODUCTS_ID}

所以在我的文件,其中我使用Smarty的标签我这个变量发送到我的函数在PHP中:{$module_data.PRODUCTS_ID|@get_random_function}

然后在我的外部PHP文件,我做我的PHP函数返回数据,我需要:

function get_random_function($products_id) 
{ 
    $t_sql = $sql = "SELECT * FROM products WHERE products_id='".$products_id."'"; 
    $retval = mysql_query($t_sql); 
    $row = mysql_fetch_assoc($retval); 


    return $row['gm_needed_data']; 
} 

Now {$module_data.PRODUCTS_ID|@get_random_function}输出我的PHP函数的返回值。