无法更新magento模块中的产品

时间:2012-08-16 12:08:31

标签: api magento module

使用模块更新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来完成工作。

2 个答案:

答案 0 :(得分:0)

看到这篇文章Magento 1.7: Non-system product attribute not saving in PHP script问题可能有所不同,但解决方案可以在该帖子中找到

答案 1 :(得分:0)

更新为要调用.phtml的新操作,请参见下文,因为它似乎正在根据需要更新产品数据,仍希望改进.. 使用/ frontendname / editApprovedPost /

以表格形式调用
public function editApprovedPostAction() {

        $id = $this->getRequest()->getParam('productid');
        $idproduct = $this->getRequest()->getParam('product_id');

        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 {

- 现在在} else {...

之后添加了更多的php代码(按此顺序)
 require_once 'app/Mage.php';

然后为前端产品更新添加管理商店...

Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);

然后获取客户ID

$customerId = Mage::getSingleton('customer/session')->getCustomerId();

然后使用表单产品ID获取产品ID更新...

$product = Mage::getModel('catalog/product')->load("".$idproduct."");

然后使用setName()来更新/保存从表单输入值中获取的属性值...

$product->setName($this->getRequest()->getParam('name'));//use whatever attributes need (only text and text area tested so far)

然后使用...

保存/更新产品数据
$product->save();

然后添加以运行错误...

 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/');

            }
    }
}

然后使用表格提交前端客户登录和客户组配置

  • 自定义表单仅对客户组2可见(默认为批发)

下面的表格......

抱歉,不能粘贴表单以便在此处粘贴代码,无论如何使用

Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
我在一些帖子中读到的是,要在前端更新产品,你需要成为“管理员”,这似乎做得很好。如前所述,脚本没有更新,这是因为当要更新的数据是实际产品(已经使用不同的模型数据批准和创建)并且正在更新时,它正试图保存到不同的模型数据使用

$product = Mage::getResourceModel('customerpartner/customerpartner_product_collection')

对其他人的评论会很好 希望这对某人有所帮助,因为他们有时间关闭这个版本。