无法在扩展Magento模型中调用自定义方法

时间:2014-04-04 01:36:53

标签: magento override

我正在尝试自定义Magento CE 1.6.0.0中定价/分层定价的方式。

我已按照以下链接的第二篇文章中的说明覆盖Mage_Catalog_Model_Product_Type_Price

http://www.magentocommerce.com/boards/viewthread/16829/

以下是我的自定义模型类:

class PHC_Price_Model_Price extends Mage_Catalog_Model_Product_Type_Price {
    public function getPrice() {
        echo "overridden getPrice method called<br>";
    }

    public function getPHCDisplayPrice($product) {
        echo "custom price function called<br>";
    }
}

我能够从我的模板文件中成功调用重写的getPrice()函数,如下所示:

$product = Mage::getModel("catalog/product")->load($_product->entity_id);
$displayPrice = $product->getPrice();

但是,当我尝试使用

调用自定义价格函数时
$product = Mage::getModel("catalog/product")->load($_product->entity_id);
$displayPrice = $product->getPHCDisplayPrice();

我绝对没有。谁能告诉我我错过了什么?

1 个答案:

答案 0 :(得分:1)

您没有得到结果是正常的。如果这有效,我会感到惊讶。

您正在覆盖课程Mage_Catalog_Model_Product_Type_Price,但在您的示例中,$product变量是Mage_Catalog_Model_Product的实例。该类没有方法getPHCDisplayPrice,它调用__call方法并返回null。

您偶然致电getPrice时会得到预期的结果。这是因为getPrice中的Mage_Catalog_Model_Product方法如下所示:

public function getPrice()
{
    if ($this->_calculatePrice || !$this->getData('price')) {
        return $this->getPriceModel()->getPrice($this);
    } else {
        return $this->getData('price');
    }
}

因此,当您调用它时,它会调用$this->getPriceModel()->getPrice($this)$this->getPriceModel()返回您班级的实例。