使用模块从前端更新 magento 产品时遇到问题,该模块的功能是让客户创建自己的产品并在启用之前让管理员批准(这部分工作)。
问题是当客户尝试更新其管理员批准的产品时(与批准之前一样,产品声明新创建的产品处于待处理状态,但他们仍然可以更新在产品创建功能期间创建的数据/属性,相同的属性未更新使用控制器)
首先,我有一个控制器,可以更新已批准/待定的客户产品
public function editPostAction() {
$id = $this->getRequest()->getParam('productid');
if ( $id !== false ) {
list($data, $errors) = $this->validatePost();
if ( !empty($errors) ) {
foreach ($errors as $message) {
$this->_getSession()->addError($message);
}
$this->_redirect('customer/products/edit/', array(
'id' => $id
));
} else {
$customerId = $this->_getSession()->getCustomer()->getid();
$product = Mage::getResourceModel('customerpartner/customerpartner_product_collection')
->addAttributeToSelect('*')
->addAttributeToFilter('customer_id', $customerId)
->addAttributeToFilter('entity_id', $id)
->load()
->getFirstItem();
$product->setName($this->getRequest()->getParam('name'));
$product->setSku($this->getRequest()->getParam('sku'));
$product->setDescription($this->getRequest()->getParam('description'));
$product->setShortDescription($this->getRequest()->getParam('short_description'));
$product->setPrice($this->getRequest()->getParam('price'));
$product->setWeight($this->getRequest()->getParam('weight'));
$product->setStock($this->getRequest()->getParam('stock'));
$product->save();
if ( isset($_FILES) && count($_FILES) > 0 ) {
foreach($_FILES as $image ) {
if ( $image['tmp_name'] != '' ) {
if ( ( $error = $this->uploadImage($image, $id) ) !== true ) {
$errors[] = $error;
}
}
}
}
if ( empty($errors) ) {
$this->_getSession()->addSuccess($this->__('Your product was successfully updated'));
} else {
$this->_getSession()->addError('Product info was saved but was imposible to save the image');
foreach ($errors as $message) {
$this->_getSession()->addError($message);
}
}
$this->_redirect('customer/products/');
}
}
}
以及提交时应该更新产品属性和图像的表单,但页面在提交时重新加载并显示成功保存的消息,但属性未更新并返回到该产品的编辑表单(对于创建的每个产品)更新表单中的值具有我们刚刚提交的更新的值,但产品属性也没有在目录中更新(它们与在创建新过程中输入的值保持相同)
不要不继续找出问题所在,或者只是转而使用 api 或直接 sql 来完成工作。