I made a module and has been registered too.. Its working completely fine until I wanted to create a custom grid...I have the below code written in the necessary files, but an exception is thrown that I have invalid block type specified. I ahve gone through it many times but I could not figure out the mistake.
/home/vhost/_default/magento1.9.2/app/code/local/Maven/Questionanswer/Block/Adminhtml/Questionanswer
<?php
class Maven_Questionanswer_Block_Adminhtml_Questionanswer_Question extends Mage_Adminhtml_Block_Widget_Grid_Container
{
public function __construct()
{
$this->_blockGroup = 'questionanswer';
$this->_controller = 'adminhtml_question';
$this->_headerText = Mage::helper('questionanswer')->__('questionanswer');
$this->_addButtonLabel = 'Add Question';
parent::__construct();
}
}
?>
/home/vhost/_default/magento1.9.2/app/code/local/Maven/Questionanswer/Block/Adminhtml/Questionanswer/Questionanswer
<?php
class Maven_Questionanswer_Block_Adminhtml_Questionanswer_Questionanswer_Grid extends Mage_Adminhtml_Block_Widget_Grid
{
public function __construct()
{
parent::__construct();
$this->setId('questionGrid');
$this->setDefaultSort('question_id');
$this->setDefaultDir('DESC');
$this->setSaveParametersInSession(true);
}
protected function _prepareCollection()
{
$collection = Mage::getModel('questionanswer/question')->getCollection();
$this->setCollection($collection);
parent::_prepareCollection();
return $this;
}
protected function _prepareColumns()
{
$helper = Mage::helper('questionanswer');
$this->addColumn('question_id',
array(
'header' => 'ID',
'align' =>'right',
'width' => '50px',
'index' => 'id_pfay_test',
));
$this->addColumn('username',
array(
'header' => 'Username',
'align' =>'left',
'index' => 'username',
));
$this->addColumn('email', array(
'header' => 'email',
'align' =>'left',
'index' => 'email',
));
$this->addColumn('question', array(
'header' => 'question',
'align' =>'left',
'index' => 'question',
));
$this->addColumn('status', array(
'header' => 'status',
'align' =>'left',
'index' => 'status',
));
return parent::_prepareColumns();
}
public function getGridUrl()
{
return $this->getUrl('*/*/grid', array('_current'=>true));
}
}
**/home/vhost/_default/magento1.9.2/app/code/local/Maven/Questionanswer/controllers/Adminhtml**
<?php
class Maven_Questionanswer_Adminhtml_QuestionController extends Mage_Adminhtml_Controller_Action
{
public function indexAction()
{
$this->_title($this->__('Question'))->_title($this->__('Question Answer'));
$this->loadLayout();
$this->_setActiveMenu('questionanswer/question');
$this->_addContent($this->getLayout()->createBlock('maven_questionanswer/adminhtml_questionanswer_question'));
$this->renderLayout();
}
public function gridAction()
{
$this->loadLayout();
$this->getResponse()->setBody(
$this->getLayout()->createBlock('maven_questionanswer/adminhtml_questionanswer_questionanswer_grid')->toHtml());
}
// public function exportInchooCsvAction()
// {
// $fileName = 'orders_inchoo.csv';
// $grid = $this->getLayout()->createBlock('inchoo_orders/adminhtml_sales_order_grid');
// $this->_prepareDownloadResponse($fileName, $grid->getCsvFile());
// }
// public function exportInchooExcelAction()
// {
// $fileName = 'orders_inchoo.xml';
// $grid = $this->getLayout()->createBlock('inchoo_orders/adminhtml_sales_order_grid');
// $this->_prepareDownloadResponse($fileName, $grid->getExcelFile($fileName));
// }
}
?>
/home/vhost/_default/magento1.9.2/app/code/local/Maven/Questionanswer/etc/config.xml
<blocks>
<questionanswer>
<class>Maven_Questionanswer_Block</class>
</questionanswer>
</blocks>
<admin>
<routers>
<adminhtml>
<use>admin</use>
<args>
<modules>
<maven_questionanswer>Maven_Questionanswer_Adminhtml</maven_questionanswer>
</modules>
</args>
</adminhtml>
</routers>
</admin>
and in adminhtml.xml
<?xml version="1.0" encoding="UTF-8"?>
<adminhtml>
<menu>
<questionanswer translate="title" module="questionanswer">
<title>Question Answer</title>
<sort_order>60</sort_order>
<children>
<questionanswer_question module="questionanswer">
<title>Question</title>
<action>adminhtml/question</action>
</questionanswer_question>
</children>
</questionanswer>
</menu>
<acl>
<resources>
<all>
<title>Allow Everything</title>
</all>
<admin>
<children>
<system>
<children>
<config>
<children>
<questionanswer_section>
<title>Question-Answer</title>
</questionanswer_section>
</children>
</config>
</children>
</system>
</children>
</admin>
</resources>
</acl>
</adminhtml>
I have also created a blank helper...where am I going wrong?
It seems your directory structure is not proper according to Grid
block. Please follow below steps to fix your issue:
Step 1: Relocate your Grid.php
file from:
/home/vhost/_default/magento1.9.2/app/code/local/Maven/Questionanswer/Block/Adminhtml/Questionanswer/Questionanswer
to
/home/vhost/_default/magento1.9.2/app/code/local/Maven/Questionanswer/Block/Adminhtml/Questionanswer/
Step 2: Change your grid class name from:
Maven_Questionanswer_Block_Adminhtml_Questionanswer_Questionanswer_Grid
to
Maven_Questionanswer_Block_Adminhtml_Questionanswer_Grid
Step 3: Clear your Magento cache and try to run load the grid page.
Updates:
Please change:
$this->getLayout()->createBlock('maven_questionanswer/adminhtml_questionanswer_questionanswer_grid')->toHtml());
With
$this->getLayout()->createBlock('questionanswer/adminhtml_questionanswer_questionanswer_grid')->toHtml());
As you declared your block as questionanswer
rather than maven_questionanswer
.