9

我已经在我的 Magento 构建中安装了一个奖励模块。我还设置了一些购物车促销活动。一切正常。在购物车页面上,您可以兑换奖励积分并输入折扣码,一切都会正确打折。问题是它们都贴上了“折扣”标签(其中 1,000 积分 = 1 英镑折扣)


(来源:i.imm.io

如您所见,它将 5 英镑的优惠券折扣和 1 英镑的奖励折扣组合在一起。如何将它们分开,以便我有两个折扣行,一个用于优惠券,一个用于奖励积分?

4

2 回答 2

11

这不是一项简单的任务。不幸的是,Magento 的折扣系统并没有为添加您可能不希望在购物车总计框中一起添加的新折扣类型做好充分准备。

确实需要修改类的resetDiscountLabels()方法TBT_Rewards_Model_Salesrule_Observer。但是,这种方法不是Sweet Tooth 在折扣描述中添加折扣的地方。恰恰相反。Sweet Tooth 的折扣会自动添加到购物车上 Magento 的折扣列表中(并且折扣描述是从这个折扣列表中自动生成的)。问题是,即使是应该添加到购物车的 Sweet Tooth 折扣也会显示在那里 - 根据您创建的规则适用于购物车的折扣,但客户实际上还没有选择花费他们的积分. 该resetDiscountLabels()方法可以从购物车中删除不需要的折扣描述,而不是添加任何内容。

您的问题的解决方案分两个步骤,第二步是更费力的。

首先,您必须修改上述方法以从购物车中删除所有Sweet Tooth 折扣描述,而不仅仅是那些不适用的。我建议先将文件复制到您的应用程序/代码/本地代码池,然后修改该文件而不是原始文件。如果您遍历购物车上的所有规则 ID,然后加载规则模型,您可以判断它是否是 Sweet Tooth 规则,如果它的points_action字段已设置,即$rule->getPointsAction() !== null. 如果任何规则是 Sweet Tooth 规则,您可以unset从折扣描述中使用该方法已经在执行的方式。在此之后,Sweet Tooth 折扣不应再出现在总计框中的该行中。

第二步是在总计框中添加一个新行,也就是在报价单中添加一个新的总计模型。这将是更复杂的步骤 - 比我在这个答案中描述的要复杂得多,但这里有一个关于添加新总列的教程:http: //turnkeye.com/blog/magento-development-add-total-row-结帐/ 在您的新总模型collect()方法中,您应该检查报价applied_redemptions字段以获取客户已应用于其购物车的 Sweet Tooth 规则 ID 列表。然后,您可以使用这些值重新生成 Sweet Tooth 总折扣。

正如我所说,这不是一项简单的任务,不幸的是,这是唯一的半干净方法。希望不会太多。如果您宁愿将自己的开发时间集中在其他任务上,您也可以随时聘请开发公司为您做这件事。

希望这是有用的!

于 2012-12-03T02:11:24.440 回答
4

您需要修改/TBT/Rewards/Model/Salesrule/Observer.php- 检查checkRedemptionCouponBefore()折扣金额并检查resetDiscountLabels()- 这是 Sweet Tooth 在折扣描述中添加折扣的地方。

您可能还需要修改/app/design/frontend/base/default/template/rss/order/details.phtml- 在行之后if ($_order->getDiscountAmount() > 0)

于 2012-12-01T14:29:18.523 回答