Magento Custom Block показывает фатальную ошибку: вызовите функцию элемента SetulmentAte () на необъекте
-
16-10-2019 - |
Вопрос
Я создал один блок в своем пользовательском модуле, но он не работает. Мой модуль работает нормально, но мой блок не работает, когда я называю свой блок из файла cool.phtml, он показывает «фатальную ошибку: вызовите на функцию члена Centustrate () на необъектив». На самом деле я хочу показать какое -то сообщение на моем фронте, используя свой пользовательский блок. Я упомянул свой код ниже
local/monojit/custom/controllers/indexcontroller.php
<?php
class Monojit_Custom_IndexController extends Mage_Core_Controller_Front_Action
{
public function indexAction()
{
$this->loadLayout();
$block = $this->getLayout()->createBlock(
'Mage_Core_Block_Template',
'my_block_name_here',
array('template' => 'custom/test.phtml')
);
$this->getLayout()->getBlock('content')->append($block);
$this->renderLayout();
}
}
?>
Local/monojit/custom/block/mycustomblock.php
<?php
class Monojit_Custom_Block_Mycustomblock extends Mage_Core_Block_Template
{
//public function _prepareLayout()
// {
// return parent::_prepareLayout();
// }
public function _construct() {
parent::_construct();
$this->setTemplate('custom/test.phtml');
}
public function getmessage()
{
$msg = "showing my custom block";
return $msg;
}
}
?>
Local/monojit/custom/etc/config.xml
<?xml version="1.0"?>
<config>
<global>
<modules>
<monojit_custom>
<version>0.1.0</version>
</monojit_custom>
</modules>
<blocks>
<custom>
<rewrite>
<custom>Monojit_Custom_Block_Mycustomblock</custom>
</rewrite>
</custom>
</blocks>
<helpers>
<custom>
<class>Monojit_Custom_Helper</class>
</custom>
</helpers>
</global>
<frontend>
<routers>
<custom>
<use>standard</use>
<args>
<module>Monojit_Custom</module>
<frontName>custom</frontName>
</args>
</custom>
</routers>
<layout>
<updates>
<custom>
<file>custom.xml</file>
</custom>
</updates>
</layout>
</frontend>
</config>
Я создал одну тему (скопированная современная тема) внутри Frontend/Default/Monojit изменила конфигурацию дизайна администратора, а также создала необходимую папку, а также внутри Skin.creenshot Pic
Design/frontend/default/monojit/template/custom/test.phtml
//want to fetch data from my block
<p>This is your custom block called programatically.</p>
Localhost/Magento/Index.php/Пользовательская страница показывает мое сообщение правильно, но когда я называю свой блок от toom.phtml Page
<?php echo $this->getLayout()->createBlock('custom/mycustomblock')->setTemplate('custom/test.phtml')->toHtml(); ?>
Он показывает «фатальную ошибку: вызовите на функцию члена Centustrate () на unpject». Мне нужно ли создать любой файл mayout.xml? Пожалуйста, помогите мне, как я могу решить свою проблему. Спасибо
Решение
Поместите следующий код под <blocks>
Узел в вашем config.xml и попробуйте.
<global>
<blocks>
<custom>
<class>Monojit_Custom_Block</class>
</custom>
. . . .
</global>
Другие советы
getLayout () не является методом кода блока нижнего колонтитула, поэтому он является ложным, а не объектом.
Создание детского блока таким образом не является хорошей практикой. Вы должны добавить определение блока в свои макеты.
В вашем случае вы добавите это в свой файл Local.xml Mayout:
<reference name="footer">
<block type="custom/mycustomblock" name="custom.block" as="custom_block" template="custom/test.phtml"/>
</reference>
затем в вашем нижнем файле. Phtml вы можете использовать $this->getChildHtml('custom_block');
Если по какой -то причине вы хотите продолжить с размещением кода в шаблоне, отрегулируйте свою строку до этого:
<?php echo Mage::getSingleton('core/layout')->createBlock('custom/mycustomblock')->setTemplate('custom/test.phtml')->toHtml(); ?>
<?php
class My_Booking_IndexController extends Mage_Core_Controller_Front_Action
{
public function indexAction()
{
$this->loadLayout();
$this->renderLayout();
echo $this->getLayout()->createBlock('core/template')->setTemplate('booking/booking.phtml')->toHtml();
}
}