Я хочу скопировать свою первую категорию во вторую категорию в Magento. Что мне делать?
Спасибо, Уэсли.
По коду:
<?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();
Если вы хотите сделать это программным способом, вы можете использовать Magento API. Использование:
catalog_category.info - to read a category catalog_category.create - to create a new one by copying data from existing.
Вот документы для категории API
Я бы не клонировал объект категории, а делал что-то вроде этого (используя 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.
Все ответы здесь не были полными. Я сделал сценарий, который делает общее создание новой категории, подкатегорий и назначение продуктов для них.
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); } } }
Вы не можете с интерфейсом администратора, вам нужно. создать сценарий с категорией api.
Извините, вы не можете скопировать / вставить категорию непосредственно в панель администратора Magento через интерфейс, который Catalog Products может предлагать с помощью кнопки «Дублировать».
Полагаю, вам нужно будет написать сценарий, получая данные о категории, сначала загрузив модель категории с требуемым идентификатором категории.
Это сообщение на форуме содержит инструкции и код для импорта ваших категорий из файла CSV.
Удачи, JD
Я думаю, вы хотите экспортировать продукты из определенного кота и импортировать их в другой. если это так, используйте следующие шаги:
теперь импортируйте его таким же образом
Иногда нам нужно скопировать одни и те же продукты в другую категорию (например, у нас есть два магазина с одинаковой категорией или внутри одного магазина, чтобы скопировать продукты категории в другое место)
Добавление продукта из back-end очень трудоемкий процесс, вы можете сделать это с помощью кода.
Вы можете создать файл в корневом каталоге 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(); } ?>