PrestaShop 8.0 购物车规则添加商品限制的实现方法求助
PrestaShop 8.0 购物车规则添加商品限制的实现方法求助
兄弟,太懂你这种卡在关联表上的憋屈了!PrestaShop的购物车规则商品限制确实要绕三个关联表,但真没必要直接写硬SQL插数据,用它原生的类方法来做既安全又不会搞乱数据关联,我给你捋捋具体步骤:
首先得搞清楚这三个表的关系:
ps_cart_rule_product_rule:是商品限制规则的主记录,用来定义规则的类型(比如针对商品还是分类)、操作符(包含/排除)ps_cart_rule_product_rule_group:用来组合多个条件的逻辑组(比如AND/OR,哪怕只有一个条件也得建)ps_cart_rule_product_rule_value:存放具体的商品ID(或分类ID)值
你可以在现有代码保存购物车规则之后,添加下面这段代码来实现商品限制:
// 如果存在目标商品ID,添加商品限制逻辑 if ($id_product) { // 1. 创建商品限制规则主记录 $productRule = new CartRuleProductRule(); $productRule->id_cart_rule = $id_cart_rule; $productRule->type = 'products'; // 可选值:products(商品)、categories(分类)等 $productRule->operator = '='; // =表示购物车必须包含该商品才生效,!=表示排除该商品 $productRule->save(); $id_product_rule = $productRule->id; // 2. 创建规则逻辑组(单条件也需要,逻辑用AND就行) $productRuleGroup = new CartRuleProductRuleGroup(); $productRuleGroup->id_cart_rule_product_rule = $id_product_rule; $productRuleGroup->type = 'products'; $productRuleGroup->logic = 'AND'; // 多条件时用AND/OR组合 $productRuleGroup->save(); $id_product_rule_group = $productRuleGroup->id; // 3. 添加具体的商品ID值 $productRuleValue = new CartRuleProductRuleValue(); $productRuleValue->id_cart_rule_product_rule_group = $id_product_rule_group; $productRuleValue->value = $id_product; $productRuleValue->save(); }
另外,你之前用SQL插入用户组限制的代码,其实也可以换成原生类实现,更符合PrestaShop的开发规范,避免潜在问题:
if ($id_group > 0) { $cartRuleGroup = new CartRuleGroup(); $cartRuleGroup->id_cart_rule = $id_cart_rule; $cartRuleGroup->id_group = $id_group; $cartRuleGroup->save(); }
这样操作之后,你的购物车规则就会同时生效用户组限制和商品限制了,建议测试一下规则触发的场景,确保符合预期~
备注:内容来源于stack exchange,提问作者Guillaume KS
相关产品推荐
相关产品推荐

