我在覆盖产品方面面临问题 - >类型 - > Magento的price.php模型。
这是我的app/etc/config.xml
<?xml version="1.0"?>
<config>
<modules>
<softweb_catalog>
<active>true</active>
<codepool>local</codepool>
</softweb_catalog>
</modules>
</config>
这是
app/code/local/Softweb/Catalog/etc/config.xml
<?xml version="1.0"?>
<config>
<modules>
<softweb_catalog>
<version>0.1</version>
</softweb_catalog>
</modules>
<global>
<models>
<catalog>
<class>Softweb_Catalog_Model</class>
</catalog>
<catalog>
<rewrite>
<product_type_price>Softweb_Catalog_Model_Product_Type_Price</product_type_price>
</rewrite>
</catalog>
</models>
</global>
</config>
现在Price.php路径为app/code/local/Softweb/Catalog/Model/Product/Type/Price.php
class Softweb_Catalog_Model_Product_Type_Price extends Mage_Catalog_Model_Product_Type_Price
{
public function getPrice($product)
{
die('function called');
}
}
我不知道我错过了什么......
PS我使用的是magento 1.9.0.1
答案 0 :(得分:3)
问题在于
<models>
<catalog>
<class>Softweb_Catalog_Model</class>
</catalog>
....
</models>
在这里,您要定义模型。 catalog
是您为模块模型提供的参考。假设您的模块的模型目录中有一个文件Foo.php
。那是
Softweb
|
----------Catalog
|
----------- etc
| |
| ---------- config.xml
|
----------- Model
|
----------- Foo.php
假设您的Foo.php
拥有方法Foo()
方法。
<?php
class Softweb_Catalog_Model_Foo extends Mage_Core_Model_Abstract
{
public function Foo()
{
//some foo codes here
//returns something
}
}
如何获得模型中定义的Foo()
方法?根据您的模型定义,它应该看起来像这样
$foo = Mage::getModel('catalog/foo')->Foo();
但是模型引用应该是唯一的。因此,您无法使用catalog
作为模型参考。因为它已经在Mage_Catalog
核心模块中使用了。见这个
Location:app/code/core/Mage/Catalog/etc/config.xml
<global>
<models>
<catalog>
<class>Mage_Catalog_Model</class>
<resourceModel>catalog_resource</resourceModel>
</catalog>
---------
</models>
--------
</global>
因此,如果您需要使用模型,则应该为模型提供唯一的参考。那是
<models>
<softweb_catalog>
<class>Softweb_Catalog_Model</class>
</softweb_catalog>
<catalog>
<rewrite>
<product_type_price>Softweb_Catalog_Model_Product_Type_Price</product_type_price>
</rewrite>
</catalog>
</models>
此处您的模块使用softweb_catalog
引用,并且是唯一的。现在,您可以像这样访问Foo()
方法。
Mage::getModel('softweb_catalog/foo')->Foo();
它还会重写您所需的模型文件。但由于您的模块不包含任何模型文件,因此不需要此代码。你只需要这个。
<global>
<models>
<catalog>
<rewrite>
<product_type_price>Softweb_ConstPrice_Model_Price</product_type_price>
</rewrite>
</catalog>
</models>
</global>
它允许您重写Mage_Catalog_Model_Product_Type_Price
课程。希望这能帮助您理解代码中的错误。
答案 1 :(得分:0)
我通过这种方式整理出来,
创建app/etc/Softweb_All.xml
<?xml version="1.0"?>
<config>
<modules>
<Softweb_ConstPrice>
<active>true</active>
<codePool>local</codePool>
</Softweb_ConstPrice>
然后app/code/local/Softweb/ConstPrice/etc/config.xml
<?xml version="1.0" encoding="utf-8"?>
<config>
<modules>
<Softweb_ConstPrice>
<version>0.1.0</version>
</Softweb_ConstPrice>
</modules>
<global>
<models>
<catalog>
<rewrite>
<product_type_price>Softweb_ConstPrice_Model_Price</product_type_price>
</rewrite>
</catalog>
</models>
</global>
</config>
然后在app/code/local/Softweb/ConstPrice/Model/Price.php
class Softweb_ConstPrice_Model_Price extends Mage_Catalog_Model_Product_Type_Price
{
public function getPrice($product)
{
return 50.00;
}
}
不知道为什么我的问题代码无效。 :(