首页>Magento>source

我想显示产品所属的类别列表,顶级类别和子类别。

我想出了如何加载正确的topcategories,但是当我循环子类(子类别)时,它会加载该topcategory的所有子类,而不是产品所属的类别。

示例:

就像你可以看到它加载了大量的子类别,但只有红色条纹的子类别是产品所属的子类别。

我怎样才能确保它只显示在其顶级类别下的那些?

我的代码:

$currentCatIds = $_product->getCategoryIds();
  $categoryCollection = Mage::getResourceModel('catalog/category_collection')
 ->addAttributeToSelect('name')
 //  ->addFieldToFilter('level',2)
 ->addAttributeToSelect('url')
 ->addAttributeToFilter('entity_id', $currentCatIds)
 ->addIsActiveFilter();
  $out = "<ul>";
  foreach($categoryCollection as $cat){
      $out .= "<li>";
      $out .= "<b><a href='".$cat->getUrl()."'>".$cat->getName()."</a></b>";
      $out .="<ul class='sub'>";
      $children = Mage::getModel('catalog/category')
      // ->addAttributeToFilter('entity_id', $cat->getCategoryIds())
      ->load($cat->getId())
      ->getChildrenCategories();
          foreach($children as $child){
              $out .="<li><a href='".$child->getUrl()."'>".$child->getName()."</a></li>";
          }
          $out .="</ul>";
      $out .= "</li>";
  }
  $out .= "</ul>";
  echo $out;

为什么他们再次出现在下面? 我只想要topcategories下的子类,而不是两次子类。

最新回答
  • 2019-12-5
    1 #

    尝试更改类别集合,如下所示 -

    foreach($categoryCollection as $cat){
          $out .= "<li>";
          $out .= "<b><a href='".$cat->getUrl()."'>".$cat->getName()."</a></b>";
          $out .="<ul class='sub'>";
          $children = Mage::getModel('catalog/category')
          // ->addAttributeToFilter('entity_id', $cat->getCategoryIds())
          ->load($cat->getId())
          ->getChildrenCategories();
              foreach($children as $child){
                  if(in_array($child->getId(), $product->getCategoryIds())){   // change $product->getCategoryIds() to your product category id array
                     $out .="<li><a href='".$child->getUrl()."'>".$child->getName()."</a></li>";
                  }
              }
              $out .="</ul>";
          $out .= "</li>";
      }
    

    Update to get parent level categories only   将您的类别集合更改为以下代码

    $categoryCollection = Mage::getResourceModel('catalog/category_collection')
     ->addAttributeToSelect('name')
     ->addAttributeToFilter('level', 2)//2 is actually the first level
     ->addAttributeToSelect('url')
     ->addAttributeToFilter('entity_id', $currentCatIds)
     ->addIsActiveFilter();
    

  • 自定义类别列表页面Magento 19上的面包屑
  • magento2:将No-Required参数添加到自定义REST API