我正在使用一个用onClick切换视图的按钮。我希望将最后/默认位置存储在变量中,以防止在每次页面刷新或导航时切换到默认视图状态。
我读到我可以在php文件中执行以下操作:
$myVar= -1;
$smarty->assign('myVar', $myVar);
然后在tpl文件中使用$myVar
。但它对我不起作用。
我正在处理的tpl文件不是模块的一部分,并且在prestashop根文件夹中没有.php文件。
任何人都可以教我一点smarty / php以及如何创建变量并使用它们来存储按钮的状态吗?
由于
答案 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”功能:
$this->context->smarty->assign('my_smarty_variable_name', $my_value);
或者如果你有几个变量:
$this->context->smarty->assign(array('my_smarty_variable_name1' => $my_value1), ('my_smarty_variable_name2' => $my_value2));
然后在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中使用变量,您需要在{}中编写。