Inline grid edit in admin panel makes life easier and edits faster as there is no need to redirect the page to edit a row in a grid. We can edit on the row itself.
Step 1-
We use the following code inside _prepareColumns() for the column we want to edit in our grid file.
$this->addColumn('name', array( 'renderer' => 'Company_Module_Block_Adminhtml_Grid_Renderer_Inline', 'header' => Mage::helper('module')->__('Name'), 'index' => 'name', ));
Step 2-
In our renderer file we use the following code
Click here to use grid renderer in magento 2
class Company_Module_Block_Adminhtml_Grid_Renderer_Inline extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Input { public function render(Varien_Object $row) { $html = parent::render($row); $html .= '<img src="'.Mage::getBaseUrl('media').'module/tick.png" id="addName'. $row->getId() .'">'; return $html; } }
After this, textbox will appear with the values in it and the image to save the data on click.
Step 3-
On ‘click’ event of the image our data should be saved. So in our module.xml file in design/adminhtml/default/default, we add the following code inside the handler
<reference name="js"> <block type="core/template" name="edit" template="mpeticketsystem/edit.phtml" /> </reference>
Step 4-
Next in edit.phtml file we can write our jquery where we call our controller through ajax on click of the image.
$(document).ready(function(){ $(document).on('click','[id^=addName]',function(){ var id = this.id; var pro_id = id.substring(7); var prev = $(this).prevAll("input[type=text]").val() $.ajax({ url: "<?php echo Mage::helper('adminhtml')->getUrl('module/adminhtml_index/functionName') ?>", type: 'get', dataType: 'json', data: { id: this.id, pro_id: pro_id, text: prev }, beforeSend:function() { Element.show('loading-mask'); }, complete:function() { Element.hide('loading-mask'); }, success: function(transport){ var data = transport; if(data['error'] == true) { alert(data['items']); } else { alert("Updated"); } } }); }); });
Step 5-
At last in our controller file we write code to save the data
public function updateproductnameAction() { $params = $this->getRequest()->getParams(); $data = Mage::getModel('module/model')->load($params['pro_id']); try{ $data->setName($params['text']); $data->save(); $response=array('error'=>false); } catch (Exception $e) { $response=array('items'=>$e->getMessage(),'error'=>true); } $this->getResponse()->setBody(Mage::helper('core')->jsonEncode($response)); }
This will save the text written inside the textbox.
This example is for a single column and we can implement it for several columns as required.
Hope this example helps. Good luck.
Be the first to comment.