:::: MENU ::::

Copiar los productos de una categoría a otra en Magento

0.00 avg. rating (0% score) - 0 votes

Siguiendo en la misma línea del artículo de ayer, hoy os dejamos un pequelo snippet para copiar los productos de una cateoría de Magento en otra.

Al igual que en nuestro post anterior, es un script útil cuando estamos creando un nuevo website dentro de una instalación de Magento. Si ambos websites tienen diferente árbol de categorías, pero hay una serie de productos compartidos entre ambos, seguramente necesitarás algo como esto.

En este caso, el script copia los productos de una serie de categorías origen, en nuevas categorías destino.

Para ejecutarlo, crea un archivo en tu carpeta raíz de Magento con este contenido, modificalo según tus preferencias y llámalo con el navegador:

<?php
    
    require_once 'app/Mage.php';
    Mage::app('admin');

    // Lista de categorías origen y destino. Los productos de 165 se asignarán a 224, 
    // los de 166 se asignarán a 4, etc.
    $origen  = array(165, 166, 168, 167, 169, 179, 176, 173, 171);
    $destino = array(224, 4,   5,   6,   7,   226, 32,  228, 233);
    
    // Realizamos las asignaciones categoría por categoría
    for ($i=0; $i<count($origen); $i++)
    {
        // Load de categoría origen y destino
        $cat_orig_id = $origen[$i];
        $cat_dest_id = $destino[$i];        
        $cat_orig = Mage::getModel('catalog/category')->load($cat_orig_id);
        $cat_dest = Mage::getModel('catalog/category')->load($cat_dest_id);
    
        // Buscamos los ids de los productos en la categoría origen
        // Necesitamos formar un array del tipo:
        // $productos[<id_del_producto>] = "<posicion_en_la_categoria>"
        $products_dest = array();
        $products_orig = Mage::getModel('catalog/product')->getCollection()->addCategoryFilter($cat_orig);
        foreach ($products_orig as $product) {
            $count++;
            $products_dest[$product->getId()] = $count;
        }
    
        // Asignamos los productos a la nueva categoría
        $cat_dest->setPostedProducts($products_dest);
        $cat_dest->save();
            
        echo 'Modificados ' . $count . ' productos<br />';
    }



Hey! Qué opinas sobre el artículo?