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.

War es hilfreich?

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();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top