显示产品集合中的父类别和子类别以及子子类别名称

问题描述 投票:0回答:2

我尝试将产品类别名称写入 csv 文件。我的要求是 csv 中有三列“父类别名称”和“子类别名称”“子子类别名称”

所以我通过下面的代码获得了产品集合并获得了类别 ID。

$products = Mage::getModel("catalog/product")->getCollection();

foreach ($products as $product) {
   $catIds = $product->getCategoryIds();
}

树结构示例:CategoryName -- (Category Id)

Main Category --(3) 
   Sub_Cat_1 (4)  
      SubSub_Cat_1 (6)
      SubSub_Cat_2 (7)
      SubSub_Cat_3 (8)

    Sub_Cat_2(5)
      SubSub_Cat_4 (9)
      SubSub_Cat_5 (10)

所以我得到了 $catIds = array(3,4,5,6,7) 但我想要带有关系的名称。

所以我想要 CSV 文件中的以下输出。

Parent_Cat       |   Sub_Cat            |   SubSub_Cat
Main Category    | Sub_Cat_1,Sub_Cat_2  | SubSub_Cat_1,SubSub_Cat_2

我尝试了很多方法,但没有成功。

所以请提前帮助实现。

谢谢,

php magento magento-1.9
2个回答
1
投票

您可以拥有一个包含特定级别上的所有类别的数组(每个键代表一个级别),如下所示:

    $categoriesLevels = array();
    $categoryModel = Mage::getModel('catalog/category');
    $tree = $categoryModel->getTreeModel();
    $tree->load();
    $catIds = $tree->getCollection()->getAllIds();
    foreach ($catIds as $catId){
        $category = Mage::getModel('catalog/category')->load($catId);
        $catLevel = $category->getLevel();
        if (!isset($categoriesLevels[$catLevel])) {
            $categoriesLevels[$catLevel] = array();
        }
        $categoriesLevels[$catLevel] = array_merge($categoriesLevels[$catLevel],array($category->getName()));
    }
    $categoriesLevels = array_filter($categoriesLevels);

因此 $categoriesLevels[0] 将包含根目录的名称,$categoriesLevels[1] 将包含默认类别的名称,$categoriesLevels[2] 将包含所有子类别的名称,$categoriesLevels[3] 将包含包含所有子子类别的名称等

编辑

如果您只想要特定产品的类别,只需更改

$catIds
的获取方式即可:

    $categoriesLevels = array();
    $catIds = $product->getCategoryIds();
    foreach ($catIds as $catId){
        $category = Mage::getModel('catalog/category')->load($catId);
        $catLevel = $category->getLevel();
        if (!isset($categoriesLevels[$catLevel])) {
            $categoriesLevels[$catLevel] = array();
        }
        $categoriesLevels[$catLevel] = array_merge($categoriesLevels[$catLevel], array($category->getName()));
    }
    $categoriesLevels = array_filter($categoriesLevels);

0
投票

终于我找到了解决方案,所以请检查我的答案。

$products = Mage::getModel("catalog/product")->getCollection();
$products->addAttributeToFilter('status', 1);
$products->addAttributeToSelect('*');

$cats = $product->getCategoryIds();
$cat_lel_one = array();
$cat_lel_two = array();
$cat_lel_third = array();
   foreach ($cats as $category_id) {
      $_cat = Mage::getModel('catalog/category')->setStoreId(Mage::app()->getStore()->getId())->load($category_id);

      $cat_info = $_cat->getData();
      if($cat_info['level'] == 1){
         $cat_lel_one[] = $_cat->getName();
      }
      if($cat_info['level'] == 2){
         $cat_lel_two[] = $_cat->getName();
      }
      if($cat_info['level'] == 3){
         $cat_lel_third[] = $_cat->getName();
      }
   }

我的第一级类别位于 $cat_lel_one 变量中。我的第二层 $cat_lel_two 变量中的类别。我的第三级类别 在 $cat_lel_third 变量中。

© www.soinside.com 2019 - 2024. All rights reserved.