Create an xml file /app/etc/modules/Company_Web.xml (You can use any name, even you can use a single file to declare number of modules).
<?xml version=”1.0″?>
<config>
<modules>
<Company_Web>
<active>true</active>
<codePool>local</codePool>
</Company_Web>
</modules>
</config>
Step 2:
Create the basic directory structure under /app/code/core/local/ :-
Company/
|–Web/
| |–Block/
| |–controllers/
| |–etc/
| |–Helper/
| |–sql/
|
Step 3:
Write the front controller in appcodelocalCompanyWebcontrollersIndexController.php
<?php
class Company_Web_IndexController extends Mage_Core_Controller_Front_Action
{
public function indexAction()
{
$this->loadLayout();
$this->renderLayout();
}
}
Step 4:
Write your backend module controller in appcodelocalCompanyWebcontrollersAdminhtmlWebController.php
<<?php
class Company_Web_Adminhtml_WebController extends Mage_Adminhtml_Controller_action
{
protected function _initAction() {
$this->loadLayout()
->_setActiveMenu(‘web/items’)
->_addBreadcrumb(Mage::helper(‘adminhtml’)->__(‘Items Manager’), Mage::helper(‘adminhtml’)->__(‘Item Manager’));
return $this;
}
public function indexAction() {
$this->_initAction()
->renderLayout();
}
public function editAction() {
$id = $this->getRequest()->getParam(‘id’);
$model = Mage::getModel(‘web/web’)->load($id);
if ($model->getId() || $id == 0) {
$data = Mage::getSingleton(‘adminhtml/session’)->getFormData(true);
if (!empty($data)) {
$model->setData($data);
}
Mage::register(‘web_data’, $model);
$this->loadLayout();
$this->_setActiveMenu(‘web/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(‘web/adminhtml_web_edit’))
->_addLeft($this->getLayout()->createBlock(‘web/adminhtml_web_edit_tabs’));
$this->renderLayout();
} else {
Mage::getSingleton(‘adminhtml/session’)->addError(Mage::helper(‘web’)->__(‘Item does not exist’));
$this->_redirect(‘*/*/’);
}
}
public function newAction() {
$this->_forward(‘edit’);
}
public function saveAction() {
if ($data = $this->getRequest()->getPost()) {
if(isset($_FILES[‘filename’][‘name’]) && $_FILES[‘filename’][‘name’] != ”) {
try {
/* Starting upload */
$uploader = new Varien_File_Uploader(‘filename’);
// Any extention would work
$uploader->setAllowedExtensions(array(‘jpg’,’jpeg’,’gif’,’png’));
$uploader->setAllowRenameFiles(false);
// Set the file upload mode
// false -> get the file directly in the specified folder
// true -> get the file in the product like folders
// (file.jpg will go in something like /media/f/i/file.jpg)
$uploader->setFilesDispersion(false);
// We set media as the upload dir
$path = Mage::getBaseDir(‘media’) . DS ;
$uploader->save($path, $_FILES[‘filename’][‘name’] );
} catch (Exception $e) {
}
//this way the name is saved in DB
$data[‘filename’] = $_FILES[‘filename’][‘name’];
}
$model = Mage::getModel(‘web/web’);
$model->setData($data)
->setId($this->getRequest()->getParam(‘id’));
try {
if ($model->getCreatedTime == NULL || $model->getUpdateTime() == NULL) {
$model->setCreatedTime(now())
->setUpdateTime(now());
} else {
$model->setUpdateTime(now());
}
$model->save();
Mage::getSingleton(‘adminhtml/session’)->addSuccess(Mage::helper(‘web’)->__(‘Item was successfully saved’));
Mage::getSingleton(‘adminhtml/session’)->setFormData(false);
if ($this->getRequest()->getParam(‘back’)) {
$this->_redirect(‘*/*/edit’, array(‘id’ => $model->getId()));
return;
}
$this->_redirect(‘*/*/’);
return;
} catch (Exception $e) {
Mage::getSingleton(‘adminhtml/session’)->addError($e->getMessage());
Mage::getSingleton(‘adminhtml/session’)->setFormData($data);
$this->_redirect(‘*/*/edit’, array(‘id’ => $this->getRequest()->getParam(‘id’)));
return;
}
}
Mage::getSingleton(‘adminhtml/session’)->addError(Mage::helper(‘web’)->__(‘Unable to find item to save’));
$this->_redirect(‘*/*/’);
}
public function deleteAction() {
if( $this->getRequest()->getParam(‘id’) > 0 ) {
try {
$model = Mage::getModel(‘web/web’);
$model->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(‘*/*/’);
}
public function massDeleteAction() {
$webIds = $this->getRequest()->getParam(‘web’);
if(!is_array($webIds)) {
Mage::getSingleton(‘adminhtml/session’)->addError(Mage::helper(‘adminhtml’)->__(‘Please select item(s)’));
} else {
try {
foreach ($webIds as $webId) {
$web = Mage::getModel(‘web/web’)->load($webId);
$web->delete();
}
Mage::getSingleton(‘adminhtml/session’)->addSuccess(
Mage::helper(‘adminhtml’)->__(
‘Total of %d record(s) were successfully deleted’, count($webIds)
)
);
} catch (Exception $e) {
Mage::getSingleton(‘adminhtml/session’)->addError($e->getMessage());
}
}
$this->_redirect(‘*/*/index’);
}
public function massStatusAction()
{
$webIds = $this->getRequest()->getParam(‘web’);
if(!is_array($webIds)) {
Mage::getSingleton(‘adminhtml/session’)->addError($this->__(‘Please select item(s)’));
} else {
try {
foreach ($webIds as $webId) {
$web = Mage::getSingleton(‘web/web’)
->load($webId)
->setStatus($this->getRequest()->getParam(‘status’))
->setIsMassupdate(true)
->save();
}
$this->_getSession()->addSuccess(
$this->__(‘Total of %d record(s) were successfully updated’, count($webIds))
);
} catch (Exception $e) {
$this->_getSession()->addError($e->getMessage());
}
}
$this->_redirect(‘*/*/index’);
}
protected function _sendUploadResponse($fileName, $content, $contentType=’application/octet-stream’)
{
$response = $this->getResponse();
$response->setHeader(‘HTTP/1.1 200 OK’,”);
$response->setHeader(‘Pragma’, ‘public’, true);
$response->setHeader(‘Cache-Control’, ‘must-revalidate, post-check=0, pre-check=0’, true);
$response->setHeader(‘Content-Disposition’, ‘attachment; filename=’.$fileName);
$response->setHeader(‘Last-Modified’, date(‘r’));
$response->setHeader(‘Accept-Ranges’, ‘bytes’);
$response->setHeader(‘Content-Length’, strlen($content));
$response->setHeader(‘Content-type’, $contentType);
$response->setBody($content);
$response->sendResponse();
die;
}
}
Step 5:
Write the frontend block file in appcodelocalCompanyWebBlockWeb.php
<?php
class Company_Web_Block_Web extends Mage_Core_Block_Template
{
public function _prepareLayout()
{
return parent::_prepareLayout();
}
public function getWeb()
{
if (!$this->hasData(‘web’)) {
$this->setData(‘web’, Mage::registry(‘web’));
}
return $this->getData(‘web’);
}
}
Step 6: Now write the following file- appcodelocalCompanyWebBlockAdminhtmlWeb.php
<?php
class Company_Web_Block_Adminhtml_Web extends Mage_Adminhtml_Block_Widget_Grid_Container
{
public function __construct()
{
$this->_controller = ‘adminhtml_web’;
$this->_blockGroup = ‘web’;
$this->_headerText = Mage::helper(‘web’)->__(‘Item Manager’);
$this->_addButtonLabel = Mage::helper(‘web’)->__(‘Add Item’);
parent::__construct();
}
}
Step 7: Now write the following file- appcodelocalCompanyWebBlockAdminhtmlWebGrid.php
<?php
class Company_Web_Block_Adminhtml_Web_Grid extends Mage_Adminhtml_Block_Widget_Grid
{
public function __construct()
{
parent::__construct();
$this->setId(‘webGrid’);
$this->setDefaultSort(‘web_id’);
$this->setDefaultDir(‘ASC’);
$this->setSaveParametersInSession(true);
}
protected function _prepareCollection()
{
$collection = Mage::getModel(‘web/web’)->getCollection();
$this->setCollection($collection);
return parent::_prepareCollection();
}
protected function _prepareColumns()
{
$this->addColumn(‘web_id’, array(
‘header’ => Mage::helper(‘web’)->__(‘ID’),
‘align’ =>’right’,
‘width’ => ’50px’,
‘index’ => ‘web_id’,
));
$this->addColumn(‘title’, array(
‘header’ => Mage::helper(‘web’)->__(‘Title’),
‘align’ =>’left’,
‘index’ => ‘title’,
));
/*
$this->addColumn(‘content’, array(
‘header’ => Mage::helper(‘web’)->__(‘Item Content’),
‘width’ => ‘150px’,
‘index’ => ‘content’,
));
*/
$this->addColumn(‘status’, array(
‘header’ => Mage::helper(‘web’)->__(‘Status’),
‘align’ => ‘left’,
‘width’ => ’80px’,
‘index’ => ‘status’,
‘type’ => ‘options’,
‘options’ => array(
1 => ‘Enabled’,
2 => ‘Disabled’,
),
));
$this->addColumn(‘action’,
array(
‘header’ => Mage::helper(‘web’)->__(‘Action’),
‘width’ => ‘100’,
‘type’ => ‘action’,
‘getter’ => ‘getId’,
‘actions’ => array(
array(
‘caption’ => Mage::helper(‘web’)->__(‘Edit’),
‘url’ => array(‘base’=> ‘*/*/edit’),
‘field’ => ‘id’
)
),
‘filter’ => false,
‘sortable’ => false,
‘index’ => ‘stores’,
‘is_system’ => true,
));
$this->addExportType(‘*/*/exportCsv’, Mage::helper(‘web’)->__(‘CSV’));
$this->addExportType(‘*/*/exportXml’, Mage::helper(‘web’)->__(‘XML’));
return parent::_prepareColumns();
}
protected function _prepareMassaction()
{
$this->setMassactionIdField(‘web_id’);
$this->getMassactionBlock()->setFormFieldName(‘web’);
$this->getMassactionBlock()->addItem(‘delete’, array(
‘label’ => Mage::helper(‘web’)->__(‘Delete’),
‘url’ => $this->getUrl(‘*/*/massDelete’),
‘confirm’ => Mage::helper(‘web’)->__(‘Are you sure?’)
));
$statuses = Mage::getSingleton(‘web/status’)->getOptionArray();
array_unshift($statuses, array(‘label’=>”, ‘value’=>”));
$this->getMassactionBlock()->addItem(‘status’, array(
‘label’=> Mage::helper(‘web’)->__(‘Change status’),
‘url’ => $this->getUrl(‘*/*/massStatus’, array(‘_current’=>true)),
‘additional’ => array(
‘visibility’ => array(
‘name’ => ‘status’,
‘type’ => ‘select’,
‘class’ => ‘required-entry’,
‘label’ => Mage::helper(‘web’)->__(‘Status’),
‘values’ => $statuses
)
)
));
return $this;
}
public function getRowUrl($row)
{
return $this->getUrl(‘*/*/edit’, array(‘id’ => $row->getId()));
}
}
Step 8: Now write the following file- appcodelocalCompanyWebBlockAdminhtmlWebEdit.php
<php
class Company_Web_Block_Adminhtml_Web_Edit extends Mage_Adminhtml_Block_Widget_Form_Container
{
public function __construct()
{
parent::__construct();
$this->_objectId = ‘id’;
$this->_blockGroup = ‘web’;
$this->_controller = ‘adminhtml_web’;
$this->_updateButton(‘save’, ‘label’, Mage::helper(‘web’)->__(‘Save Item’));
$this->_updateButton(‘delete’, ‘label’, Mage::helper(‘web’)->__(‘Delete Item’));
$this->_addButton(‘saveandcontinue’, array(
‘label’ => Mage::helper(‘adminhtml’)->__(‘Save And Continue Edit’),
‘onclick’ => ‘saveAndContinueEdit()’,
‘class’ => ‘save’,
), -100);
$this->_formScripts[] = “
function toggleEditor() {
if (tinyMCE.getInstanceById(‘web_content’) == null) {
tinyMCE.execCommand(‘mceAddControl’, false, ‘web_content’);
} else {
tinyMCE.execCommand(‘mceRemoveControl’, false, ‘web_content’);
}
}
function saveAndContinueEdit(){
editForm.submit($(‘edit_form’).action+’back/edit/’);
}
“;
}
public function getHeaderText()
{
if( Mage::registry(‘web_data’) && Mage::registry(‘web_data’)->getId() ) {
return Mage::helper(‘web’)->__(“Edit Item ‘%s'”, $this->htmlEscape(Mage::registry(‘web_data’)->getTitle()));
} else {
return Mage::helper(‘web’)->__(‘Add Item’);
}
}
}
Step 9:
Create the config file as appcodelocalCompanyWebetcconfig.xml
<?xml version=”1.0″?>
<config>
<modules>
<Company_Web>
<version>0.1.0</version>
</Company_Web>
</modules>
<frontend>
<routers>
<web>
<use>standard</use>
<args>
<module>Company_Web</module>
<frontName>web</frontName>
</args>
</web>
</routers>
<layout>
<updates>
<web>
<file>web.xml</file>
</web>
</updates>
</layout>
</frontend>
<admin>
<routers>
<web>
<use>admin</use>
<args>
<module>Company_Web</module>
<frontName>web</frontName>
</args>
</web>
</routers>
</admin>
<adminhtml>
<menu>
<web module=”web”>
<title>Web</title>
<sort_order>71</sort_order>
<children>
<items module=”web”>
<title>Manage Items</title>
<sort_order>0</sort_order>
<action>web/adminhtml_web</action>
</items>
</children>
</web>
</menu>
<acl>
<resources>
<all>
<title>Allow Everything</title>
</all>
<admin>
<children>
<Company_Web>
<title>Web Module</title>
<sort_order>10</sort_order>
</Company_Web>
</children>
</admin>
</resources>
</acl>
<layout>
<updates>
<web>
<file>web.xml</file>
</web>
</updates>
</layout>
</adminhtml>
<global>
<models>
<web>
<class>Company_Web_Model</class>
<resourceModel>web_mysql4</resourceModel>
</web>
<web_mysql4>
<class>Company_Web_Model_Mysql4</class>
<entities>
<web>
<table>web</table>
</web>
</entities>
</web_mysql4>
</models>
<resources>
<web_setup>
<setup>
<module>Company_Web</module>
</setup>
<connection>
<use>core_setup</use>
</connection>
</web_setup>
<web_write>
<connection>
<use>core_write</use>
</connection>
</web_write>
<web_read>
<connection>
<use>core_read</use>
</connection>
</web_read>
</resources>
<blocks>
<web>
<class>Company_Web_Block</class>
</web>
</blocks>
<helpers>
<web>
<class>Company_Web_Helper</class>
</web>
</helpers>
</global>
</config>
Step 10: Now write the helper class appcodelocalCompanyWebHelperData.php
<?php
class Company_Web_Helper_Data extends Mage_Core_Helper_Abstract
{
}
Step 11: Create the model class for your module appcodelocalCompanyWebModelWeb.php
<?php
class Company_Web_Model_Web extends Mage_Core_Model_Abstract
{
public function _construct()
{
parent::_construct();
$this->_init(‘web/web’);
}
}
Step 12: Now create appcodelocalCompanyWebModelMysql4Web.php
<?php
class Company_Web_Model_Mysql4_Web extends Mage_Core_Model_Mysql4_Abstract
{
public function _construct()
{
// Note that the web_id refers to the key field in your database table.
$this->_init(‘web/web’, ‘web_id’);
}
}
Step 13: Now create the collection class appcodelocalCompanyWebModelMysql4WebCollection.php
<?php
class Company_Web_Model_Mysql4_Web_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract
{
public function _construct()
{
parent::_construct();
$this->_init(‘web/web’);
}
}
Step 14: Now add the mysql setup file as appcodelocalCompanyWebsqlweb_setupmysql4-install-0.1.0.php
<?php
$installer = $this;
$installer->startSetup();
$installer->run(“
— DROP TABLE IF EXISTS {$this->getTable(‘web’)};
CREATE TABLE {$this->getTable(‘web’)} (
`web_id` int(11) unsigned NOT NULL auto_increment,
`title` varchar(255) NOT NULL default ”,
`filename` varchar(255) NOT NULL default ”,
`content` text NOT NULL default ”,
`status` smallint(6) NOT NULL default ‘0’,
`created_time` datetime NULL,
`update_time` datetime NULL,
PRIMARY KEY (`web_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
“);
$installer->endSetup();
Step 15: Add the layout.xml as appdesignfrontenddefaultdefaultlayoutweb.xml
<?xml version=”1.0″?>
<layout version=”0.1.0″>
<default>
</default>
<web_index_index>
<reference name=”content”>
<block type=”web/web” name=”web” template=”web/web.phtml” />
</reference>
</web_index_index>
</layout>
Step 16: Now write the following file- appdesignadminhtmldefaultdefaultlayoutweb.xml
<<?xml version=”1.0″?>
<layout version=”0.1.0″>
<web_adminhtml_web_index>
<reference name=”content”>
<block type=”web/adminhtml_web” name=”web” />
</reference>
</web_adminhtml_web_index>
</layout>
Step 17: Finally create the template file of your module appdesignfrontenddefaultdefaulttemplatewebweb.phtml
<table border=”0″ cellpadding=”10″ cellspacing=”10″ width=”100%”>
<tr><td colspan=”5″ align=”center”><h1>Custom Module In Magento </h1></td></tr>
<?php
//$w = Mage::getSingleton(‘core/resource’)->getConnection(‘core_write’);
$resource = Mage::getSingleton(‘core/resource’);
$conn = $resource->getConnection(‘externaldb_read’);
$results = $conn->query(‘SELECT * FROM web’);
// print_r($results)
//$row = $results->fetch(PDO::FETCH_ASSOC);
$i=1;
while ($row = $results->fetch(PDO::FETCH_ASSOC))
{ ?>
<tr>
<td><p><img src=”<?php echo $this->getUrl(‘media/’) ?><?php echo $row[‘filename’]; ?>” style=”float:left; margin:10px;” width=”100″ height=”100″ />
<strong>Name = <?php echo ucwords($row[‘title’]); ?></strong> <br/>
<strong>Description :- </strong>
<?php echo $row[‘content’]; ?>
</p>
</td>
</tr>
<?php } ?>
</table>