I'm using Magento 1.9.0.1 and right now i'm developing a new magento extension.
So far i've created new adminhtml page with grid table that is fetching data from custom MySQL table:
Here is the page:
![enter image description here][1]
This page is fetching data from custom MySQL table VivasIndustries_SmsNotification
here is the structure of it:
![enter image description here][2]
Let me show you my extension files:
I have in: /app/code/community/VivasIndustries/SmsNotification/etc/config.xml:
<?xml version="1.0"?>
<config>
<modules>
<VivasIndustries_SmsNotification>
<version>0.1.0</version>
</VivasIndustries_SmsNotification>
</modules>
<global>
<models>
<smsnotification>
<class>VivasIndustries_SmsNotification_Model</class>
<resourceModel>vivasindustries_smsnotification_resource</resourceModel>
</smsnotification>
<vivasindustries_smsnotification_resource>
<class>VivasIndustries_SmsNotification_Model_Resource</class>
<entities>
<smsnotification>
<table>VivasIndustries_SmsNotification</table>
</smsnotification>
</entities>
</vivasindustries_smsnotification_resource>
</models>
<resources>
<smsnotification_setup>
<setup>
<module>VivasIndustries_SmsNotification</module>
</setup>
<connection>
<use>core_setup</use>
</connection>
</smsnotification_setup>
<smsnotification_read>
<connection>
<use>core_read</use>
</connection>
</smsnotification_read>
<smsnotification_write>
<connection>
<use>core_write</use>
</connection>
</smsnotification_write>
</resources>
<events>
<sales_order_save_after>
<observers>
<vivasindustries_smsnotification>
<class>smsnotification/observer</class>
<method>orderSaved</method>
</vivasindustries_smsnotification>
</observers>
</sales_order_save_after>
</events>
<helpers>
<smsnotification>
<class>VivasIndustries_SmsNotification_Helper</class>
</smsnotification>
</helpers>
<blocks>
<smsnotification>
<class>VivasIndustries_SmsNotification_Block</class>
</smsnotification>
</blocks>
</global>
<adminhtml>
<acl>
<resources>
<all>
<title>Allow Everything</title>
</all>
<admin>
<children>
<system>
<children>
<config>
<children>
<vivas>
<title>Vivas - All</title>
</vivas>
</children>
</config>
</children>
</system>
</children>
</admin>
</resources>
</acl>
</adminhtml>
<admin>
<routers>
<adminhtml>
<args>
<modules>
<VivasIndustries_SmsNotification before="Mage_Adminhtml">VivasIndustries_SmsNotification_Adminhtml</VivasIndustries_SmsNotification>
</modules>
</args>
</adminhtml>
</routers>
</admin>
</config>
Here is what i have in: /app/code/community/VivasIndustries/SmsNotification/Block/Adminhtml/Sms/Status.php:
<?php
class VivasIndustries_SmsNotification_Block_Adminhtml_Sms_Status extends Mage_Adminhtml_Block_Widget_Grid_Container
{
public function __construct()
{
$this->_blockGroup = 'smsnotification';
$this->_controller = 'adminhtml_sms_status';
$this->_headerText = Mage::helper('smsnotification')->__('Send SMS on Order Status Changes');
$this->_addButtonLabel = Mage::helper('smsnotification')->__('Create new SMS Rule');
parent::__construct();
}
protected function _prepareLayout()
{
$this->setChild( 'grid',
$this->getLayout()->createBlock( $this->_blockGroup.'/' . $this->_controller . '_grid',
$this->_controller . '.grid')->setSaveParametersInSession(true) );
return parent::_prepareLayout();
}
}
Here is what i have in: /app/code/community/VivasIndustries/SmsNotification/Block/Adminhtml/Sms/Status/Grid.php:
<?php
class VivasIndustries_SmsNotification_Block_Adminhtml_Sms_Status_Grid extends Mage_Adminhtml_Block_Widget_Grid
{
public function __construct()
{
parent::__construct();
$this->setId('smsnotification_grid');
$this->setDefaultSort('id');
$this->setDefaultDir('DESC');
$this->setSaveParametersInSession(true);
$this->setUseAjax(true);
}
protected function _prepareCollection()
{
$collection = Mage::getResourceModel('smsnotification/smsnotification_collection');
$this->setCollection($collection);
return parent::_prepareCollection();
}
protected function _prepareColumns()
{
$this->addColumn('id', array(
'header' => Mage::helper('smsnotification')->__('ID'),
'align' =>'right',
'width' => '50px',
'index' => 'id',
));
$this->addColumn('Receiver', array(
'header' => Mage::helper('smsnotification')->__('Receiver'),
'align' =>'left',
'index' => 'Receiver',
));
$this->addColumn('Phone', array(
'header' => Mage::helper('smsnotification')->__('Phone'),
'align' =>'left',
'index' => 'Phone',
));
$this->addColumn('Date', array(
'header' => Mage::helper('smsnotification')->__('Date'),
'align' =>'left',
'index' => 'Date',
));
return parent::_prepareColumns();
}
public function getRowUrl($row)
{
return $this->getUrl('*/*/edit', array('id'=>$row->getId()));
}
}
Here is what i have in: /app/code/community/VivasIndustries/SmsNotification/controllers/Adminhtml/SmsorderstatusesController.php:
<?php
class VivasIndustries_SmsNotification_Adminhtml_SmsorderstatusesController extends Mage_Adminhtml_Controller_Action
{
public function indexAction()
{
$this->_title($this->__('SMS Center'))->_title($this->__('SMS Center'));
$this->loadLayout();
$this->_setActiveMenu('vivassms');
$this->_addContent($this->getLayout()->createBlock('smsnotification/adminhtml_sms_status'));
$this->renderLayout();
}
public function gridAction()
{
$this->loadLayout();
$this->getResponse()->setBody(
$this->getLayout()->createBlock('smsnotification/adminhtml_sms_status_grid')->toHtml()
);
}
public function newAction()
{
$this->loadLayout();
$this->_setActiveMenu('vivassms');
$this->renderLayout();
}
public function editAction()
{
$this->_initAction();
// Get id if available
$id = $this->getRequest()->getParam('id');
$model = Mage::getModel('smsnotification/smsnotification');
$this->_initAction()
->_addBreadcrumb($id ? $this->__('Edit Baz') : $this->__('New Baz'), $id ? $this->__('Edit Baz') : $this->__('New Baz'))
->_addContent($this->getLayout()->createBlock('smsnotification/adminhtml_sms_status_edit')->setData('action', $this->getUrl('*/*/save')))
->renderLayout();
}
protected function _initAction()
{
$this->loadLayout()
// Make the active menu match the menu config nodes (without 'children' inbetween)
->_setActiveMenu('vivassms')
->_title($this->__('Sales'))->_title($this->__('Baz'))
->_addBreadcrumb($this->__('Sales'), $this->__('Sales'))
->_addBreadcrumb($this->__('Baz'), $this->__('Baz'));
return $this;
}
protected function _isAllowed()
{
return Mage::getSingleton('admin/session')->isAllowed('sales/foo_bar_baz');
}
}
Right now when i click on Create new SMS Rule
button i get blank page like this:
![enter image description here][3]
What i want to achieve is:
Save
button and i hit it. The data entered in the 3 fields i want to be saved in the MySQL table VivasIndustries_SmsNotification
.Why i receive a blank page when i click on Create new SMS Rule
and how can i make what i want in the two points above?
Thanks in advance!
I have made extension for one input field i.e. 1. Insert Data from Admin 2. Show Collection
Please find the below code may be it will help you.
[root]/app/etc/modules/Mohit_Testmodule.xml
<?xml version="1.0" ?>
<config>
<modules>
<Mohit_Testmodule>
<active>true</active>
<codePool>local</codePool>
</Mohit_Testmodule>
</modules>
</config>
[root]/app/code/local/Mohit/etc/config.xml
<config>
<modules>
<Mohit_Testmodule>
<version>1.6.0.0</version>
<!-- Version number of module -->
</Mohit_Testmodule>
</modules>
<global>
<models>
<testmodule>
<class>Mohit_Testmodule_Model</class>
<resourceModel>testmodule_resource</resourceModel>
</testmodule>
<testmodule_resource>
<class>Mohit_Testmodule_Model_Resource</class>
<entities>
<testmodule>
<table>testmodule</table>
</testmodule>
</entities>
</testmodule_resource>
</models>
<blocks>
<testmodule>
<class>Mohit_Testmodule_Block</class>
</testmodule>
</blocks>
<resources>
<testmodule_setup>
<setup>
<module>Mohit_Testmodule</module>
</setup>
</testmodule_setup>
</resources>
<helpers>
<testmodule>
<class>Mohit_Testmodule_Helper</class>
</testmodule>
</helpers>
</global>
<admin>
<routers>
<testmodule>
<use>admin</use>
<args>
<module>Mohit_Testmodule</module>
<frontName>testmodule</frontName>
</args>
</testmodule>
</routers>
</admin>
</config>
[root]/app/code/local/Mohit/etc/adminhtml.xml
<config>
<menu>
<testmodule module="testmodule">
<title>Testmodule</title>
<sort_order>100</sort_order>
<title>Testmodule</title>
<action>testmodule/manage_testmodule/index</action>
</testmodule>
</menu>
<acl>
<all>
<title>Allow Everything</title>
</all>
<resources>
<admin>
<children>
<testmodule>
<title>Testmodule</title>
<sort_order>100</sort_order>
</testmodule>
<system>
<children>
<config>
<children>
<testmodule>
<title>Testmodule</title>
</testmodule>
</children>
</config>
</children>
</system>
</children>
</admin>
</resources>
</acl>
</config>
[root]/app/code/local/Mohit/sql/testmodule_setup/install-1.6.0.0.php
<?php
$installer = $this;
$installer->startSetup();
$table = $installer->getConnection()
->newTable($installer->getTable('testmodule/testmodule'))
->addColumn('testmodule_id', Varien_Db_Ddl_Table::TYPE_INTEGER, null, array(
'identity' => true,
'unsigned' => true,
'nullable' => false,
'primary' => true,
), 'Testmodule Id')
->addColumn('testmodule_title', Varien_Db_Ddl_Table::TYPE_TEXT, 255, array(
), 'Testmodule title');
$installer->getConnection()->createTable($table);
$installer->endSetup();
[root]/app/code/local/Mohit/Model/Resource/Testmodule.php
<?php
class Mohit_Testmodule_Model_Resource_Testmodule extends Mage_Core_Model_Resource_Db_Abstract
{
protected function _construct()
{
$this->_init('testmodule/testmodule', 'testmodule_id');
}
}
[root]/app/code/local/Mohit/Model/Resource/Testmodule/Collection.php
<?php
class Mohit_Testmodule_Model_Resource_Testmodule_Collection extends Mage_Core_Model_Resource_Db_Collection_Abstract
{
public function _construct()
{
parent::_construct();
$this->_init('testmodule/testmodule');
}
}
[root]/app/code/local/Mohit/Helper/Data.php
<?php
class Mohit_Testmodule_Helper_Data extends Mage_Core_Helper_Abstract
{
}
[root]/app/code/local/Mohit/controllers/Manage/TestmoduleController.php
<?php
class Mohit_Testmodule_Manage_TestmoduleController extends Mage_Adminhtml_Controller_Action
{
public function indexAction()
{
$this->loadLayout();
$this->_setActiveMenu('testmodule/testmodule');
$this->_title("Add New Data");
$this
->_addContent($this->getLayout()->createBlock('testmodule/manage_testmodule_edit'))
->_addLeft($this->getLayout()->createBlock('testmodule/manage_testmodule_edit_tabs'))
;
$this->renderLayout();
}
public function saveAction()
{
$data = $this->getRequest()->getPost();
if ($data) {
$model = Mage::getModel('testmodule/testmodule');
$title = $this->getRequest()->getParam('title');
$model->setTestmoduleTitle($title);
$model->save();
Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('testmodule')->__('We have saved your request'));
$this->_redirect('*/*/');
}
else
{
Mage::getSingleton('adminhtml/session')->addError(Mage::helper('testmodule')->__('Unable to save'));
$this->_redirect('*/*/');
}
}
}
[root]/app/code/local/Mohit/Block/Manage/Testmodule.php
<?php
class Mohit_Testmodule_Block_Manage_Testmodule extends Mage_Adminhtml_Block_Widget_Grid_Container
{
public function __construct()
{
$this->_controller = 'manage_testmodule';
$this->_blockGroup = 'testmodule';
$this->_headerText = Mage::helper('testmodule')->__('Manager');
parent::__construct();
$this->setTemplate('testmodule/testmodule.phtml');
}
protected function _prepareLayout()
{
$addButtonBlock = $this->getLayout()->createBlock('adminhtml/widget_button')
->setData(
array(
'label' => Mage::helper('testmodule')->__('Testmodule'),
'onclick' => "setLocation('" . $this->getUrl('*/*/') . "')",
'class' => 'add',
)
)
;
$this->setChild('add_new_button', $addButtonBlock);
return parent::_prepareLayout();
}
public function getAddNewButtonHtml()
{
return $this->getChildHtml('add_new_button');
}
}
[root]/app/code/local/Mohit/Block/Tesmodule/Edit.php
<?php
class Mohit_Testmodule_Block_Manage_Testmodule_Edit extends Mage_Adminhtml_Block_Widget_Form_Container
{
public function __construct()
{
parent::__construct();
$this->_objectId = 'id';
$this->_blockGroup = 'testmodule';
$this->_controller = 'manage_testmodule';
$this->_updateButton('save', 'label', Mage::helper('testmodule')->__('Save'));
$this->_updateButton('delete', 'label', Mage::helper('testmodule')->__('Delete'));
}
public function getHeaderText()
{
return Mage::helper('testmodule')->__('Test Module');
}
}
[root]/app/code/local/Mohit/Block/Manage/Testmodule/Edit/Tabs.php
<?php
class Mohit_Testmodule_Block_Manage_Testmodule_Edit_Tabs extends Mage_Adminhtml_Block_Widget_Tabs
{
public function __construct()
{
parent::__construct();
$this->setId('testmodule_tabs');
$this->setDestElementId('edit_form');
$this->setTitle(Mage::helper('testmodule')->__('Information'));
}
protected function _beforeToHtml()
{
$this->addTab(
'form_section',
array(
'label' => Mage::helper('testmodule')->__('Information'),
'title' => Mage::helper('testmodule')->__('Information'),
'content' => $this->getLayout()->createBlock('testmodule/manage_testmodule_edit_tab_form')->toHtml(),
)
);
$this->addTab(
'collection_section',
array(
'label' => Mage::helper('testmodule')->__('Collection'),
'title' => Mage::helper('testmodule')->__('Collection'),
'content' => $this->getLayout()->createBlock('testmodule/manage_testmodule_edit_tab_collection')->toHtml(),
)
);
return parent::_beforeToHtml();
}
}
[root]/app/code/local/Mohit/Block/Manage/Testmodule/Edit/Forms.php
<?php
class Mohit_Testmodule_Block_Manage_Testmodule_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();
}
}
[root]/app/code/local/Mohit/Block/Manage/Testmodule/Edit/Tab/Form.php
<?php
class Mohit_Testmodule_Block_Manage_Testmodule_Edit_Tab_Form extends Mage_Adminhtml_Block_Widget_Form
{
protected function _prepareForm()
{
$form = new Varien_Data_Form();
$this->setForm($form);
$fieldset = $form->addFieldset('testmodule_form', array('legend' => Mage::helper('testmodule')->__('Information')));
$fieldset->addField(
'title',
'text',
array(
'label' => Mage::helper('testmodule')->__('Title'),
'class' => 'required-entry',
'required' => true,
'name' => 'title',
)
);
return parent::_prepareForm();
}
}
[root]/app/code/local/Mohit/Block/Manage/Testmodule/Edit/Tab/Collection.php
<?php
class Mohit_Testmodule_Block_Manage_Testmodule_Edit_Tab_Collection extends Mage_Adminhtml_Block_Widget_Grid
{
public function __construct()
{
parent::__construct();
$this->setId('testmodule_collection');
$this->setDefaultSort('id');
}
protected function _prepareCollection()
{
$collection = Mage::getModel('testmodule/testmodule')->getCollection();
$this->setCollection($collection);
return parent::_prepareCollection();
}
protected function _prepareColumns()
{
$this->addColumn(
'testmodule_id',
array(
'header' => Mage::helper('testmodule')->__('ID'),
'sortable' => true,
'width' => '60px',
'index' => 'testmodule_id',
)
);
$this->addColumn(
'testmodule_title',
array(
'header' => Mage::helper('testmodule')->__('Title'),
'index' => 'testmodule_title',
)
);
return parent::_prepareColumns();
}
}