Pregunta

Un sitio que estoy construyendo es la migración de información de productos que incluye cruz vende (que puede ser más de uno). En una base de datos local Tengo información de venta sobre el producto SKU y el ID de entidad. Mi script toma esta información y crea la cruz vende asociación. El problema que estoy teniendo es cierta cruz vende en estos productos se han hecho manualmente y cuando se ejecuta esta secuencia de comandos que van a escribir todo lo largo de la cruz existente vende.

Mi código es:

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

}

Lo que realmente necesito es para la cruz vende productos para ser actualizados, pero no sobrescribe la cruz vende productos existentes.

Cualquier ayuda es muy apreciada.

¿Fue útil?

Solución

Usted puede construir su arsenal $param mediante la fusión de los datos existentes con los productos que ya están asignados como crosssells.
Usted puede obtener una lista de los crosssels como esto:

$crosssells = $product->getCrossSellProducts();

Esto le dará una colección con los productos. Para convertirlo int una matriz en la misma forma que $param puede hacerlo

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

Ahora que tiene en $param todos los crosssels existentes en un formato 'amigable'.
Todo lo que necesita hacer es añadir los nuevos crosssels:

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

Después de esto sólo continuar con su código:

$product->setCrossSellLinkData($param);
$product->save();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top