【问题标题】:magento model class rewrite issuemagento模型类重写问题
【发布时间】:2015-12-08 21:38:06
【问题描述】:

我使用的是 magento 企业版 1.14.2。我想重写以下类和函数。

Mage_Catalog_Model_Product_Url

 public function formatUrlKey($str)
    {
        $urlKey = preg_replace('#[^0-9a-z]+#i', '-', Mage::helper('catalog/product_url')->format($str));
        $urlKey = strtolower($urlKey);
        $urlKey = trim($urlKey, '-');

        return $urlKey;
    }

这是我的重写模块配置文件,

<?xml version="1.0"?>
<config>
  <modules>
    <Mypackage_Mymodule>
      <version>0.1.0</version>
    </Mypackage_Mymodule>
  </modules>
  <global>
    <helpers>
      <mymodule>
        <class>Mypackage_Mymodule_Helper</class>
      </mymodule>
    </helpers>
    <models>
      <mymodule>
        <class>Mypackage_Mymodule_Model</class>
        <resourceModel>mymodule_mysql4</resourceModel>
      </mymodule>
            <catalog>
                <rewrite>
                    <product_url>Mypackage_Mymodule_Model_Catalog_Product_Url</product_url>
                </rewrite>
            </catalog>
    </models>
  </global>
</config> 

这是我的课,

app/code/local/Mypackage/Mymodule/Model/Catalog/Product

class Mypackage_Mymodule_Model_Catalog_Product_Url extends Mage_Catalog_Model_Product_Url
{
    public function formatUrlKey($str)
    {
//my stuffs
}
}

我认为一切看起来都很好。但我不能重写这门课。但是同一个类在后续类的企业部分扩展,

Enterprise_Catalog_Model_Product_Url

所以这就是为什么它不起作用..?如果我扩展这个类,那么我可以访问该函数

public function formatUrlKey($str)
        {
    //my stuffs
    }

任何解决方案或提示都会对我有所帮助..

【问题讨论】:

    标签: php magento


    【解决方案1】:

    您需要扩展和覆盖此表单 Enterprise 现在在你的模块配置文件中替换

    <catalog>
      <rewrite>
         <product_url>Mypackage_Mymodule_Model_Catalog_Product_Url</product_url>
       </rewrite>
    </catalog>
    

    <enterprise_catalog>
                <rewrite>
                    <product_url>Mypackage_Mymodule_Model_Catalog_Product_Url</product_url>
                </rewrite>
    </enterprise_catalog>
    

    在 app/code/local/Mypackage/Mymodule/Model/Catalog/Product.php 用Enterprise_Catalog_Model_Product_Url扩展这个类

    【讨论】:

    • 感谢 Rehan。我知道如果我扩展 Enterprise_Catalog_Model_Product_Url 这个类,那么我可以重写 Mage_Catalog_Model_Product_Url 这个类及其功能。但我的问题是为什么我不能重写这个类 Mage_Catalog_Model_Product_Url ..?
    • 多次重写的问题是,由于 Magento 加载模块 XML,将其与配置树合并,然后加载另一个模型的方式,只能存在一个节点。这意味着您只能将一个类别名解析为一个类名。看到这个stackoverflow.com/a/7502938/2907851
    【解决方案2】:

    尝试替换你的

            <catalog>
                <rewrite>
                    <product_url>Mypackage_Mymodule_Model_Catalog_Product_Url</product_url>
                </rewrite>
            </catalog>
    

    有了这个

            <enterprise_catalog>
                <rewrite>
                    <product_url>Mypackage_Mymodule_Model_Catalog_Product_Url</product_url>
                </rewrite>
            </enterprise_catalog>
    

    【讨论】:

    • 感谢 RehAntonino。我知道如果我扩展 Enterprise_Catalog_Model_Product_Url 这个类,那么我可以重写 Mage_Catalog_Model_Product_Url 这个类和它的功能。但我的问题是为什么我不能重写这个类 Mage_Catalog_Model_Product_Url ..?
    • 因为在 Enterprise 中这个类已经被重写并且优先级高于你,所以你的编辑不会影响任何事情。
    猜你喜欢
    • 2012-12-22
    • 2016-02-28
    • 2015-05-14
    • 2014-09-23
    • 1970-01-01
    • 1970-01-01
    • 2015-08-25
    • 2011-10-18
    • 2014-03-13
    相关资源
    最近更新 更多