Prestashop1.7.8分类页展示商品全属性及控制器500报错处理
Prestashop 1.7.8 开发问题解决方案
问题1:分类页无法获取商品全部属性
Prestashop 1.7.x版本中默认模板变量$product.attributes仅返回商品默认选中的第一个属性组合,要获取全量属性组合可以按以下步骤操作:
- 第一步:在分类页控制器(包含你自定义的
/modules/delivery/controllers/front/Category.php)中查询全量属性数据,调用核心方法Product::getAttributesInformationsByProduct($product_id)即可获取指定商品的所有属性组合,返回结果包含属性值、对应售价、库存、属性组合ID等全部字段。 - 第二步:将查询到的全量属性组合按商品ID分组后赋值到模板变量,例如命名为
$full_product_attributes。 - 第三步:在自定义的
product.tpl文件中遍历属性组合渲染即可,参考模板逻辑:
<!-- 遍历分类下所有商品 --> {foreach from=$category_products item=product} <li> {$product.name} <!-- 遍历当前商品所有属性组合 --> {foreach from=$full_product_attributes[$product.id_product] item=attr_group} : {foreach from=$attr_group.attributes_values item=attr_val}{$attr_val.name}{/foreach} : {$attr_group.price} $ : 加入购物车<br> {/foreach} </li> {/foreach}
注:加入购物车按钮可拼接跳转链接?controller=cart&add=1&id_product={$product.id_product}&ipa={$attr_group.id_product_attribute}&quantity=1实现对应属性组合直接加购
问题2:升级后自定义模块控制器报Class 'ModuleFrontController' not found错误
该错误是Prestashop 1.7.8+版本调整了核心控制器的类加载规则和命名空间导致,旧版无命名空间的控制器写法失效,修正方法如下:
- 在控制器文件顶部新增核心类引入,修正后的代码结构参考:
<?php require_once _PS_ROOT_DIR_.'/classes/controller/ModuleFrontController.php'; class DeliveryCategoryModuleFrontController extends ModuleFrontController { public function initContent() { parent::initContent(); // 保留原有的业务逻辑 } }
- 代码修改完成后删除Prestashop项目
/var/cache/目录下的所有缓存文件,重新访问即可恢复正常。
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

