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)以供審閱嗎? –