【问题标题】:display parent category and sub category and sub sub category name from product collection显示产品集合中的父类和子类以及子子类名称
【发布时间】:2016-03-10 17:19:35
【问题描述】:

我正在尝试将产品类别名称写入 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

我尝试了很多方法,但没有运气。

所以请提前帮助实现。

谢谢,

【问题讨论】:

  • 请任何人给我解决这个问题。

标签: magento magento-1.9


【解决方案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);

【讨论】:

  • 感谢 Bogdam Tomi 的回答。
【解决方案2】:

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

$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 变量中。

【讨论】:

    猜你喜欢
    • 2021-07-30
    • 1970-01-01
    • 2013-09-03
    • 1970-01-01
    • 1970-01-01
    • 2014-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多