2

我正在开发一个使用 onClick 切换视图的按钮。我希望将最后/默认位置存储在变量中,以防止在每次页面刷新或导航时切换到默认视图状态。

我读到我可以在 php 文件中执行以下操作:

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

然后$myVar在 tpl 文件中使用。但这对我不起作用。我正在处理的 tpl 文件不是模块的一部分,并且在 prestashop 根文件夹中没有 .php 文件。

谁能教我一些关于 smarty/php 的知识以及如何创建变量并使用它们来存储按钮的状态?

谢谢

4

2 回答 2

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”函数:

  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'}.

'escape' 修饰符用于避免 XSS 安全问题。

于 2013-06-25T13:29:10.203 回答
3

为了在你的 smarty 文件中使用变量,你需要使用例如:

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

然后在你的 tpl 文件中使用它,你只需要使用:

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

要在 smarty 中使用变量,您需要将其写入 {}。

于 2013-06-26T06:03:52.137 回答