Step 1: Declare your shell module and it’s code pool
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 app\code\local\Company\Web\controllers\IndexController.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 app\code\local\Company\Web\controllers\Adminhtml\WebController.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 app\code\local\Company\Web\Block\Web.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- app\code\local\Company\Web\Block\Adminhtml\Web.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- app\code\local\Company\Web\Block\Adminhtml\Web\Grid.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- app\code\local\Company\Web\Block\Adminhtml\Web\Edit.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 app\code\local\Company\Web\etc\config.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 app\code\local\Company\Web\Helper\Data.php
<?php class Company_Web_Helper_Data extends Mage_Core_Helper_Abstract { }
Step 11: Create the model class for your module app\code\local\Company\Web\Model\Web.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 app\code\local\Company\Web\Model\Mysql4\Web.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 app\code\local\Company\Web\Model\Mysql4\Web\Collection.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 app\code\local\Company\Web\sql\web_setup\mysql4-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 app\design\frontend\default\default\layout\web.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- app\design\adminhtml\default\default\layout\web.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 app\design\frontend\default\default\template\web\web.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>
No comments:
Post a Comment
Note: only a member of this blog may post a comment.