Вызовите функцию члена getProductId () на необъекте?
-
16-10-2019 - |
Вопрос
Я создал пользовательский модуль, в котором я только что переопределяю 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();