Скоро ни се наложи да изработим онлайн магазин с Magento с над 400 категории. Създаването на толкова категории ръчно е доста китайски труд. За целта използвахме скрипт, с който динамично създадохме всички категории.
1. Създайте CSV файл, например catsImport.csv със следната структура:
categoryID, categoryName
————————
6, Принтери
7, Тонери
8, Мастила
и т.н.
Качете CSV файла в папката var/import на вашата Magento инсталация. Ако папката не съществува, създайте я и не забравяйте chmod 777.
2. Използвайте този скрипт, за импорт на категориите от CSV файла:
<?php define('MAGENTO', realpath(dirname(__FILE__))); require_once MAGENTO . '/app/Mage.php'; umask(0); Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID); $count = 0; $file = fopen('./var/import/catsImport.csv', 'r'); while (($line = fgetcsv($file)) !== FALSE) { $count++; //$line is an array of the csv elements if (!empty($line[0]) && !empty($line[1])) { $data['general']['path'] = $line[0]; $data['general']['name'] = $line[1]; $data['general']['meta_title'] = ""; $data['general']['meta_description'] = ""; $data['general']['is_active'] = ""; $data['general']['url_key'] = ""; $data['general']['display_mode'] = "PRODUCTS"; $data['general']['is_anchor'] = 0; $data['category']['parent'] = $line[0]; // 3 top level $storeId = 0; createCategory($data,$storeId); sleep(0.5); unset($data); } } function createCategory($data,$storeId) { echo "Starting {$data['general']['name']} [{$data['category']['parent']}] ..."; $category = Mage::getModel('catalog/category'); $category->setStoreId($storeId); # Fix must be applied to run script #http://www.magentocommerce.com/boards/appserv/main.php/viewreply/157328/ if (is_array($data)) { $category->addData($data['general']); if (!$category->getId()) { $parentId = $data['category']['parent']; if (!$parentId) { if ($storeId) { $parentId = Mage::app()->getStore($storeId)->getRootCategoryId(); } else { $parentId = Mage_Catalog_Model_Category::TREE_ROOT_ID; } } $parentCategory = Mage::getModel('catalog/category')->load($parentId); $category->setPath($parentCategory->getPath()); } /** * Check "Use Default Value" checkboxes values */ if ($useDefaults = $data['use_default']) { foreach ($useDefaults as $attributeCode) { $category->setData($attributeCode, null); } } $category->setAttributeSetId($category->getDefaultAttributeSetId()); if (isset($data['category_products']) && !$category->getProductsReadonly()) { $products = array(); parse_str($data['category_products'], $products); $category->setPostedProducts($products); } try { $category->save(); echo "Suceeded <br /> "; } catch (Exception $e){ echo "Failed <br />"; } } }
Запазете файла като QuickCreateCats.php в главната директория на инсталацията и го изпълнете през браузъра.
По подразбиране новосъздадените категории са неактивни, ако искате категориите да бъдат активирани при създаването им, променете:
$data['general']['is_active'] = "";
на
$data['general']['is_active'] = "1";
Съветваме ви да не използвате скрипта на „жив“ магазин, винаги първо изпробвайте на тестова инсталация. Също така е добре да проверите вече наличните категории, като използвате скрипта за Експорт на категории в Magento с техните ID-та.
Поради малък бъг в оригиналния код на Magento, ето един бърз фикс в:
./app/code/core/Mage/Catalog/Model/Resource/Eav/Mysql4/Category.php line #110
protected function _getTree()
{
//if (!$this->_tree) {
$this->_tree = Mage::getResourceModel(‘catalog/category_tree’)
->load();
//}
return $this->_tree;
}
Успех!