使用 Smarty 3 将 Smarty 变量分配给 PHP

Assign Smarty variable to PHP with Smarty 3

我使用的商店系统已从 smarty 2 更新到 smarty 3,这导致我们网站上出现了一系列问题。最糟糕的是,我们在 PHP 中指定使用它们的所有 Smarty 变量都不再起作用了。

一个简短的例子:

{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"

None 所有这些 "solutions" 我在 Smarty 3 之后找到了工作。

无论出于何种原因,上述 none 项都奏效了。我现在将 {PHP} 标签中的代码外包到外部 PHP 文件中,然后将函数的 return 返回给 smarty。

下面我举了一个例子,供大家参考(不要忘记将 PHP 文件添加到 index.php 或其他文件中):

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

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

然后在我的外部 PHP 文件中执行我的 PHP 函数和 return 我需要的数据:

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'];
}

现在 {$module_data.PRODUCTS_ID|@get_random_function} 输出我的 PHP 函数的 return。