Magento-如何提交具有体量动作或类似动作的可编辑网格

Magento-如何提交具有体量动作或类似动作的可编辑网格,magento,input,grid,admin,magento-1.9,Magento,Input,Grid,Admin,Magento 1.9,我正在使用magento中的网格来显示表的内容。此表有一个位置列,我正在根据其中的值对内容进行排序。 此位置列在网格中显示为类型输入: $this->addColumn('position', array( 'header' => Mage::helper('postcard')->__('Position'), 'align' =>'left', 'index' => 'position

我正在使用magento中的网格来显示表的内容。此表有一个位置列,我正在根据其中的值对内容进行排序。
此位置列在网格中显示为类型输入:

    $this->addColumn('position', array(
        'header'    => Mage::helper('postcard')->__('Position'),
        'align'     =>'left',
        'index'     => 'position',
        'type'      => 'input',
        'width'     =>  '100',
        'sortable'  => true,
    ));

如何提交所有行的这些列的值?我尝试使用mass操作,但它只提交所选行的ID,而不提交position列。还有其他方法吗?

您可以在这里找到答案:


请尝试使用以下代码

$this->addColumn('position', array(
    'header'    => Mage::helper('postcard')->__('Position'),
    'align'     =>'left',
    'index'     => 'position',
    'type'      => 'number',
    'width'     =>  '1',
    'sortable'  => true,
    'editable'  => true
));

请在下面的网格列中尝试

$this->addColumn('position', array(
    'header'    => Mage::helper('postcard')->__('Position'),
    'align'     =>'left',
    'index'     => 'position',
    'type'      => 'input',
    'width'     =>  '100',
    'sortable'  => true,
    'editable' => 'true',
    'inline_css'     => "my-grid-input-text", // use this class to adjust input width using CSS
 ));
您的输入将是可编辑的,但您不能发布此值。 要发布可编辑值,请在下面添加javasctipt以覆盖默认函数

varienGridMassaction.prototype.apply = function() {
        if(varienStringArray.count(this.checkedString) == 0) {
                alert(this.errorText);
                return;
            }

        var item = this.getSelectedItem();
        if(!item) {
            this.validator.validate();
            return;
        }
        this.currentItem = item;
        var fieldName = (item.field ? item.field : this.formFieldName);
        var fieldsHtml = '';

        if(this.currentItem.confirm && !window.confirm(this.currentItem.confirm)) {
            return;
        }

        this.formHiddens.update('');
        new Insertion.Bottom(this.formHiddens, this.fieldTemplate.evaluate({name: fieldName, value: this.checkedString}));
        new Insertion.Bottom(this.formHiddens, this.fieldTemplate.evaluate({name: 'massaction_prepare_key', value: fieldName}));

        // collect all inputs of grid to post it
        new Insertion.Bottom(this.formHiddens, this.fieldTemplate.evaluate({name: 'form_inputs', value: Form.serializeElements($$('#'+this.grid.containerId + ' .grid input'))}));

        if(!this.validator.validate()) {
            return;
        }

        if(this.useAjax && item.url) {
            new Ajax.Request(item.url, {
                'method': 'post',
                'parameters': this.form.serialize(true),
                'onComplete': this.onMassactionComplete.bind(this)
            });
        } else if(item.url) {
            if(item.target) {
                switch(item.target){
                    case '_blank':
                        this.form.target = '_blank';
                        break;
                    default:
                        this.form.target = '';
                        break;
                }
            }
            this.form.action = item.url;
            this.form.submit();
            this.form.target = '';
        }
 }; 
在控制器文件中获取您的输入

$postData = $this->getRequest()->getParams();
if(isset($postData['form_inputs'])) {
    parse_str($postData['form_inputs'],$formInputs);
    echo "<pre>";
    print_r($formInputs);
}
$postData=$this->getRequest()->getParams();
如果(isset($postData['form_inputs'])){
parse_str($postData['form_inputs'],$formInputs);
回声“;
打印(格式输入);
}

谢谢您的回复,但我需要提交整个网格的东西,而不仅仅是一行。您是否希望提交选定行的位置列以及选定行ID?是的,这正是我想说的,我现在没有时间回答正确的答案,所以我只想说,您需要查看adminhtml/widget\u grid\u序列化程序,并在核心代码/布局中找到它的用法。这就是他们做你想做的事情的方式。你找到解决办法了吗?谢谢你的回复,艾伦。这使得它可以编辑,但我仍然找不到一种方法提交我的网格和编辑后的值。有什么建议吗?