如何在prestashop 1.5中创建一个smarty变量

时间:2013-06-25 04:08:05

标签: variables smarty prestashop

我正在使用一个用onClick切换视图的按钮。我希望将最后/默认位置存储在变量中,以防止在每次页面刷新或导航时切换到默认视图状态。

我读到我可以在php文件中执行以下操作:

$myVar= -1;
$smarty->assign('myVar', $myVar);

然后在tpl文件中使用$myVar。但它对我不起作用。 我正在处理的tpl文件不是模块的一部分,并且在prestashop根文件夹中没有.php文件。

任何人都可以教我一点smarty / php以及如何创建变量并使用它们来存储按钮的状态吗?

由于

2 个答案:

答案 0 :(得分:4)

Smarty是PHP的PHP模板引擎,它有助于将演示文稿(XHTML / CSS)与PrestaShop的核心功能/控制器分离。

模板文件(通常在PrestaShop中具有.tpl扩展名)始终由PHP控制器文件调用(它可以是前端核心控制器或模块控制器)。

示例:/prestashop/controllers/front/ContactController.php

$this->context->smarty->assign(array(
    'contacts' => Contact::getContacts($this->context->language->id),
    'message' => html_entity_decode(Tools::getValue('message'))
));

$this->setTemplate(_PS_THEME_DIR_.'contact-form.tpl');

我们可以看到该文件正在从数据库中检索信息并将其分配给Smarty。

然后,'contact-form.tpl'模板会将其显示给访问者。

模块的语法非常相似, 例如:/prestashop/modules/blocklink/blocklink.php

public function hookLeftColumn($params)
{       
    $this->smarty->assign('blocklink_links', $this->getLinks());

    return $this->display(__FILE__, 'blocklink.tpl');
}

此外,要将值存储在Smarty变量中,您可以通过两种方式使用“assign”功能:

  1. $this->context->smarty->assign('my_smarty_variable_name', $my_value);

    或者如果你有几个变量:

  2. $this->context->smarty->assign(array('my_smarty_variable_name1' => $my_value1), ('my_smarty_variable_name2' => $my_value2));

  3. 然后在Smarty模板中:

    The value of my variable is {$my_smarty_variable_name|escape:'htmlall':'UTF-8'}.
    

    'escape'修饰符用于避免XSS安全问题。

答案 1 :(得分:3)

为了在smarty文件中使用变量,您需要使用例如:

$this->context->smarty->assign(
    array(
        'myVar' => $myvar,
        'otherVar' => $otherVar
    )
 );

然后在你的tpl文件中使用它你只需要使用:

<div>my var = {$myVar}</div>

要在smarty中使用变量,您需要在{}中编写。