ran*_*ame 0 xml overriding magento magento-1.6
我的magento安装有免费送货购物车规则,以及优惠券规则.输入优惠券后,免运费便会消失.这是不可取的,但Magento的已知条件:Magento免费送货和优惠券折扣 注意:如果有人知道如何纠正这个问题而不覆盖,那将是更可取的.
我已经为此工作了大约3个小时.我搜索了SO,Google和其他人,但找不到解决方案.
问题:
我正在尝试编写一个模块,根据这篇文章纠正行为:
Magento问题与购物车价格
我试图覆盖的类是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
(其中一个应该重写?)
对于我的生活,我找不到合适的config.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>
Run Code Online (Sandbox Code Playgroud)
但是,我仔细尝试了我能推断出的每一种组合都可能是合适的,而且没有一种方法有效:
<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>
Run Code Online (Sandbox Code Playgroud)
注意:
1.我知道正在加载配置文件,我已经检查了System-> Configuration-> Advanced
2.我进一步知道正在加载配置文件,因为我已经将已加载的类输出到浏览器,并且我已经尝试覆盖OTHER类并看到它成功输出正确的类
3.我知道我所做的每个更改都是通过我添加(并且每次修改)的另一个重写来加载的,只是为了验证更改是否已正确上传.
3.是的,我非常小心确保使用正确匹配的结束标签关闭标签
4.禁用缓存,因此未加载文件不是问题
请帮忙.我没留下多少头发......
Ala*_*orm 11
使用Magento 1.6.1进行测试时,应该适用于所有版本(尽管资源模型的命名约定在最近的版本中已经更改,因此请采取相应措施).
首先,两节课应该可以帮助您了解配置.
第1课
Magento有模特.模型有资源模型.资源模型执行加载模型对象的数据库/数据存储区查询.
模型集合是第三种类型的东西.但是,因为模型集合查询数据库,所以决定模型集合也是模型资源.这就是你使用的原因
Mage::getResourceModel('salesrule/resource_rule_collection');
Run Code Online (Sandbox Code Playgroud)
实例化一个集合.当你使用
Mage::getModel('catalog/product')->getCollection();
Run Code Online (Sandbox Code Playgroud)
Magento实际上在打电话
Mage::getResourceModel('catalog/product_collection');
Run Code Online (Sandbox Code Playgroud)
在幕后.
第2课
您只能重写模型,帮助程序和块.您无法直接重写资源模型.幸运的是,我们并非运气不好.在抽象的又一个令人困惑位,Magento的资源模型的实际模型本身.你打电话的时候
Mage::getResourceModel('salesrule/resource_rule_collection');
Run Code Online (Sandbox Code Playgroud)
Magento最终打来电话
Mage::getModel('salesrule_resource/resource_rule_collection')
Run Code Online (Sandbox Code Playgroud)
实例化资源模型类.如果您没有看到它,资源模型组salesrule将转换为模型组salesrule_resource.salesrule_resource通过<resourceModel>在<salesrule>模型节点下查找节点来获取该值.
<salesrule>
<class>Mage_SalesRule_Model</class>
<resourceModel>salesrule_resource</resourceModel>
</salesrule>
Run Code Online (Sandbox Code Playgroud)
那么,这意味着你需要重写模型类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>
Run Code Online (Sandbox Code Playgroud)