Magento模型类重写问题


magento model class rewrite issue

我使用的是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> 

这个是我的class

应用程序/代码/地方/Mypackage/Mymodule里/模型/目录/产品

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
    }
任何解决方案或提示都会对我有帮助。

您需要扩展和覆盖这个表单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

扩展这个类

尝试替换你的

        <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>