如何使用自定义脚本更新Magento数据库中已存在的类别

时间:2014-10-08 14:27:09

标签: php magento

我已经使用自定义脚本在Magento中创建了类别, 但问题是,当我再次运行相同的URL时,我的脚本会创建另一组相同的类别。因为我想更新现有类别并插入新类别(如果存在于csv。

中)

我的csv结构是:

Category 1,Description,Category 2,Description,Category 3,Description,Category 4,Description

1,COSTUMES,1,ADULTS,1,MENS
1,COSTUMES,1,ADULTS,1,MENS,2,ASIAN
1,COSTUMES,1,ADULTS,1,MENS,3,BIKER
1,COSTUMES,1,ADULTS,1,MENS,1,CAPES & ROBES
1,COSTUMES,1,ADULTS,1,MENS,5,CAVE PEOPLE

提前感谢你们所有人的答案

以下是我创建多级别类别的代码:

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('export/web categories.csv', 'r');
function odd($var)
{

    $odd = array();

     foreach ($var as $k => $v) {
        if ($k % 2 !== 0) {
            $odd[$k] = $v;
        }
    }
    return $odd;
}
function even($var)
{
    $even = array();
     foreach ($var as $k => $v) {
        if ($k % 2 == 0) {
            $even[$k] = $v;
        }
    }
    return $even;
}

function strcount($str,$sy){
    $ch=  explode($sy, $str);
    return count($ch);
}

$pos=0;
$row_config= array();
$test=array();
$catgoryID=array();
$parID = 1;
while (($line = fgetcsv($file)) !== FALSE) {
    if(!in_array($valtest,$row_config)){
    if($count == 0){
        $count++;
        continue;
    }

    $count++;
    $filterd_data=array_filter($line);
    $odd_cell_data=odd($filterd_data);
    $even_cell_data=even($filterd_data);
   $config=array();
   $string='';
    $intialID=$even_cell_data[0];
    foreach($odd_cell_data as $key=>$val){

        if(!in_array($val,$config)){

            $config[] = $val;
            $data['general']['name'] =$val;
            $data['general']['meta_title'] = "";
            $data['general']['meta_description'] = "";
            $data['general']['is_active'] = "";
            $data['general']['url_key'] = "";
            $data['general']['is_anchor'] = 0;
            $data['general']['position'] =1 ;
            $storeId = 0;
            $string .=$val.'~';
            if(!array_key_exists($string, $row_config)){
            $catID=createCategory($data, $storeId);
            $catgoryID[$string]=$catID;
            $row_config[$string]=$parID;

            } else {
               $parID =$row_config[$string] ;
                $row_config[$string]=$row_config[$string];
            } 

            if( strcount($string,'~')==2){
                $parID=1;
             }
           $int[$string]=$parID;

           assignCat($catgoryID[$string],$parID);
           $parID = $catgoryID[$string];


            sleep(0.5);
            unset($data);

        }


    }

    } 

}

//This Function is used for create each category
function createCategory($data, $storeId) {
    $category = Mage::getModel('catalog/category');
    $category->setStoreId($storeId);
    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());
        } 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();
            $category = Mage::getModel('catalog/category')->load($category->getId());
            $category->setPosition($data['general']['position']);
            $category->addData($data['general']); 
            $category->save();
            echo "Suceeded <br /> ";
        } catch (Exception $e) {
            echo "Failed <br />";
        }
    }
    return $category->getId();
}
//This Function is used for moving category under respective parent
 function assignCat($id, $parent){
    $category = Mage::getModel( 'catalog/category' )->load($id);
    Mage::unregister('category');
    Mage::unregister('current_category');
    Mage::register('category', $category);
    Mage::register('current_category', $category);
    $category->move($parent);
    return;
}

0 个答案:

没有答案