Question

Un site Je construis est la migration des informations de produit qui comprend croix vend (qui peut être plus d'un). Dans une base de données locale, j'ai mis sur l'information produit sku et ids entité. Mon script prend ces informations et crée la croix vend association. Le problème que je vais avoir est une croix vend ces produits ont été fait manuellement et lors de l'exécution de ce script, il sera plus écrire toute la section existante Sells.

Mon code est:

umask(0);
require_once '../app/Mage.php';
Mage::app('admin');  

$sql = "SELECT * FROM books2";
$query = mysql_query($sql);

while($row = mysql_fetch_array($query)){    

    $collection = Mage::getModel('catalog/product')->getCollection();

    $collection->addAttributeToSelect('*'); 
    $collection->addFieldToFilter(array(
    array('attribute'=>'sku',   'eq'=>$row['assocIsbn']),

    )); 

    echo "Looking at ".$row['assocIsbn']." relation prod id=".$row['magid']."<br/>";

    foreach ($collection as $product) {

        $magentoID = $row['magid'];

        $param = array(
               $magentoID=>array(
                      'position'=>1
                )
        );
        $product->setCrossSellLinkData($param);

        $product->save();

        echo "Updated ".$row['assocIsbn']." with rel3 product of ".$magentoID." <br/>";

        echo "<hr/>";
    } 

}

Ce que je vraiment besoin est de la croix vend des produits à jour, mais pas remplacer la croix existante vend des produits.

Toute aide est très appréciée.

Était-ce utile?

La solution

Vous pouvez construire votre tableau de $param en fusionnant les données existantes avec les produits déjà attribués comme crosssells.
Vous pouvez obtenir une liste des crosssels comme ceci:

$crosssells = $product->getCrossSellProducts();

Cela vous donnera une collection avec les produits. Pour l'activer int un tableau dans la même forme que $param vous pouvez le faire

$param = array();
$crosssells = $product->getCrossSellProducts();
foreach ($crosssells as $item) {
    $param[$item->getId()] = array('position' => $item->getPosition());
}

Maintenant que vous avez dans $param tous les crosssels existants dans un format « amical ».
Tout ce que vous devez faire est d'ajouter de nouveaux crosssels:

if (!isset($param[$magentoID])){ //prevent elements from beeing overwritten
    $param[$magentoID]= array(
         'position'=>1
    )
}

Après cela juste continuer avec votre code:

$product->setCrossSellLinkData($param);
$product->save();
Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top