Скопируйте и вставьте категорию в Magento - PullRequest
5 голосов
/ 17 июня 2010

Я хочу скопировать мою первую категорию во вторую категорию в Magento.Что мне делать?

Спасибо, Уэсли.

Ответы [ 9 ]

4 голосов
/ 06 ноября 2010

по коду:

<?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();
2 голосов
/ 24 ноября 2016

Все ответы здесь не были полными. Я сделал скрипт, который выполняет общее создание новой категории, подкатегорий и назначение продуктов для них.

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);
        }
    }
}
2 голосов
/ 12 декабря 2011

Я бы не клонировал объект категории, а скорее сделал бы что-то подобное (используя Magento API - http://www.magentocommerce.com/wiki/doc/webservices-api/catalog_category):

  • получить категорию, которую необходимо скопировать

    $source_category = Mage::getModel('catalog/category')->load($id);
    
  • Создание новой категории с помощью 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. */
        )
    );
    
  • Получите продукты из исходной категории и поместите их в новую категорию, снова с помощью API.

    $products = $CategoryApi->assignedProducts(source_category->getId());
    
    foreach($products as $product)
    {
        $CategoryApi->assignProduct($product->getId())
    }
    
  • Выше должно быть сделано рекурсивно для каждой подкатегории.

Примечание. Использование API гарантирует, что ваш код будет работать при обновлении ядра Magento.

2 голосов
/ 18 октября 2010

Если вы хотите сделать это программным способом, вы можете использовать Magento API.Использование:

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

Вот документы для категории API

0 голосов
/ 26 ноября 2015

Иногда нам нужно скопировать одни и те же товары в другую категорию (как, например, у нас есть два магазина с одинаковой категорией или в одном магазине, нужно скопировать товары этой категории в другое место)

Добавление продукта из бэк-эндаочень трудоемкий процесс, вы можете сделать это с помощью кода.

Вы можете создать файл в корневом каталоге copy-products.php со следующим кодом для копирования продукта:

<?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();
}
?>
0 голосов
/ 19 августа 2010

Я думаю, что вы хотите экспортировать товары из определенной кошки и импортировать ее в другую.если это так, используйте приведенные ниже шаги:

  • войдите в систему magento backend
  • перейдите в System -> Import / Export
  • Создайте новый расширенный профиль для вашей кошки
  • экспортировать

теперь импортировать таким же образом

0 голосов
/ 04 августа 2010

Это сообщение на форуме содержит инструкции и код для импорта ваших категорий из файла CSV.

Удачи, JD

0 голосов
/ 28 июня 2010

Извините, вы не можете копировать / вставлять категорию непосредственно в админ-панели Magento через интерфейс, который Каталог продуктов может предложить с помощью кнопки «Дублировать».

Полагаю, вам нужно написать скрипт, извлекающий информацию о категории, сначала загрузив модель категории с требуемым ID категории.

0 голосов
/ 18 июня 2010

Вы не можете с интерфейсом администратора, вам нужно.создать скрипт с категорией api.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...