Magento - Mise à jour Programmation / ajout de produits de ventes croisées
-
16-10-2019 - |
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.
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();