如何在magento中保存csv中的类别位置

时间:2014-10-09 11:00:44

标签: php magento

我想从csv导入Magento中的类别。我成功导入了类别,但无法改变类别的位置。以下是我的示例csv:

position1,category1,position2,category2,position3,category3,position4,category4
1,COSTUMES,1,ADULTS,1,MENS,1,1920S
1,COSTUMES,1,ADULTS,1,MENS,2,ASIAN 

当我执行代码来创建类别时,Magento会在内部忽略我的位置创建位置。我需要根据csv的位置,因为它来自一个feed。 我的代码是:

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/Book1.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($count == 0){
        $count++;
        continue;
    }

    $count++;
      echo "<pre>";
    $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'] = $even_cell_data[$key-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);

        }


    }

}
//function for create 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'];
            $position = $data['general']['position'];


           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->setPosition($position);
         $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 />";
        }
    }
    return $category->getId();
}
//function for move parent id
 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;
}

任何人都可以指出我做错了什么,因为我在Magento没有太多经验。

提前感谢你们

1 个答案:

答案 0 :(得分:0)

使用changeParent类的Catalog_Model_Resource_Category方法。

/**
* Move category to another parent node
*
* @param Mage_Catalog_Model_Category $category
* @param Mage_Catalog_Model_Category $newParent
* @param null|int $afterCategoryId
* @return Mage_Catalog_Model_Resource_Category
*/
public function changeParent(Mage_Catalog_Model_Category $category, Mage_Catalog_Model_Category $newParent,
        $afterCategoryId = null)

您需要在同一级别设置正确位置的$afterCategoryId