2010-06-17 28 views
5

Quiero copiar mi primera categoría a una segunda categoría en Magento. ¿Qué debo hacer?Categoría copiar y pegar en Magento

Gracias, Wesley.

+0

Copiar cómo. Programado en su script, o en la interfaz de administración de Magento? –

+0

Oh, no importa administrador o script. – Wesley

Respuesta

0

No se puede con la interfaz de administrador, es necesario. para crear una secuencia de comandos con la categoría api.

+0

oh, ¿podría darme un guión, por favor? – Wesley

0

Lo sentimos, no se puede copiar/pegar Categoría directamente en el panel de administración de Magento a través de la interfaz, que Catalog Products puede ofrecer con la ayuda del botón "Duplicar".

Supongo que tendrá que escribir una secuencia de comandos recuperando los detalles de la categoría cargando primero el modelo de categoría con la ID de categoría requerida.

0

Este forum post contiene instrucciones y código para importar sus categorías de un archivo CSV.

Buena suerte, JD

0

creo que quiere exportar productos de un gato específico e importarlo a otro. si es así que utilice los pasos detallados a continuación:

  • entrada al backend de Magento
  • navegar a Sistema -> Importar/Exportar
  • Crear un nuevo perfil avanzado para su gato
  • exportarlo

ahora impórtelo de la misma manera

2

Si desea hacerlo de forma programática, puede utilizar la API de Magento. Uso:

catalog_category.info - to read a category 
catalog_category.create - to create a new one by copying data from existing. 

Aquí están los documentos para category API

+0

Gran idea. Necesitaba crear algunas categorías dentro de un script de instalación (dentro de magento), y usar Mage :: getModel ('catalog/category_api_v2') -> create() funcionó muy bien. El único problema es que el segundo parámetro ($ categoryData) debe ser un objeto, no una matriz. Era más fácil que imaginar cómo crear una categoría de la manera "normal". – shaune

4

Por código:

<?php 
$category = Mage::getModel('catalog/category') 
    ->load(123); // The ID of the category you want to copy. 
$copy = clone $category; 
$copy->setId(null) // Remove the ID. 
    ->save(); 
+0

¿Esto también asociará los productos de la primera categoría con la segunda? Parece dudoso – clockworkgeek

+0

No estoy seguro. No lo creo. Pero puede buclear fácilmente '$ category-> getProductCollection()' y agregar la nueva categoría a cada producto: '$ product-> setCategoriesIds (array_merge ($ product-> getCategoriesIds(), array ($ copy-> getId()))) '. – joksnet

2

no me clonar la categoría de objeto, sino más bien hacer algo como esto (utilizando la API de Magento - http://www.magentocommerce.com/wiki/doc/webservices-api/catalog_category):

  • obtener la categ ORY cual debe ser copiado

    $source_category = Mage::getModel('catalog/category')->load($id); 
    
  • crear una nueva categoría mediante la API

    $CategoryApi = new Mage_Catalog_Model_Category_Api(); 
    $parent_id = /* Location for the new category */ 
    
    $new_category_id = $CategoryApi->create(
        $parent_id, 
        array(
         /* Attributes to fill with source category values. */ 
        ) 
    ); 
    
  • Obtener la categoría de productos de origen y colocarlos en la nueva categoría, de nuevo con la API.

    $products = $CategoryApi->assignedProducts(source_category->getId()); 
    
    foreach($products as $product) 
    { 
        $CategoryApi->assignProduct($product->getId()) 
    } 
    
  • anterior debe hacerse recursivamente para cada subcategoría.

Nota: El uso de la API garantiza que su código seguirá funcionando cuando actualice el núcleo de Magento.

0

En algún momento tenemos que copiar mismos productos a otra categoría. (Como tenemos dos tiendas con una misma categoría o dentro de la misma tienda necesidad de copiar los productos de la categoría a otro lugar)

Adición de producto de servicios de fondo es muy proceso que consume tiempo puede hacerlo por código.

Puede crear un archivo en el directorio raíz de copia-products.php con el siguiente código para copiar producto:

<?php 
require_once ("app/Mage.php"); 
umask(0); 

// Initialize Magento 
Mage::app(); 

$category = Mage::getModel('catalog/category'); 
$category->load('24'); // Category id you want to copy 
$collection = $category->getProductCollection(); 
$collection->addAttributeToSelect('*'); 
foreach ($collection as $product) { 
     $product->getId();// Now get category ids and add a specific category to them and save? 
     $categories = $product->getCategoryIds(); 
     $categories[] = 29; // Category id you want to add 
     $product->setCategoryIds($categories); 
     $product->save(); 
} 
?> 
2

Todas las respuestas aquí no estaban completos. Hice un guion que hace el total Creando la nueva categoría, subcategorías y asignándoles los productos.

public function run() 
{ 
    $categoryId = 123; 
    // Change this if you want the copy to be under another category than the default 
    $baseCategoryId = 2; 

    $category = Mage::getModel('catalog/category')->load($categoryId); 
    $defaultCategory = Mage::getModel('catalog/category')->load($baseCategoryId); 

    $this->duplicate($category, $defaultCategory, 1); 
} 

private function duplicate($categoryToClone, $parentCategory, $level) 
{ 
    // This will clone the clild and assign it to the new parent 
    $newCategory = clone $categoryToClone; 
    $newCategory->setPath($parentCategory->getPath()) 
     ->setParentId($parentCategory->getId()) 
     ->setId(null); 

    // Optional, Only change the new with suffix with "new" for the first 
    if ($level == 1) { 
     $newCategory->setUrlKey($categoryToClone->getUrlKey() . '-new') 
      ->setName($categoryToClone->getName() . '(new)'); 
    } 
    // Assign all products from the cloned category to the new 
    $newCategory->setPostedProducts($categoryToClone->getProductsPosition()); 

    $newCategory->save(); 

    // Applies the changes to the subcategories infinite levels 
    $subcategories = $categoryToClone->getChildrenCategories(); 
    if (count($subcategories) > 0) { 
     foreach ($subcategories as $subcategory) { 
      $this->duplicate($subcategory, $newCategory, ++$level); 
     } 
    } 
} 
Cuestiones relacionadas