Magento Fatal error blocco personalizzato spettacoli: chiamata a un setTemplate funzione membro () su un non-oggetto

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

Domanda

Ho creato un blocco dentro il mio modulo personalizzato, ma non funziona. Il mio modulo sta funzionando benissimo, ma il mio blocco non funziona quando chiamo il mio blocco da file footer.phtml E 'Fatal error: chiamata a un setTemplate funzione membro () su un non-oggetto' spettacoli. In realtà io voglio mostrare qualche messaggio nel mio frontend usando le mie block.I personalizzati hanno menzionato il mio codice seguente

/ Monojit / custom / regolatori locali / 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();
    }

}
?>

locale / Monojit / Personalizzato / blocchi / 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;
     }   
} 
?>

locale / Monojit / Personalizzato / 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>

Ho creato un tema (tema moderno copiato) all'interno frontend / default / monojit configurazione di progettazione Cambiato admin come pure, cartelle necessarie creati così all'interno skin.screenshot pic entrare descrizione dell'immagine qui

disegno / frontend / default / monojit / template / custom / test.phtml

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

pagina mostra localhost / Magento / index.php / personalizzati mio messaggio in modo corretto, ma quando chiamo il mio blocco da pagina footer.phtml

<?php echo $this->getLayout()->createBlock('custom/mycustomblock')->setTemplate('custom/test.phtml')->toHtml(); ?>
'Fatal error: chiamata a una funzione setTemplate membro () su un non-oggetto'

Spettacoli Do Ho bisogno di creare qualsiasi tipo di file layout.xml? Please help me come posso risolvere i miei issue.thanks

È stato utile?

Soluzione

Inserire il seguente codice sotto il nodo <blocks> in config.xml e provare.

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

Altri suggerimenti

getLayout () non è un metodo del codice a blocco piè, quindi è falso, non un oggetto.

La creazione di un blocco bambino in questo modo non è una buona pratica. Si dovrebbe aggiungere la tua definizione di blocco nel vostro layout.

nel tuo caso, si dovrebbe aggiungere questo nel vostro file di layout local.xml:

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

Poi, nel tuo footer.phtml è possibile utilizzare $this->getChildHtml('custom_block');

Se, per qualsiasi motivo si vuole continuare con l'immissione di codice nel modello, regolare la linea a questa:

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

    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top