我创建了自定义模块,因为我只是覆盖了 Mage_Catalog_Block_Product 上课 getPrice(). 。但是它正在将错误调用返回到非对象上的成员函数getProductId()吗?

我的PHP代码是:

//控制器

<?php
class Course_Mca_IndexController extends Mage_Core_Controller_Front_Action
{
    public function indexAction()
    {
        $this->loadLayout();
        $this->renderLayout();
    }
}

//块文件

<?php    

class Course_Mca_Block_Products extends Mage_Catalog_Block_Product
{
    public function getPrice()
    {
          return parent::getPrice();
    }
}

//web.phtml文件

<?php echo $this->getPrice() ?>

//layout.xml文件

<?xml version="1.0"?>
<layout version="0.1.0">
    <mca_index_index>
        <reference name="content">
            <block type="mca/products" name="mca_mca" template="mca/web.phtml"></block>
        </reference>
    </mca_index_index>
</layout>

//course_mca.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Course_Mca>
            <active>true</active>
            <codePool>local</codePool>
            <depends>
                <Mage_Catalog/>
            </depends>
        </Course_Mca>
    </modules>
</config>

//config.xml

<blocks>
<!-- it's not working -->
        <!-- <catalog>
              <rewrite>
                  <product>Course_Mca_Block_Products</product>
              </rewrite>
          </catalog>-->
<!-- it's working -->
            <mca>
               <class>Course_Mca_Block</class>
           </mca>
    </blocks>

谁能告诉我我在哪里出错?

提前致谢。

有帮助吗?

解决方案

看原始 getPrice 方法。
看起来像这样:

public function getPrice()
{
    return $this->getProduct()->getPrice();
}

更深入地挖掘您最终 Mage_Catalog_Block_Product::getProduct() 看起来这样:

public function getProduct()
{
    if (!$this->getData('product') instanceof Mage_Catalog_Model_Product) {
        if ($this->getData('product')->getProductId()) {
            $productId = $this->getData('product')->getProductId();
        }
        if ($productId) {
            $product = Mage::getModel('catalog/product')->load($productId);
            if ($product) {
                $this->setProduct($product);
            }
        }
    }
    return $this->getData('product');
}

就你而言 $this->getData('product') 返回 null, ,从那以后 null 不是 Mage_Catalog_Model_Product 您输入第一个 if 声明和它在这一行上崩溃: if ($this->getData('product')->getProductId()) { 因为你不能打电话 null->getProductId().

任何实例 Mage_Catalog_Block_Product 如果您将产品附加到它,则很有意义。考虑到您的布局文件,我可以得出结论,您正在尝试使用块而没有任何产品。

这是你的 Mca_IndexController::indexAction() 应该看:

$this->loadLayout();
$block = $this->getLayout()->getBlock('mca_mca');
if ($block){
    $productId = 15;//for example
    $product = Mage::getModel('catalog/product')->setStoreId(Mage::app()->getStore()->getId())->load($productId);
    $block->setProduct($product);
}
$this->renderLayout();
许可以下: CC-BY-SA归因
scroll top