如何在 Prestashop 中使变量可全局访问

How to make a variable globally accessible in Prestashop

我正在修改 Prestashop 中的一个模块,它具有这样的文件夹结构..

css
translations
index.php
module.php
module.tpl

变量 $products 包含所有产品的数组。但只有 module.tpl 可以访问它,它在主页上显示我不喜欢的所有产品。

我创建了一个重定向到不同页面的控制器和一个 template/view/front/products.tpl 来显示所有产品。但是 products.tpl 文件中未定义 $products 变量。

定义常量可以完成这项工作或使用会话。之后所有内容都可以在模板中由 smarty 访问。

Ex 在你的模块中:

      define('MYGLOBALVAR', 'data');

在您的模板中:

      $smarty.const.MYGLOBALVAR

您可以设置Cookie变量并在您需要的地方使用它。喜欢:

$this->context->cookie->products=$products;

如果你想在 tpl 中打印,在控制器中你可以分配给 smarty 变量

 $this->context->smarty->assign('products', $this->context->cookie->products);

并在 tpl 中使用它

如果您使用新模板创建了一个新控制器,您需要在这个控制器中创建这个变量并将其分配给一个模板,所以:

在控制器的 initContent() 函数中,您需要使用您需要的值创建变量“$products”,例如:

$products = Product::getProducts($id_lang, 0, 0, 'id_product', 'DESC' );

然后,您需要将这个php变量赋值给一个Smarty变量,以显示tpl文件中的值。为此,我们使用“@Ravinder Pal”使用的方法,但更改值:

$this->context->smarty->assign('products', $products);

最后,您可以在 initContent() 函数中分配的模板中使用此变量:

{$products}

希望对你有帮助。

我真的想通了。我别无选择,只能实例化新类别,然后获取所有产品。 像这样:

$category = new Category(Context::getContext()->shop->getCategory(), (int)Context::getContext()->language->id);
$nb = 10000;    
$products = $category->getProducts((int)Context::getContext()->language->id, 1, ($nb ? $nb : 10));