繁体   English   中英

Magento购物车规则类覆盖模块

[英]Magento Shopping Cart Rule Class Override Module

我的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
这里还有一个类,用于扩展上述文件中的类:
应用程序/代码/核心/法师/ SalesRule /模型/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>

但是,我已经仔细尝试了我可以推断出的每种组合都是合适的,但没有一种有效:

<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.我进一步知道配置文件正在加载,因为我已经将加载的类输出到浏览器,并且我尝试覆盖OTHER类,并看到它成功输出了正确的类
3.我知道我所做的每个更改都是通过另一个重写加载的,该重写是我添加(每次都修改)的目的,只是为了验证更改是否正确上传。
3.是的,我非常确保使用正确的匹配关闭标签关闭标签
4.禁用了缓存,因此不是正在加载的文件不是问题

请帮忙。 我没剩多少头发了...

经过Magento 1.6.1的测试,应适用于所有版本(尽管资源模型的命名约定在最新版本中已更改,因此请采取相应措施)。

首先,两课将帮助您理解配置。

第1课

Magento有模型。 模型具有资源模型。 资源模型执行数据库/数据存储查询,以加载模型对象。

模型集合是第三种类型的事物。 但是,由于模型集合查询数据库,因此确定模型集合也将是模型资源。 这就是为什么你使用

Mage::getResourceModel('salesrule/resource_rule_collection');

实例化一个集合。 使用时

Mage::getModel('catalog/product')->getCollection();

Magento实际上在打电话

Mage::getResourceModel('catalog/product_collection');

在幕后。

第二课

您只能重写模型,助手和块。 您不能直接重写资源模型。 幸运的是,我们并没有走运。 另一个令人困惑的抽象概念是,Magento的资源模型实际上是模型本身。 你打电话时

Mage::getResourceModel('salesrule/resource_rule_collection');

Magento最终致电

Mage::getModel('salesrule_resource/resource_rule_collection')

实例化资源模型类。 如果您没有看到它,资源模型组salesrule会转换为模型组salesrule_resource 通过在<salesrule>模型节点下查找<resourceModel>节点来派生值salesrule_resource

<salesrule>
    <class>Mage_SalesRule_Model</class>
    <resourceModel>salesrule_resource</resourceModel>
</salesrule>

因此,这意味着您需要重写模型salesrule_resource/resource_rule_collection 以下XML应该Packagename_Modulename_Model_Your_Class_Here用您的类名称替换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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM