Вопрос

У нас есть много поставщиков, и мы дали возможность поставщику для обновления информации о продукте от foreend. Мы используем следующий код для цены.

Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);      
        $id= $this->getRequest()->getParam('id');
        $customerid=Mage::getSingleton('customer/session')->getCustomerId();
        $collection_product = Mage::getModel('marketplace/product')->getCollection()->addFieldToFilter('mageproductid',array('eq'=>$id))->addFieldToFilter('userid',array('eq'=>$customerid));


        try{
        $upd_price = $this->getRequest()->getParam('price');
        $product = Mage::getModel('catalog/product')->load($id);        
        $product->setPrice($upd_price);

        $product->save();

        echo $price = $product->getPrice();
        echo $name = $product->getName();

        $response['message'] = 'Your Product Is Been Sucessfully Updated';
        $this->getResponse()->setBody(Mage::helper('core')->jsonEncode($response)); 

        }catch(Exception $e){
        echo "Not Saving"; exit;    
        Mage::log($e->getMessage());
        }

      }
.

Мы используем аналогичный код для количества, и его не работает нормально

$id= $this->getRequest()->getParam('id');
        $customerid=Mage::getSingleton('customer/session')->getCustomerId();
        $collection_product = Mage::getModel('marketplace/product')->getCollection()->addFieldToFilter('mageproductid',array('eq'=>$id))->addFieldToFilter('userid',array('eq'=>$customerid));

        $stockItem = Mage::getModel('cataloginventory/stock_item')->loadByProduct($id);
        $stockItem->setData('manage_stock', 1);
        $stockItem->setData('qty', $this->getRequest()->getParam('qty'));

        $stockItem->save();

        $response['message'] = 'Your Product Is Been Sucessfully Updated';
        $this->getResponse()->setBody(Mage::helper('core')->jsonEncode($response)); 

      }
.

Мы используем следующий код для обновления как цены, так и количества.Только цена работает, <сильное> количество не обновляется .

public function massupdatesellerproAction(){
      if($this->getRequest()->isPost()){
        if(!$this->_validateFormKey()){
             $this->_redirect('marketplace/marketplaceaccount/myproductslist/');
        }
        $ids= $this->getRequest()->getParam('product_mass_update');
        $price= $this->getRequest()->getParam('price');
        $qty = $this->getRequest()->getParam('qty');


        foreach ($ids as $key => $value) {
    $product = Mage::getModel('catalog/product')->load($value);

    $product->setPrice($price[$key]); 
    $product->setQty($qty[$key]);
    $product->save();
        }
        Mage::getSingleton('core/session')->addSuccess( Mage::helper('marketplace')->__('Products has been sucessfully deleted from your account'));
        $this->_redirect('marketplace/marketplaceaccount/myproductslist/');


    }}
.

Это было полезно?

Решение

Заменить это

$product->setQty($qty[$key]);

с

AFTE Увидеть Вам сайт, который вы должны дать отдельное имя для каждого количества поля.Потому что для некоторого количества продукта нет там.

$j=0;
  foreach ($ids as $key => $value) {
$j=$j+1;
$qty = $this->getRequest()->getParam('qty'.$j);
$product = Mage::getModel('catalog/product')->load($value);

$product->setPrice($price[$key]); 

$product->save();

 $stockItem = Mage::getModel('cataloginventory/stock_item')->loadByProduct($value);

        $stockItem->setData('manage_stock', 1);
        $stockItem->setData('qty', $qty);
        $stockItem->save();
 }
.

Другие советы

попробуйте это

public function massupdatesellerproAction(){
  if($this->getRequest()->isPost()){
    if(!$this->_validateFormKey()){
         $this->_redirect('marketplace/marketplaceaccount/myproductslist/');
    }
    $ids= $this->getRequest()->getParam('product_mass_update');
    $price= $this->getRequest()->getParam('price');
    $qty = $this->getRequest()->getParam('qty');


    foreach ($ids as $key => $value) {

      $stockItem =Mage::getModel('cataloginventory/stock_item')->loadByProduct($value);
      $stockItemId = $stockItem->getId();
      $product->set('price',$price[$key]); 
      $stockItem->setData('manage_stock', 1);
      $stockItem->setData('qty', (integer)$qty[$key]);

      $stockItem->save();

    }
    Mage::getSingleton('core/session')->addSuccess( Mage::helper('marketplace')->__('Products has been sucessfully deleted from your account'));
    $this->_redirect('marketplace/marketplaceaccount/myproductslist/');


}}
.

попробуйте это

$stockItem = Mage::getModel('cataloginventory/stock_item')->loadByProduct($id);
$stockItemId = $stockItem->getId();
//echo $stockItemId;
if ($stockItemId) {
        if($Qty==0):
           $stockItem->setData('use_config_manage_stock', 0);
           $stockItem->setData('manage_stock', 1);
           $stockItem->setData('is_in_stock', 0);
           $stockItem->setData('qty', 0);

        else:
           $stockItem->setData('use_config_manage_stock', 1);
           $stockItem->setData('manage_stock', 0);
           $stockItem->setData('is_in_stock', 1);
           $stockItem->setData('qty', $Qty);

        endif;
        $stockItem->save();
        unset($stockItem);
        echo "Done";
    }
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top