Magento在控制器中保存多选?

时间:2010-08-17 11:06:09

标签: magento

$fieldset->addField('brand_id', 'multiselect', array(
    'label'     => Mage::helper('expertbrand')->__('Merk:'),
    'name'      => 'brand_id[]',   
    'values'    => $aOptionsMerk,
));

我有这个多选框,有600个选项。我想知道如何在控制器中保存它?

我已经尝试了一切,现在已经解决了这个问题3天了。另外在互联网上我无法找到正确的问题。希望有人能够帮助我,因为我真的很想知道!

我的控制器代码:

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'];
        }

        /*
        $brands=$data['brand_id'];
        $t=count($brands);
        $inhoud="";
        $i=1;
        foreach ($brands as $brand){
            if ($t == $i){
                $inhoud.=$brand; 
            } else {
                $inhoud.=$brand." , ";
            }
            $i++;
        }
        //echo $inhoud;
        // $br=array('brand_id');
        $br=$inhoud;
        $data['brand_id']=$br;
        */
        //hier moet de loop komen

        $id= $data['expert_id'];
        $db1 = Mage::getSingleton('core/resource')->getConnection('core_write'); 
        $result = $db1->query("SELECT name FROM expert where expert_id=$id");
        $rows = $result->fetch(PDO::FETCH_ASSOC);
        $data['name']=$rows['name'];
        //$data['brand_id']=$_POST['brand_id']; 
        $model = Mage::getModel('expertbrand/expertbrand');  
        $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();



            //hier is het einde van de loop..
            Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('expertbrand')->__('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('expertbrand')->__('Unable to find item to save'));
    $this->_redirect('*/*/');
}

如何保存通过optionsArray发送的$_POST?提前谢谢。

3 个答案:

答案 0 :(得分:1)

将它添加到Controller中的saveAction,将数据转换为字符串:

foreach ($data as $key => $value)
    {
        if (is_array($value))
        {
            $data[$key] = implode(',',$this->getRequest()->getParam($key)); 
        }
    }  

答案 1 :(得分:0)

开始:

  • 您已将输入声明为“brand_id []”,因此您正在寻找$data['brand_id'],它应该是一个数组。在评论代码中,您似乎使用了该数据,但您当前的代码仅查找$data['expert_id'],这似乎并不相同。

  • 即使您将该行更改为$data['brand_id'],请记住它是数组,因此您需要在查询中认识到这一点。

  • 你在控制器中有一堆不属于那里的逻辑。在MVC应用程序中(Magento是一个典型的例子),大多数SQL逻辑(以及createdtime / updatedtime东西)都属于模型(可能是expertbrand/expertbrand)。

  • 目前尚不清楚您如何定义expertbrand/expertbrand。这是一个EAV模型吗?它的定义是什么?这很可能是你问题的根源,因为你必须告诉Magento你的EAV模型是否可以像这样保存。

请修复这些内容(并澄清型号代码),如有必要,我们可以进一步调试。

谢谢, 乔

答案 2 :(得分:0)

我清楚地知道数据是以数组形式发送的。为了修复我创建的重写数组的函数。

 $brands=$data['brand_id'];
     $t=count($brands);
    $inhoud="";
            $i=1;
            foreach ($brands as $brand){
                if ($t == $i){
                  $inhoud.=$brand;  
                }
                else {
                $inhoud.=$brand." , ";
                }
                $i++;
            }
            //echo $inhoud;
           // $br=array('brand_id');
            $br=$inhoud;
            $data['brand_id']=$br;

保存在数据库中的DATA看起来像这样:

104 , 106 , 107 , 108 

我这样做是因为我在某处读到了这是必要的。

当我打开我的编辑字段时,唯一一个显示:

selected =“selected”是值为108(最后一个)的品牌

这是一个问题,因为我需要将其中的所有4个显示为已选中。

这有关保存这些数据的方法吗...不确定数据是否应保存为数组以显示编辑中的所有选定=“选定”字段

顺便说一句,expert_id是别的东西而不是问题,我知道sql应该在其他地方,但因为我还在学习magento,这是一个快速的方法来修复我之前遇到的问题...

我想知道的是如何存储数组以在编辑表单中将所有值显示为selected =“selected”字段... Txs ....

好的我修复了数据应保存为

的问题

106,108,114,99

现在所有内容都在编辑字段中被选中,奇怪的是,这里没有任何内容可以在互联网上找到,希望它对其他处理相同问题的人有所帮助