$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
?提前谢谢。
答案 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
现在所有内容都在编辑字段中被选中,奇怪的是,这里没有任何内容可以在互联网上找到,希望它对其他处理相同问题的人有所帮助