2013-06-25 32 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文件中,你能告诉我为什么吗? –