在magento中压倒价格模型

时间:2014-07-25 06:54:30

标签: php magento magento-1.9

我在覆盖产品方面面临问题 - >类型 - > 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

2 个答案:

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

下的Price.php
     class Softweb_ConstPrice_Model_Price extends Mage_Catalog_Model_Product_Type_Price
     {
         public function getPrice($product)
         {
             return 50.00;
         }
     }

不知道为什么我的问题代码无效。 :(