Domanda

Un sito che sto costruendo sta migrando informazioni sui prodotti che comprende croce vende (che possono essere più di uno). In un database locale Ho informazioni put sul Prodotto Codice e gli ID entità. Il mio script prende queste informazioni e crea la croce vende associazione. Il problema che sto avendo è qualche cross vende questi prodotti sono stati fatti a mano e quando si esegue lo script sarà più di scrivere tutto della croce esistente vende.

Il mio codice è:

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/>";
    } 

}

Quello che ho veramente bisogno è per la croce vende prodotti da aggiornare, ma non sovrascrive la croce esistente vende prodotti.

Ogni aiuto è molto apprezzato.

È stato utile?

Soluzione

È possibile costruire l'array $param unendo i dati esistenti con i prodotti già assegnati come crosssells.
È possibile ottenere un elenco dei crosssels in questo modo:

$crosssells = $product->getCrossSellProducts();

Questo vi darà una raccolta con i prodotti. Per trasformarlo int una matrice nella stessa forma come $param si può fare questo

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

Ora che avete in $param tutte le crosssels esistenti in un formato 'amichevole'.
Tutto quello che dovete fare è aggiungere i tuoi nuovi crosssels:

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

Dopo questo basta continuare con il tuo codice:

$product->setCrossSellLinkData($param);
$product->save();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top