I have a custom module and I have a working grid to menage the module items in the admin.
My module file structore is : app\code\local\G4R\GroupSales\Block\Adminhtml\Groupsale\
I want to add an edit form so I can view and edit each item in the grid.
I followed this tutorial : http://www.magentocommerce.com/wiki/5_-_modules_and_development/0_-_module_development_in_magento/custom_module_with_custom_database_table#part_2_-_backend_administration
but when the edit page loads, instead of the tab content I get an error :
Fatal error: Call to a member function setData() on a non-object in C:\xampp\htdocs\mystore\app\code\core\Mage\Adminhtml\Block\Widget\Form\Container.php on line 129
This is my code :
/app/code/local/G4R/GroupSales/Block/Adminhtml/Groupsale/Edit.php
<?php
class G4R_GroupSales_Block_Adminhtml_Groupsale_Edit extends Mage_Adminhtml_Block_Widget_Form_Container
{
public function __construct()
{
parent::__construct();
$this->_objectId = 'id';
$this->_blockGroup = 'groupsale';
$this->_controller = 'adminhtml_groupsales';
$this->_updateButton('save', 'label', Mage::helper('groupsales')->__('Save Item'));
$this->_updateButton('delete', 'label', Mage::helper('groupsales')->__('Delete Item'));
}
public function getHeaderText()
{
if( Mage::registry('groupsale_data') && Mage::registry('groupsale_data')->getId() ) {
return Mage::helper('groupsales')->__("Edit Item '%s'", $this->htmlEscape(Mage::registry('groupsale_data')->getTitle()));
} else {
return Mage::helper('groupsales')->__('Add Item');
}
}
}
/app/code/local/G4R/GroupSales/Block/Adminhtml/Groupsale/Edit/Form.php :
<?php
class G4R_GroupSales_Block_Adminhtml_Groupsale_Edit_Form extends Mage_Adminhtml_Block_Widget_Form
{
protected function _prepareForm()
{
$form = new Varien_Data_Form(array(
'id' => 'edit_form',
'action' => $this->getUrl('*/*/save', array('id' => $this->getRequest()->getParam('id'))),
'method' => 'post',
)
);
$form->setUseContainer(true);
$this->setForm($form);
return parent::_prepareForm();
}
}
/app/code/local/G4R/GroupSales/Block/Adminhtml/Groupsale/Edit/Tabs.php:
<?php
class G4R_GroupSales_Block_Adminhtml_Groupsale_Edit_Tabs extends Mage_Adminhtml_Block_Widget_Tabs
{
public function __construct()
{
parent::__construct();
$this->setId('groupsales_groupsale_tabs');
$this->setDestElementId('edit_form');
$this->setTitle(Mage::helper('groupsales')->__('Groupsale Information'));
}
protected function _beforeToHtml()
{
$this->addTab('form_section', array(
'label' => Mage::helper('groupsales')->__('Item Information 1'),
'title' => Mage::helper('groupsales')->__('Item Information 2'),
'content' => $this->getLayout()->createBlock('groupsales/adminhtml_groupsale_edit_tab_form')->toHtml(),
));
return parent::_beforeToHtml();
}
}
/app/code/local/G4R/GroupSales/Block/Adminhtml/Groupsale/Edit/Tab/Form.php :
<?php
class G4R_GroupSales_Block_Adminhtml_Groupsale_Edit_Tab_Form extends Mage_Adminhtml_Block_Widget_Form
{
protected function _prepareForm()
{
$form = new Varien_Data_Form();
$this->setForm($form);
$fieldset = $form->addFieldset('groupsales_form', array('legend'=>Mage::helper('groupsales')->__('Item information 3')));
// $fieldset->addField('title', 'text', array(
// 'label' => Mage::helper('groupsales')->__('Title'),
// 'class' => 'required-entry',
// 'required' => true,
// 'name' => 'title',
// ));
//
if ( Mage::getSingleton('adminhtml/session')->getGroupsaleData() )
{
$form->setValues(Mage::getSingleton('adminhtml/session')->getGroupsaleData());
Mage::getSingleton('adminhtml/session')->setGroupsaleData(null);
} elseif ( Mage::registry('groupsale_data') ) {
$form->setValues(Mage::registry('groupsale_data')->getData());
}
return parent::_prepareForm();
}
}
/app/code/local/G4R/GroupSales/controllers/Adminhtml/GroupsaleController.php :
<?php
class G4R_GroupSales_Adminhtml_GroupsaleController extends Mage_Adminhtml_Controller_Action
{
protected function _initAction()
{
$this->loadLayout()
->_setActiveMenu('groupsale/items')
->_addBreadcrumb(Mage::helper('adminhtml')->__('Items Manager'), Mage::helper('adminhtml')->__('Item Manager'));
return $this;
}
public function indexAction() {
$this->_initAction();
$this->_addContent($this->getLayout()->createBlock('groupsales/adminhtml_groupsale'));
$this->renderLayout();
}
public function editAction()
{
$groupsaleId = $this->getRequest()->getParam('id');
$groupsaleModel = Mage::getModel('groupsales/groupsale')->load($groupsaleId);
if ($groupsaleModel->getId() || $groupsaleId == 0) {
Mage::register('groupsale_data', $groupsaleModel);
$this->loadLayout();
$this->_setActiveMenu('groupsale/items');
$this->_addBreadcrumb(Mage::helper('adminhtml')->__('Item Manager'), Mage::helper('adminhtml')->__('Item Manager'));
$this->_addBreadcrumb(Mage::helper('adminhtml')->__('Item News'), Mage::helper('adminhtml')->__('Item News'));
$this->getLayout()->getBlock('head')->setCanLoadExtJs(true);
$this->_addContent($this->getLayout()->createBlock('groupsales/adminhtml_groupsale_edit'))
->_addLeft($this->getLayout()->createBlock('groupsales/adminhtml_groupsale_edit_tabs'));
$this->renderLayout();
} else {
Mage::getSingleton('adminhtml/session')->addError(Mage::helper('groupsales')->__('Item does not exist'));
$this->_redirect('*/*/');
}
}
public function newAction()
{
$this->_forward('edit');
}
public function saveAction()
{
if ( $this->getRequest()->getPost() ) {
try {
$postData = $this->getRequest()->getPost();
$groupsaleModel = Mage::getModel('groupsales/groupsale');
$groupsaleModel->setId($this->getRequest()->getParam('id'))
->setTitle($postData['title'])
->setContent($postData['content'])
->setStatus($postData['status'])
->save();
Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('adminhtml')->__('Item was successfully saved'));
Mage::getSingleton('adminhtml/session')->setGroupsaleData(false);
$this->_redirect('*/*/');
return;
} catch (Exception $e) {
Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
Mage::getSingleton('adminhtml/session')->setGroupsaleData($this->getRequest()->getPost());
$this->_redirect('*/*/edit', array('id' => $this->getRequest()->getParam('id')));
return;
}
}
$this->_redirect('*/*/');
}
public function deleteAction()
{
if( $this->getRequest()->getParam('id') > 0 ) {
try {
$groupsaleModel = Mage::getModel('groupsales/groupsale');
$groupsaleModel->setId($this->getRequest()->getParam('id'))
->delete();
Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('adminhtml')->__('Item was successfully deleted'));
$this->_redirect('*/*/');
} catch (Exception $e) {
Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
$this->_redirect('*/*/edit', array('id' => $this->getRequest()->getParam('id')));
}
}
$this->_redirect('*/*/');
}
/**
* Product grid for AJAX request.
* Sort and filter result for example.
*/
public function gridAction()
{
$this->loadLayout();
$this->getResponse()->setBody(
$this->getLayout()->createBlock('importedit/adminhtml_groupsales_grid')->toHtml()
);
}
}
Any ideas what is the cause for the error?