我的magento安装有免费送货的购物车规则,以及优惠券规则。 输入优惠券后,免费送货将消失。 这是不可取的,但Magento的已知条件:Magento免费送货和优惠券折扣注意:如果有人知道如何在不覆盖的情况下纠正该问题,那将是可取的。
我已经为此工作了大约 3 个小时。 我已经搜索了SO,Google和其他公司,但找不到解决方案。
问题:
我正在尝试编写一个模块来根据这篇文章纠正行为:
马本托与购物车价格的问题
我尝试覆盖的类是Mage_SalesRule_Model_Resource_Rule_Collection
使用Alan Storm的免费工具,我发现uri salesrule/resource_rule_collection
,
并进行一些手动调查,该类位于此处:
app/code/core/mage/SalesRule/Model/Resource/Rule/Collection.php
这里还有一个类,它从上面的文件扩展了这个类:
app/code/core/Mage/SalesRule/Model/Mysql4/Rule/Collection.php
(我应该覆盖其中的哪一个?
在我的一生中,我找不到正确的配置.xml语法来覆盖所需的类。
我的配置目前如下所示:
<config>
<modules>
<My_Couponrule>
<version>1.0.0</version>
</My_Couponrule>
</modules>
<global>
<models>
<salesrule>
<rewrite>
<resource_rule_collection>My_Couponrule_Model_Resource_Rule_Collection</resource_rule_collection>
</rewrite>
</salesrule>
</models>
</global>
但是,我已经仔细尝试了我能推断出可能合适的每种组合,但没有一个奏效:
<salesrule_resource_rule><rewrite><collection>
<salesrule_resource><rewrite><rule_collection>
<salesrule_resource><rewrite><collection>
<salesrule><rewrite><resource_collection>
<salesrule><rewrite><resource_rule_collection>
<salesrule><rewrite><rule_collection>
<salesrule_mysql4><rewrite><rule_collection>
<salesrule_mysql4_rule><rewrite><collection>
笔记:
1.我知道正在加载配置文件,我已经签入了系统>配置->高级
2. 我进一步知道正在加载配置文件,因为我已将加载的类输出到浏览器,并且我尝试覆盖其他类并看到它成功
输出正确的类3. 我知道我所做的每个更改都是通过我添加(和每次修改)的另一次重写加载的,只是为了验证更改是否正确上传。
3. 是的,我非常小心地确保标签使用正确匹配的结束标签
关闭4.缓存被禁用,因此未加载文件不是问题
请帮忙。 我剩下的头发不多了...
使用 Magento 1.6.1 进行测试,应适用于所有版本(尽管资源模型的命名约定在最新版本中已更改,因此请采取相应措施)。
首先,有两个教训可以帮助您了解配置。
第一课
Magento有模型。 模型具有资源模型。 资源模型执行加载模型对象的数据库/数据存储查询。
模型集合是第三种类型。 但是,由于模型集合查询数据库,因此决定模型集合也将是模型资源。 这就是您使用的原因
Mage::getResourceModel('salesrule/resource_rule_collection');
以实例化集合。 当您使用
Mage::getModel('catalog/product')->getCollection();
Magento实际上是在打电话
Mage::getResourceModel('catalog/product_collection');
幕后花絮。
第2课
您只能重写模型、帮助程序和块。 不能直接重写资源模型。 幸运的是,我们并没有不走运。 在另一个令人困惑的抽象中,Magento的资源模型实际上是模型本身。 当您致电时
Mage::getResourceModel('salesrule/resource_rule_collection');
马真托最终调用
Mage::getModel('salesrule_resource/resource_rule_collection')
以实例化资源模型类。如果您没有看到它,资源模型组salesrule
将转换为模型组salesrule_resource
。 值salesrule_resource
是通过在<salesrule>
模型节点下查找<resourceModel>
节点派生的。
<salesrule>
<class>Mage_SalesRule_Model</class>
<resourceModel>salesrule_resource</resourceModel>
</salesrule>
因此,这意味着您需要重写模型类salesrule_resource/resource_rule_collection
。 以下 XML 应该可以工作,将 Packagename_Modulename_Model_Your_Class_Here
替换为类名。
<config>
<global>
<models>
<salesrule_resource>
<rewrite>
<rule_collection>Packagename_Modulename_Model_Your_Class_Here</rule_collection>
</rewrite>
</salesrule_resource>
</models>
</global>
</config>