cancel
Showing results for 
Search instead for 
Did you mean: 

Removing list of products from up-sells items

SOLVED
   Did you know you can see the translated content as per your choice?

Translation is in progress. Please check again after few minutes.

Removing list of products from up-sells items

Hi there,

 

I need to remove a list of products from all the up-sells lists; so what I'm doing is checking the IDs of the up-sells products for each product in the database and ideally remove the IDs of the products I don't need anymore and save it.

 

How can I update the up-sells product list or just remove the item I don't want (having its ID)?

 

Part of the code I wrote:

  • $collection is a Mage Module, Mage::getModel('catalog/product')
  • $discontinued is an array which has as key the entity_id of the product
foreach($collection as $p) {
   $upsell = $p->getUpSellProductIds();

   if ( count($upsell) > 0 ) {

      foreach ($upsell as $k => $u) {

         // Check if the entity_id is among the discontinued products
         if ( isset($discontinued[ $u ]) ) {
            // TODO : Remove the discontinued entity from the up-sells list
         }
      }
   }
}
Thanks in advance for your help
1 ACCEPTED SOLUTION

Accepted Solutions

Re: Removing list of products from up-sells items

The problem I had was related to the way I was trying to save the new data.

Below the right way to save them:

  • setUpSellLinkData is the function to use
  • $upsellToSave is the array I used to formatting the data for the setUpSellLinkData function

 

foreach($collection as $p) {
	$upsell = $p->getUpSellProductIds();
                       
	if ( count($upsell) > 0 ) {
		$toUpdate = false;

		foreach ($upsell as $k => $u) {

        	// Check if the entity_id is among the discontinued products
            if ( isset($discontinued[ $u ]) ) {
            	// Remove the discontinued entity from the up-sells list
				unset($upsell[$k]);
				$toUpdate = true;
			}
		}

		if ($toUpdate) {
			$upsellToSave = array();

            foreach ($upsell as $u)	// Formatting the data
            	$upsellToSave[ $u ] = array('position'=>'');

            try {
				$p->setUpSellLinkData($upsellToSave)->save();
            } catch (Exception $e) {
            	echo "Problem saving up-sell data.\n";
            }
           
    	}
	}
}

 

View solution in original post

1 REPLY 1

Re: Removing list of products from up-sells items

The problem I had was related to the way I was trying to save the new data.

Below the right way to save them:

  • setUpSellLinkData is the function to use
  • $upsellToSave is the array I used to formatting the data for the setUpSellLinkData function

 

foreach($collection as $p) {
	$upsell = $p->getUpSellProductIds();
                       
	if ( count($upsell) > 0 ) {
		$toUpdate = false;

		foreach ($upsell as $k => $u) {

        	// Check if the entity_id is among the discontinued products
            if ( isset($discontinued[ $u ]) ) {
            	// Remove the discontinued entity from the up-sells list
				unset($upsell[$k]);
				$toUpdate = true;
			}
		}

		if ($toUpdate) {
			$upsellToSave = array();

            foreach ($upsell as $u)	// Formatting the data
            	$upsellToSave[ $u ] = array('position'=>'');

            try {
				$p->setUpSellLinkData($upsellToSave)->save();
            } catch (Exception $e) {
            	echo "Problem saving up-sell data.\n";
            }
           
    	}
	}
}