Problema de Magento Grid

¿Alguien puede indicarme en la dirección correcta cómo guardar las columnas editables dentro de Magento Grid?

Tengo una columna llamada ‘sort_order’ cuyo tiene ‘editable’ => true, agrega un campo para editar, pero ¿cómo hago para que guarde el valor de la fila?

Gracias de antemano por su ayuda.

aquí está mi código grid.php,

class ***_Imagegallery_Block_Manage_Imagegallery_Grid extends Mage_Adminhtml_Block_Widget_Grid { public function __construct() { parent::__construct(); $this->setId('imagegalleryGrid'); $this->setDefaultSort('sort_order'); $this->setDefaultDir('ASC'); $this->setSaveParametersInSession(true); } protected function _getStore() { $storeId = (int) $this->getRequest()->getParam('store', 0); return Mage::app()->getStore($storeId); } protected function _prepareCollection() { $collection = Mage::getModel('imagegallery/imagegallery')->getCollection(); $store = $this->_getStore(); if ($store->getId()) { $collection->addStoreFilter($store); } $filter = $this->getParam('filter'); $filter_data = Mage::helper('adminhtml')->prepareFilterString($filter); if(!isset($filter_data['status'])) { $collection->addFieldToFilter('status', array('eq' => 1)); } $this->setCollection($collection); return parent::_prepareCollection(); } protected function _prepareColumns() { $this->addColumn('sort_order', array( 'header' => Mage::helper('imagegallery')->__('Sort'), 'align' =>'right', 'width' => '50px', 'index' => 'sort_order', 'type' => 'number', 'width' => '1', 'sortable' => true, 'editable' => true )); $this->addColumn('post_id', array( 'header' => Mage::helper('imagegallery')->__('ID'), 'align' =>'right', 'width' => '50px', 'index' => 'post_id', )); $this->addColumn('nfile', array( 'header' => Mage::helper('cms')->__('Image File'), 'align' => 'left', 'index' => 'nfile', 'type' => 'image', 'width' => '100', )); $this->addColumn('title', array( 'header' => Mage::helper('imagegallery')->__('Title'), 'align' =>'left', 'index' => 'title', )); /*$this->addColumn('identifier', array( 'header' => Mage::helper('imagegallery')->__('Identifier'), 'align' => 'left', 'index' => 'identifier', )); $this->addColumn('user', array( 'header' => Mage::helper('imagegallery')->__('Poster'), 'width' => '150px', 'index' => 'user', ));*/ $this->addColumn('created_time', array( 'header' => Mage::helper('imagegallery')->__('Created'), 'align' => 'left', 'width' => '120px', 'type' => 'date', 'default' => '--', 'index' => 'created_time', )); $this->addColumn('update_time', array( 'header' => Mage::helper('imagegallery')->__('Updated'), 'align' => 'left', 'width' => '120px', 'type' => 'date', 'default' => '--', 'index' => 'update_time', )); $this->addColumn('status', array( 'header' => Mage::helper('imagegallery')->__('Status'), 'align' => 'left', 'width' => '80px', 'index' => 'status', 'type' => 'options', 'options' => array( 1 => Mage::helper('imagegallery')->__('Enabled'), 2 => Mage::helper('imagegallery')->__('Disabled'), 3 => Mage::helper('imagegallery')->__('Hidden'), ), )); $this->addColumn('action', array( 'header' => Mage::helper('imagegallery')->__('Action'), 'width' => '100', 'type' => 'action', 'getter' => 'getId', 'actions' => array( array( 'caption' => Mage::helper('imagegallery')->__('Edit'), 'url' => array('base'=> '*/*/edit'), 'field' => 'id' ) ), 'filter' => false, 'sortable' => false, 'index' => 'stores', 'is_system' => true, )); return parent::_prepareColumns(); } protected function _prepareMassaction() { $this->setMassactionIdField('post_id'); $this->getMassactionBlock()->setFormFieldName('imagegallery'); $this->getMassactionBlock()->addItem('delete', array( 'label' => Mage::helper('imagegallery')->__('Delete'), 'url' => $this->getUrl('*/*/massDelete'), 'confirm' => Mage::helper('imagegallery')->__('Are you sure?') )); $statuses = Mage::getSingleton('imagegallery/status')->getOptionArray(); array_unshift($statuses, array('label'=>'', 'value'=>'')); $this->getMassactionBlock()->addItem('status', array( 'label'=> Mage::helper('imagegallery')->__('Change status'), 'url' => $this->getUrl('*/*/massStatus', array('_current'=>true)), 'additional' => array( 'visibility' => array( 'name' => 'status', 'type' => 'select', 'class' => 'required-entry', 'label' => Mage::helper('imagegallery')->__('Status'), 'values' => $statuses ) ) )); return $this; } public function getRowUrl($row) { return $this->getUrl('*/*/edit', array('id' => $row->getId())); } } 

Esto es realmente bastante complejo; idealmente, su cuadrícula debe ser parte de un contenedor que ejemplifica un formulario, y se llama a través de una sección de pestaña. Los botones guardar generalmente son parte de una plantilla phtml personalizada que se invoca junto con el bloque de diseño que se llama a través de la acción del controlador en su Adminhtml.

Este form.phtml puede ser muy simple, pero generalmente contiene algunos javascript que formatea la URL de guardado (ver a continuación) y reúne los datos de envío.

Form.php

El constructor:

 public function __construct() { parent::__construct(); $this->setTemplate('your/adminhtml/edit/form.phtml'); } 

Y el método _prepareLayout:

 protected function _prepareLayout() { // Save button $this->setChild('save_button', $this->getLayout()->createBlock('adminhtml/widget_button') ->setData(array( 'label' => Mage::helper('catalog')->__('Save Category'), 'onclick' => "formSubmit('" . $this->getSaveUrl() . "', true)", 'class' => 'save' )) ); 

Su botón de guardar es lo que dirige el envío al controlador correcto. En este ejemplo anterior, usan getSaveUrl como método de estas clases de bloques. También puede codificar esto o usar $this->getUrl('*/*/save') como probablemente haga en otro lugar. Al hacer clic en este botón para guardar se serializará el formulario:

form.phtml

El archivo predeterminado simplemente tiene:

 
getFormHtml();?>
getChildHtml('form_after');?>

Un archivo form.phtml extendido que incluye datos de publicaciones editables hace algo como esto:

 
getFormHtml();?>
getChildHtml('form_after');?>

No he probado todas las partes del código anterior, pero la teoría es sólida, y es lo que hago en estas situaciones.

Aclamaciones.

Aunque tiene razón en que este atributo está disponible como una propiedad para addColumn, creo que FlorinelChis es correcto en la medida en que se requiere un formulario. El único ejemplo que conozco en el código central de Magento es el pedido del producto al editar una categoría. Si lo observa, verá que la Cuadrícula en cuestión se agrega en realidad como una pestaña para Editar formulario de la categoría. La persistencia en la base de datos se realiza como parte del ahorro de formulario de edición estándar (en saveAction of Mage_Adminhtml_Catalog_CategoryController los productos se almacenan usando el Varien_Object set mágico setPostedProducts , cuando la acción llama a guardar en el modelo de categoría la función _afterSave en el modelo de categoría desencadena _saveCategoryProducts , que conserva la información en la base de datos).

Desafortunadamente, no hay soporte automático para persistir los valores directamente desde una página de cuadrícula estándar.