【问题标题】:Magento - Model override not workingMagento - 模型覆盖不起作用
【发布时间】:2011-06-26 12:35:12
【问题描述】:

请一位magento专家帮我解决这个问题。这让我整天发疯!!!

我试图覆盖 Mage_Catalog_Model_Product_Type_Price 并且我尝试的任何东西都不起作用。我以前做过几次这样的事情,并且确信我的代码是正确的,但我显然遗漏了一些东西。

控制器工作正常,如果我实例化模型,它也工作正常。它似乎是实际的重写本身不起作用。

我正在使用 Magento 1.5.1。

这是我的模块配置文件中的代码:

<?xml version="1.0" encoding="utf-8"?>
<config>
    <modules>
        <MyNs_MyMod>
            <version>0.1.0</version>
        </MyNs_MyMod>
    </modules>
    <global>
    <models>
      <catalog>
        <rewrite>
          <product_type_price>MyNs_MyMod_Model_Price</product_type_price>
        </rewrite>
      </catalog>
    </models>
  </global>
    <frontend>
         <routers>
            <mymod>
                <use>standard</use>
                <args>
                    <module>MyNs_MyMod</module>
                    <frontName>mymod</frontName>
                </args>
            </mymod>
        </routers>
    </frontend>
</config>

这是精简到最低限度的型号代码:

    <?php

class MyNs_MyMod_Model_Price extends Mage_Catalog_Model_Product_Type_Price
{
    public function getPrice($product = null) {
        Mage::log('Made it into getPrice()');

        return 0;
    }
}

【问题讨论】:

  • 实例化 Mage::getModel('catalog/product_type_price') 会发生什么?你拿回一个对象吗?如果有,它的类别是什么?
  • 嗨艾伦。我得到了正确的覆盖类型,即 MyNs_Mymod_Model_Price。但是,如果我从核心模型 Mage_Catalog_Product_Type_Price 添加日志条目,这些总是会被记录 - 来自被覆盖类的日志消息永远不会被记录。
  • 提供更多关于您正在加载哪些页面以及您在何处添加所看到的日志的上下文将帮助人们追踪您的问题。 Magento 足够新且可无限配置,因此追踪此类问题的最快方法是查看负责实例化模型的代码,并找出为什么它没有返回您认为应该返回的内容。您提供的 me 上下文越多,可以提供帮助的人就越多。
  • 另外,在下面提供的黑暗答案中刺伤

标签: magento


【解决方案1】:

这是一个猜测,但根据您的 cmets,听起来您已经成功地重写了 Mage_Catalog_Model_Product_Type_Price 类。 然而,Magento 的重写系统并不是您在 Ruby/Python 中看到的“真正的”鸭子打字/猴子补丁。仅当核心代码通过类别名 catalog/product_type_price 实例化 Mage_Catalog_Model_Product_Type_Price 时,重写才会起作用。它不适用于 继承自 Mage_Catalog_Model_Product_Type_Price 的类的实例的对象。

所以,考虑一下

#File: app/code/core/Mage/Catalog/Model/Product/Type/Configurable/Price.php
<?php
class Mage_Catalog_Model_Product_Type_Configurable_Price extends Mage_Catalog_Model_Product_Type_Price

我猜你正在加载的页面实例化了Mage_Catalog_Model_Product_Type_Configurable_Price。这就是为什么当您单独实例化 catalog/product_type_price 时,您的重写似乎正在工作,但是当系统实例化 catalog/product_type_configurable_price 时,您的重写不会(也不能)被触发。

长话短说,尝试改写catalog/product_type_configurable_price 模型,看看你是否有更多的运气。

如果这不起作用,您需要跟踪 Magento 核心代码在哪里实例化这些对象,并调试正在发生的事情。为您的代码提供更多上下文可以帮助这里的人们帮助您解决这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-10
    相关资源
    最近更新 更多