Magento Custom Block zeigt einen tödlichen Fehler an: Rufen Sie eine Mitgliedsfunktionssiegel () auf einem Nicht-Objekt auf

magento.stackexchange https://magento.stackexchange.com/questions/10716

Frage

Ich habe einen Block in meinem benutzerdefinierten Modul erstellt, aber es funktioniert nicht. Mein Modul funktioniert gut, aber mein Block funktioniert nicht, wenn ich meinen Block von footer.phtml-Datei aufrufe, sie zeigt 'Fataler Fehler: Rufen Sie eine Mitgliedsfunktionssiegel () auf einem Nicht-Objekt an. Eigentlich möchte ich mit meinem benutzerdefinierten Block eine Nachricht in meinem Frontend anzeigen. Ich habe meinen Code unten erwähnt

lokal/monojit/custom/controller/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();
    }

}
?>

lokal/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;
     }   
} 
?>

Lokal/monojit/benutzerdefiniert/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>

Ich habe ein Thema (kopiert modernes Thema) in Frontend/Standard/Monojit geändert, die die Konfiguration der Administratordesign verändert haben, und erstellt auch den notwendigen Ordner in Skin.Screenshot Pic enter image description here

Design/Frontend/Standard/Monojit/Vorlage/benutzerdefinierte/test.phtml

//want to fetch data from my block 
<p>This is your custom block called programatically.</p>

Localhost/Magento/Index.php/benutzerdefinierte Seite zeigt meine Nachricht richtig an

<?php echo $this->getLayout()->createBlock('custom/mycustomblock')->setTemplate('custom/test.phtml')->toHtml(); ?>

Es zeigt 'Fatal ERROR: Ruf auf eine Mitgliedsfunktions-Siesabteilung () auf einem Nicht-Objekt' Muss ich eine Layout.xml-Datei erstellen? Bitte helfen Sie mir, wie ich mein Problem beheben kann. Danke

War es hilfreich?

Lösung

Setzen Sie den folgenden Code unter <blocks> Knoten in Ihrer config.xml und versuchen Sie es.

<global>
    <blocks>
        <custom>
             <class>Monojit_Custom_Block</class>
        </custom>
. . . . 
</global>

Andere Tipps

getLayout () ist keine Methode des Fußzeile -Blockcodes, daher ist er falsch, kein Objekt.

Auf diese Weise einen Kinderblock zu schaffen, ist keine gute Praxis. Sie sollten Ihre Blockdefinition in Ihre Layouts hinzufügen.

In Ihrem Fall würden Sie dies in Ihrer Local.xml -Layout -Datei hinzufügen:

<reference name="footer">
   <block type="custom/mycustomblock" name="custom.block" as="custom_block" template="custom/test.phtml"/>
</reference>

Dann können Sie in Ihrer Fußzeile.phtml verwenden $this->getChildHtml('custom_block');

Wenn Sie aus irgendeinem Grund mit dem Platzieren von Code in die Vorlage fortsetzen möchten, passen Sie Ihre Zeile darauf an:

<?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();

    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top