2013-06-25 29 views
2

我正在使用onClick來切換視圖。我希望將最後一個/默認位置存儲在變量中,以防止在每個頁面刷新或導航時切換到默認視圖狀態。如何在prestashop中創建一個smarty變量1.5

我讀,我可以做一個PHP文件如下:

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

,然後在TPL文件中使用$myVar。但它不適合我。 我正在使用的tpl文件不是模塊的一部分,在prestashop根文件夾中沒有.php文件。

任何人都可以教我一點關於smarty/php和如何創建變量並使用它們來存儲按鈕的狀態?

由於

回答

4

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的變量存儲值,可以使用 '分配' 功能有兩種方式:

  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));

然後在Smarty模板:

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

的 '逃離' 修飾符來避免XSS安全問題。

+0

我想通過覆蓋管理控制器中存在的orderreturncontrollercore來做同樣的事情,但沒有smarty變量出現在form.tpl文件中,你能告訴我爲什麼嗎? –

+0

您可以創建一個單獨的問題併發布代碼(包括PHP和Smarty)以供審閱嗎? –

3

爲了您的Smarty的文件中使用的變量,你需要使用例如:

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

然後在您的TPL文件中使用它,你只需要簡單的使用方法:

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

要在smarty中使用變量需要在{}內寫入。

+0

我想通過重寫管理控制器中存在的orderreturncontrollercore來做同樣的事情,但沒有smarty變量出現在form.tpl文件中,你能告訴我爲什麼嗎? –