Update products programmatically in Magento

后端 未结 5 803
礼貌的吻别
礼貌的吻别 2020-12-13 15:53

I\'m working on a script that will create or update products in my catalog.
The script works fine when the product needs to be created, but it fails when the product alr

相关标签:
5条回答
  • 2020-12-13 16:11

    Chances are, in your "setter calls" you are trying to set something that cannot be directly set on $product. It could even be the "setTeinte" as I am not sure what that is trying to set. But as we cannot see all your code, it is a little difficult to say, so as I guide, take a look at the code below, which sets some information directly on the product and then stock levels. It does therefore, illustrate how certain data has to be set. I hope it helps.

    $SKU = (string)$XMLproduct->Sku;
    $product = Mage::getModel('catalog/product')->loadByAttribute('sku',$SKU);
    
    if ($product) {
        //Product found, so we need to update it in Magento.
    
        $product->setName((string)$XMLproduct->Name);
        $product->setPrice((real)$XMLproduct->SalePrice);
        //$product->setDescription((string)$XMLproduct->LongDescription);
        //$product->setShortDescription((string)$XMLproduct->Description);
    
        $product->save();
    
        $productId = $product->getId();
        $stockItem =Mage::getModel('cataloginventory/stock_item')->loadByProduct($productId);
        $stockItemId = $stockItem->getId();
    
        $stockItem->setData('manage_stock', 1);
        $stockItem->setData('qty', (integer)$XMLproduct->QtyInStock);
    
        $stockItem->save();
    
        echo $SKU," Updated: Name: '",(string)$XMLproduct->Name,"', Price: ",(real)$XMLproduct->SalePrice,", Stock level: ",$XMLproduct->QtyInStock,PHP_EOL;
    
        $updated++;
    } 
    
    0 讨论(0)
  • 2020-12-13 16:11

    Easy with Magento API, also can use methods....

    example

    $data = array('qty'=>1, 'is_in_stock'=>1)
    
    $stockModel = new Mage_CatalogInventory_Model_Stock_Item_Api;
    $stockModel->update($product_id, $data);
    

    Also can set Admin mode

    Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
    
    0 讨论(0)
  • 2020-12-13 16:13

    Adding Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID); before saving product solves the error. The sample code below updates product's cost.

    Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
    $productId = 160;
    $newCost = 80;
    $product = Mage::getModel('catalog/product')->load($productId);
    $product->setCost($newCost)->save();
    
    0 讨论(0)
  • 2020-12-13 16:14
    <?php
    Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
    $product = Mage::getModel('catalog/product');
    
    $product
    //    ->setStoreId(1) //you can set data in store scope
        ->setWebsiteIds(array(1)) //website ID the product is assigned to, as an array
        ->setAttributeSetId(9) //ID of a attribute set named 'default'
        ->setTypeId('simple') //product type
        ->setCreatedAt(strtotime('now')) //product creation time
    //    ->setUpdatedAt(strtotime('now')) //product update time
    
        ->setSku('testsku61') //SKU
        ->setName('test product21') //product name
        ->setWeight(4.0000)
        ->setStatus(1) //product status (1 - enabled, 2 - disabled)
        ->setTaxClassId(4) //tax class (0 - none, 1 - default, 2 - taxable, 4 - shipping)
        ->setVisibility(Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH) //catalog and search visibility
        ->setManufacturer(28) //manufacturer id
        ->setColor(24)
        ->setNewsFromDate('06/26/2014') //product set as new from
        ->setNewsToDate('06/30/2014') //product set as new to
        ->setCountryOfManufacture('AF') //country of manufacture (2-letter country code)
    
        ->setPrice(11.22) //price in form 11.22
        ->setCost(22.33) //price in form 11.22
        ->setSpecialPrice(00.44) //special price in form 11.22
        ->setSpecialFromDate('06/1/2014') //special price from (MM-DD-YYYY)
        ->setSpecialToDate('06/30/2014') //special price to (MM-DD-YYYY)
        ->setMsrpEnabled(1) //enable MAP
        ->setMsrpDisplayActualPriceType(1) //display actual price (1 - on gesture, 2 - in cart, 3 - before order confirmation, 4 - use config)
        ->setMsrp(99.99) //Manufacturer's Suggested Retail Price
    
        ->setMetaTitle('test meta title 2')
        ->setMetaKeyword('test meta keyword 2')
        ->setMetaDescription('test meta description 2')
    
        ->setDescription('This is a long description')
        ->setShortDescription('This is a short description')
    
        ->setMediaGallery (array('images'=>array (), 'values'=>array ())) //media gallery initialization
        ->addImageToMediaGallery('media/catalog/product/1/0/10243-1.png', array('image','thumbnail','small_image'), false, false) //assigning image, thumb and small image to media gallery
    
        ->setStockData(array(
                           'use_config_manage_stock' => 0, //'Use config settings' checkbox
                           'manage_stock'=>1, //manage stock
                           'min_sale_qty'=>1, //Minimum Qty Allowed in Shopping Cart
                           'max_sale_qty'=>2, //Maximum Qty Allowed in Shopping Cart
                           'is_in_stock' => 1, //Stock Availability
                           'qty' => 999 //qty
                       )
        )
    
        ->setCategoryIds(array(3, 10)); //assign product to categories
    $product->save();
    
    0 讨论(0)
  • 2020-12-13 16:15
    //here what i use in codeigniter
    function updateProducts(){
        $params = array('name' => 'adminhtml'); // frontend or adminhtml
        $this->load->library('magento', $params);
        error_reporting(E_ALL | E_STRICT);
        //$mageFilename = 'app/Mage.php';
        //require_once $mageFilename;
        Mage::setIsDeveloperMode(true);
        umask(0);
        Mage::app();
        Mage::app()->setCurrentStore(Mage::getModel('core/store')->load(Mage_Core_Model_App::ADMIN_STORE_ID));      
        $obj = new stdClass(); 
        $obj->Sku = '25484684';
        $obj->Name = 'test product 2';
        $obj->SalePrice = 55;
        $obj->LongDescription = 'test product long decription.test product long decription.test product long decription.';
        $obj->Description = 'short descrption';
        $res = $this->updateMagentoProduct($obj);
        //dumb($res);
    }
    function updateMagentoProduct($XMLproduct){
        $SKU = (string)$XMLproduct->Sku;
        $product = Mage::getModel('catalog/product')->loadByAttribute('sku',$SKU);
        if (!$product) {//insert new product
            $product = Mage::getModel('catalog/product');
            $product->setSku($SKU);
        }       
        //$product = new Mage_Catalog_Model_Product();
        // Build the product
        $product->setAttributeSetId(4); // 4 means Default AttributeSet
        $product->setTypeId('simple');
        $product->setName((string)$XMLproduct->Name);
        $product->setCategoryIds(array(2,3,4,5,6,7));
        $product->setWebsiteIDs(array(1)); # Website id, 1 is default 
           //$product->setWebsiteIds(array(Mage::app()->getStore(true)->getWebsite()->getId()));
        //$product->setWebsiteIDs(array(1)); # Website id, my is 1 (default frontend)
        $product->setDescription((string)$XMLproduct->LongDescription);
        $product->setShortDescription((string)$XMLproduct->Description);
        $product->setPrice((real)$XMLproduct->SalePrice);
        # Custom created and assigned attributes
        //$product->setHeight('my_custom_attribute1_val');
        //$product->setWidth('my_custom_attribute2_val');
        //$product->setDepth('my_custom_attribute3_val');
        //$product->setType('my_custom_attribute4_val');
        //Default Magento attribute
        $product->setWeight(1.0);
            $product->setVisibility(Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH);
        $product->setStatus(1);
        $product->setTaxClassId(0); # My default tax class
        /*$product->setStockData(array(
            'is_in_stock' => 1,
            'qty' => 99999
        ));*/
        $product->setCreatedAt(strtotime('now'));
        try {
    
            $product->save();
            $productId = $product->getId();
            $stockItem =Mage::getModel('cataloginventory/stock_item')->loadByProduct($productId);
            $stockItemId = $stockItem->getId();
    
            $stockItem->setData('manage_stock', 1);
            $stockItem->setData('qty', 99999);//(integer)$XMLproduct->QtyInStock
    
            $stockItem->save();
    
    
    
            echo '<h5>'.$SKU," Updated: Name: '",(string)$XMLproduct->Name,"', Price: ",(real)$XMLproduct->SalePrice,", Stock level: ",PHP_EOL.'</h5>';
        }
        catch (Exception $ex) {
            //Handle the error
            echo '<h5>'.$ex->getMessage().'</h5>';
        }
        // assign product to the default website        
        return $product->save();
    }
    
    0 讨论(0)
提交回复
热议问题