Smarty的是PHP,这有利于呈现从PrestaShop的核心功能/控制器分离(XHTML/CSS)一个PHP模板引擎。
模板文件(通常在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的变量存储值,可以使用 '分配' 功能有两种方式:
$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'}.
的 '逃离' 修饰符来避免XSS安全问题。
我想通过覆盖管理控制器中存在的orderreturncontrollercore来做同样的事情,但没有smarty变量出现在form.tpl文件中,你能告诉我为什么吗? –
您可以创建一个单独的问题并发布代码(包括PHP和Smarty)以供审阅吗? –