Magento - Programmierung Aktualisierung/Hinzufügen von Cross Sell -Produkten
-
16-10-2019 - |
Frage
Eine Website, die ich baue, migrieren Produktinformationen, die Cross Sells enthält (die möglicherweise mehr als eine sein kann). In einer lokalen Datenbank habe ich Informationen zu Produkt -SKU- und Entity -IDs gesetzt. Mein Skript nimmt diese Informationen an und erstellt das Cross Selling Association. Das Problem, das ich habe, ist, dass einige Kreuzungen für diese Produkte manuell durchgeführt wurden und beim Ausführen dieses Skripts alle vorhandenen Cross -Verkaufsverkäufe schreiben.
Mein Code ist:
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/>";
}
}
Was ich wirklich brauche, ist, dass das Cross verkauft, die Produkte aktualisiert werden, aber nicht das bestehende Cross verkauft Produkte.
Jede Hilfe wird sehr geschätzt.
Lösung
Sie können Ihre bauen $param
Array durch Zusammenführen der vorhandenen Daten mit den bereits als Crosssells zugewiesenen Produkten.
Sie können eine Liste der Crosssels wie folgt erhalten:
$crosssells = $product->getCrossSellProducts();
Dadurch erhalten Sie eine Sammlung mit den Produkten. Um es in ein Array in der gleichen Form zu machen wie $param
du kannst das
$param = array();
$crosssells = $product->getCrossSellProducts();
foreach ($crosssells as $item) {
$param[$item->getId()] = array('position' => $item->getPosition());
}
Jetzt hast du in $param
Alle vorhandenen Crosssels in einem "freundlichen" Format.
Sie müssen lediglich Ihre neuen Crosssels hinzufügen:
if (!isset($param[$magentoID])){ //prevent elements from beeing overwritten
$param[$magentoID]= array(
'position'=>1
)
}
Danach fahren Sie einfach mit Ihrem Code fort:
$product->setCrossSellLinkData($param);
$product->save();