0

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

4

2 回答 2

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

其他人的评论会很好,希望这对某人有所帮助,因为是时候关闭这个构建了。

于 2012-08-18T05:51:41.570 回答
0

see this post Magento 1.7: Non-system product attribute not saving in PHP script the problem maybe different but the solution can be found in that post

于 2012-08-16T13:54:11.730 回答