2017-09-29 2 views
0

Je souhaite afficher la liste des catégories auxquelles appartient un produit, les catégories et sous-catégories principales. J'ai trouvé comment charger les topcategories correctes, mais quand je boucle les subcats (catégories d'enfants) il charge TOUS les subcats de cette topcategory, pas les catégories que le produit tombe dessous.Comment charger uniquement les catégories enfants qui appartiennent au produit actuel (magento)

Exemple:

enter image description here

Comme vous pouvez le voir il charge une tonne de sous-catégories, mais seulement ceux avec la bande rouge sont les sous-catégories que le produit tombe sous.

Comment puis-je m'assurer qu'il ne montre que ceux qui sont dans leurs catégories supérieures?

Mon code:

$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; 

Répondre

0

Dans votre chèque de boucle si la catégorie a produit ou non. if($cat->getProductCount()){..} et même chose pour $child

$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){ 
    if($cat->getProductCount()){ 
     $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($child->getProductCount()){ 
       $out .="<li><a href='".$child->getUrl()."'>".$child->getName()."</a></li>"; 
      } 
      } 
      $out .="</ul>"; 
     $out .= "</li>"; 
} 
} 
$out .= "</ul>"; 
echo $out; 
0

S'il vous plaît essayer mon code, cela fonctionnera.

<?php 
    $currentCatIds = $_product->getCategoryIds(); 
    foreach ($currentCatIds as $categoryid) { 
      $sub_categories = Mage::getModel('catalog/category')->load($categoryid)->getChildrenCategories(); 
      foreach ($sub_categories as $category) { 
       $cat_details = Mage::getModel('catalog/category')->load($category->getId()); 
        ?> 
        <div class="col-sm-15 col-xs-4"> 
         <div class="catImage"> 
          <a href="<?php echo $cat_details->getUrl(); ?>" title="<?php echo $cat_details->getName(); ?>"> 
           <img src="<?php echo Mage::getBaseUrl('media', array('_secure' => true)) . 'catalog/category/' . $cat_details->getThumbnail(); ?>" alt="<?php echo $cat_details->getName(); ?>"/> 
          </a> 
         </div> 
         <div class="title"> 
          <a href="<?php echo $cat_details->getUrl(); ?>" title="<?php echo $cat_details->getName(); ?>"><?php echo $cat_details->getName(); ?></a> 
         </div> 
        </div> 
        <?php 
      } 
    } 
?>