save all textfields by clicking on one update butt

2019-08-11 00:04发布

问题:

we have magento site. we are giving option for vendor to edit all textfields of multiple products and save all by clicking one "Update" button.

we are using following code for saving price of one text field.

Price

public function updateFieldPriceAction(){
    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));
    //Mage::getSingleton('core/session')->setEditProductId($id);

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

    //$stockItem = Mage::getModel('cataloginventory/stock_item')->loadByProduct($id);
    //$stockItem->setData('manage_stock', 1);
    //$stockItem->setData('qty', $this->getRequest()->getParam('qty'));
    $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)); 
    //Mage::getSingleton('core/session')->addSuccess(Mage::helper('marketplace')->__('Your Product Is Been Sucessfully Updated'));


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

  }

we are using following code to save quantity of one text field.

Quantity

public function updateFieldAction(){
        $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));
        //Mage::getSingleton('core/session')->setEditProductId($id);
        $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)); 
        //Mage::getSingleton('core/session')->addSuccess(Mage::helper('marketplace')->__('Your Product Is Been Sucessfully Updated'));
      }

we are using following code to save all textfields of price and quantity by single update button. Price is working. but quantity is not working.

controller.php

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 saved from your account'));
        $this->_redirect('marketplace/marketplaceaccount/myproductslist/');


    }}

回答1:

setQty not working in magento. quantity generally save on stock not in product. remove

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

from your controller.

This is a partial answer, but hopefully it sends you in the right direction. You can try to save quantity by below code in controller.php

 $product->setStockData(
   array( 
          'is_in_stock' => 1, 
          'qty' => $qty[$key],
          'manage_stock' => 1,
          'use_config_notify_stock_qty' => 1
   )
 );

or you can Try this controller.php instead:

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

and then set and save your changes as before. you can check this.

this is your full function for quantity update

public function updateFieldAction(){
        $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));
        //Mage::getSingleton('core/session')->setEditProductId($id);
        $stockItem = Mage::getModel('cataloginventory/stock_item')->loadByProduct($id);
        $stockItem->setData('manage_stock', 1);
        $stockItem->setData('qty', $this->getRequest()->getParam('qty'));

        $stockItem->save();
        $product = Mage::getModel('catalog/product')->load( 'id' );
        $product->save();

        $response['message'] = 'Your Product Is Been Sucessfully Updated';
        $this->getResponse()->setBody(Mage::helper('core')->jsonEncode($response)); 
        //Mage::getSingleton('core/session')->addSuccess(Mage::helper('marketplace')->__('Your Product Is Been Sucessfully Updated'));
      }

controller code

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->setStockData(
       array( 
        'is_in_stock' => 1, 
        'qty' => $qty[$key],
        'manage_stock' => 1,
        'use_config_notify_stock_qty' => 1
       )
    );


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


}}