我正在尝试自定义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();
我绝对没有。谁能告诉我我错过了什么?
答案 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()
返回您班级的实例。