Magento - 如何使用群发动作保存整个网格

时间:2014-06-27 03:05:25

标签: magento grid

我的模块中有一个仓库网格。我的仓库包含很多产品,所以当我要编辑仓库时,我在仓库编辑选项卡中添加了一个产品网格。但是,我对如何将整个产品网格保存到数据库感到困惑。真的需要帮助。

这是我的网格

public function __construct() {

    parent::__construct();
    $this->setId('UnicornInventoryGrid');
    $this->setDefaultSort('id_warehouse');
    $this->setDefaultDir('ASC');
    $this->setSaveParametersInSession(true);
    $this->setUseAjax(true);
}

protected function _prepareCollection() {


    $collection = Mage::getModel('inventory/warehouse')->getCollection();


    $this->setCollection($collection);
    return parent::_prepareCollection();
}



protected function _prepareColumns() {

    $this->addColumn('id_warehouse', array(
        'header' => Mage::helper('inventory')->__('id_warehouse'),
        'filter_index' => 'main_table.id_warehouse',
        'index' => 'id_warehouse',
        'width' => '5px',
    ));

    $this->addColumn('warehouse_name', array(
        'header' => Mage::helper('inventory')->__('Warehouse Name'),
        'filter_index' => 'main_table.warehouse_name',
        'index' => 'warehouse_name',
        'editable' => 'TRUE',
        'width' => '5px',
    ));

    $this->addColumn('created_by', array(
        'header' => Mage::helper('inventory')->__('Created By'),
        'filter_index' => 'main_table.created_by',
        'index' => 'created_by',
        'width' => '5px',
        'editable' => 'TRUE',
    ));



    $this->addColumn('manager_email', array(
        'header' => Mage::helper('inventory')->__('Manager\'s Email'),
        'filter_index' => 'main_table.manager_email',
        'index' => 'manager_email',
        'width' => '5px',
        'editable' => 'TRUE',
    ));




    $this->addColumn('phone', array(
        'header' => Mage::helper('inventory')->__('Phone'),
        'filter_index' => "main_table.phone",
        'index' => "phone",
        'editable' => 'TRUE',
    ));

    $this->addColumn('street', array(
        'header' => Mage::helper('inventory')->__('Street'),
        'filter_index' => "ce3.street",
        'index' => "street",
        'editable' => 'TRUE',

    ));

    $this->addColumn('city', array(
        'header' => Mage::helper('inventory')->__('City'),
        'filter_index' => 'main_table.city',
        'index' => 'city',
        'editable' => 'TRUE',
    ));

    $this->addColumn('country', array(
        'header' => Mage::helper('inventory')->__('Country'),
        'filter_index' => 'main_table.country',
        'index' => 'country',
         'type'      =>  'options',
         'editable' => 'TRUE',
        'options' => array("" => "All Countries" , "Indonesia" => "Indonesia", "US" => "US")
    ));


    $this->addColumn('status', array(
        'header' => Mage::helper('inventory')->__('Status'),
        'filter_index' => 'main_table.status',
        'index' => 'phone',
    ));

     // $this->addColumn('action',
        // array(
        // 'header'    =>  Mage::helper('inventory')->__('Action'),
        // 'width'     => '100',
        // 'type'      => 'action',
        // 'getter'    => 'getId',
        // 'actions'   => array(
                // array(
                        // 'caption'   => Mage::helper('inventory')->__('Edit'),
                        // 'url'       => array('base'=> '*/*/edit'),
                        // 'field'     => 'id'
                // )
        // ),
        // 'filter'    => false,
        // 'sortable'  => false,
        // 'index'     => 'stores',
        // 'is_system' => true,
    // ));



    $this->addExportType('*/*/exportCsv', Mage::helper('inventory')->__('CSV'));
    $this->addExportType('*/*/exportXml', Mage::helper('inventory')->__('XML'));

    return parent::_prepareColumns();
}

protected function _prepareMassaction() {
    $this->setMassactionIdField('id');
    $this->getMassactionBlock()->setFormFieldName('inventory_warehouse_mass_action');

    $this->getMassactionBlock()->addItem('save', array(
        'label' => Mage::helper('inventory')->__('Save'),
        'url' => $this->getUrl('*/*/massSaveProduct'),
        'confirm' => Mage::helper('inventory')->__('Are you sure?')
    ));
    return $this;
}

public function getRowUrl($row) {


    return $this->getUrl('*/*/edit', array('id' => $row->getIdWarehouse()));
}

这是我的控制器

public function indexAction(){

    $this->loadLayout();

    $this->renderLayout();
    // die("sadfsaf");
}


 public function newAction() {
    $id = $this->getRequest()->getParam('id');
    if(empty($id)) $this->_title($this->__('Admin'))->_title($this->__('Add Warehouse'));
    else $this->_title($this->__('Admin'))->_title($this->__('Edit Warehouse'));
    $model = Mage::getModel('inventory/warehouse')->load($id);

    if ($model->getId() || empty($id)) {
        $data = Mage::getSingleton('adminhtml/session')->getFormData(true);
        if (!empty($data))
            $model->setData($data);

        Mage::register('warehouse_warehouse_data', $model);

        $this->loadLayout();
        $this->_setActiveMenu('unicorn_inventory');

        $this->getLayout()->getBlock('head')->setCanLoadExtJs(true);
        $this->_addContent($this->getLayout()->createBlock('inventory/adminhtml_warehouse_edit'))
                ->_addLeft($this->getLayout()->createBlock('inventory/adminhtml_warehouse_edit_tabs'));

        $this->renderLayout();
    } else {
        Mage::getSingleton('adminhtml/session')->addError(Mage::helper('inventory')->__('Warehouse does not exist.'));
        $this->_redirect('*/*/');
    }
}


public function editAction() {
    $id = $this->getRequest()->getParam('id');

    if(empty($id)) $this->_title($this->__('Admin'))->_title($this->__('Add Warehouse'));
    else $this->_title($this->__('Admin'))->_title($this->__('Edit Warehouse'));
    $model = Mage::getModel('inventory/warehouse')->load($id);

    if ($model->getId() || empty($id)) {
        $data = Mage::getSingleton('adminhtml/session')->getFormData(true);
        if (!empty($data))
            $model->setData($data);

        Mage::register('inventory_warehouse_data', $model);

        $this->loadLayout();
        $this->_setActiveMenu('unicorn_warehouse');

        $this->getLayout()->getBlock('head')->setCanLoadExtJs(true);
        $this->_addContent($this->getLayout()->createBlock('inventory/adminhtml_warehouse_edit'))
                ->_addLeft($this->getLayout()->createBlock('inventory/adminhtml_warehouse_edit_tabs'));

        $this->renderLayout();

    } else {
        Mage::getSingleton('adminhtml/session')->addError(Mage::helper('inventory')->__('Warehouse does not exist.'));
        $this->_redirect('*/*/');
    }
}


 public function saveAction() {       

    if ($data = $this->getRequest()->getPost()) {

    $model = Mage::getModel('inventory/warehouse');

        $model->setData($data)
                ->setData('id_warehouse' , $this->getRequest()->getParam('id'));
        try {
            $collection = Mage::getModel('inventory/warehouse')->getCollection();

            foreach($collection as $item){
                if(($item->getIdWarehouse() == $model->getIdWarehouse()) && ($model->isObjectNew())){
                    Mage::getSingleton('adminhtml/session')->addError(Mage::helper('inventory')->__("Id '" . $model->getIdWarehouse(). "' already assigned."));
                    Mage::getSingleton('adminhtml/session')->setFormData($data);
                    $this->_redirect('*/*/new');
                    return;
                }
            }
            // echo "<pre>";
            // var_dump($data);
            // echo "</pre>";
            // die();
            $model->save();
            Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('inventory')->__('Warehouse telah disimpan'));
            Mage::getSingleton('adminhtml/session')->setFormData(false);

            if ($this->getRequest()->getParam('back')) {
                $this->_redirect('*/*/edit', array('id' => $model->getId()));
                return;
            }
            if ($this->getRequest()->getParam('backandnew')) {
                $this->_redirect('*/*/new');
                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('inventory')->__('Unable to find warehouse to save.'));
    $this->_redirect('*/*/');
}


/**
 * mass save item(s) action
 */
public function massSaveProductAction() {
    $dataIds = $this->getRequest()->getParam('inventory_warehouse_mass_action');
    if (!is_array($dataIds)) {
        Mage::getSingleton('adminhtml/session')->addError(Mage::helper('inventory')->__('Please select item(s)'));
    } else {
        try {
            foreach ($dataIds as $dataId) {
                // $model = Mage::getModel('inventory/wareproduct')->load($dataId);
                $model = Mage::getModel('inventory/wareproduct');
                $model->delete();
            }
            Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('supplier')->__('Total of %d record(s) were successfully deleted.', count($dataIds)));
        } catch (Exception $e) {
            Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
        }
    }
    $this->_redirect('*/*/index');
}

 /**
 * export grid item to CSV type
 */
public function exportCsvAction() {
    $fileName = 'Unicorn_Inventory.csv';
    $content = $this->getLayout()->createBlock('warehouse/adminhtml_warehouse_grid')->getCsv();
    $this->_prepareDownloadResponse($fileName, $content);
}

/**
 * export grid item to XML type
 */
public function exportXmlAction() {
    $fileName = 'warehouse_warehouse.xml';
    $content = $this->getLayout()->createBlock('warehouse/adminhtml_warehouse_grid')->getXml();
    $this->_prepareDownloadResponse($fileName, $content);
}

public function gridAction()
{
    $this->loadLayout();
    $this->getResponse()->setBody(
        $this->getLayout()->createBlock('inventory/adminhtml_warehouse_edit_tab_product')->toHtml()
    );
}

那么,我们应该怎么做,因此网格中的每一行都可以提交并保存到数据库中。很受你的关注。

1 个答案:

答案 0 :(得分:0)

  

massSaveProductAction

交换行

  $model = Mage::getModel('inventory/wareproduct');
  $model->delete();

  $model = Mage::getModel('inventory/wareproduct');
  $model->setData('your_attribute_code',"YOUR_VALUE");
  $model->save();

回答第二个问题:

获取您拥有的任何实体类型的集合......

$collection->addFieldToFilter('YOUR_GRID_ID_FIELD', array('in'=>array($gridIds)))

你有收藏品。迭代集合并做任何需要的事情......