2017-09-01 2 views
0

J'ai fait un petit script qui boucle toutes les catégories auxquelles un produit appartient sur une page de produit. Comme ceci:Boucle categorienames et leurs noms subcat sur la page de produit dans Magento

enter image description here

Mon problème est que toutes les catégories sont présentés dans une grande liste alors qu'ils viennent tous d'une certaine quantité de catégories supérieures. Par exemple pour l'image montrée, toutes les catégories proviennent de allergenenintoleranties et voedingsstijlen. Le client ne voit pas cela.

Je voudrais partager la liste et afficher la catégorie supérieure des sous-catégories appartiennent à comme ceci:

enter image description here

Donc je suppose que je dois d'abord obtenir toutes parentids des catégories puis avec les ids J'ai besoin d'obtenir tous les noms de catégories supérieures, de les boucler, et à l'intérieur de cette boucle, je boucle les sous-catégories.

Comment le ferais-je dans un code structuré magento? La première image est affichée avec le code suivant:

<?php 
// Haal alle categorieen op waar het product onder valt 
$currentCatIds  = $_product->getCategoryIds(); 
$categoryCollection = Mage::getResourceModel('catalog/category_collection') 
->addAttributeToSelect('name') 
->addAttributeToSelect('url') 
->addAttributeToFilter('entity_id', $currentCatIds) 
->addIsActiveFilter(); 


$sorted = sort($categoryCollection); 

$catlist .= '<ul class="categorielijst">'; 
foreach ($categoryCollection as $cat) { 
    if ($cat->getName() != 'Root') { 
     $catlist .= ' 
     <li><a href="' . $cat->getUrl() . '">' . $cat->getName() . '</a></li>'; 
    } 
} 
$catlist .= '</ul>'; 
echo $catlist; 
?> 

Répondre

0
$categoryCollection = Mage::getResourceModel('catalog/category_collection') 
->addFieldToFilter('level',2) 
->addAttributeToSelect('name') 
->addAttributeToSelect('url'); 
$out = "<ul>"; 
    foreach($categoryCollection as $cat){ 
     $children = $cat->getChildren(); 
     $out .= "<li>"; 
     $out .= "<a href='".$cat->getUrl()."'>".$cat->getName()."</a>"; 
      $out .="<ul class='sub'>"; 
      foreach($children as $child){ 
       $ChildModel = Mage::getModel('catalog/category')->load($child); 
       $out .="<li><a href='".$ChildModel->getUrl()."'>".$ChildModel->getName()."</a></li>"; 
      } 
      $out .="</ul>"; 
     $out .= "</li>"; 
    } 
    $out .= "</ul>"; 
    echo $out; 
+0

Est-ce bon code pour magento 1.9? Seules les catégories supérieures sont chargées avec ce code, et non les enfants

    est vide. – twan

    +0

    Cela fonctionne de mon côté, vous devez juste rattraper le 2ème niveau de catégorie à partir de laquelle vous pouvez obtenir toutes les catégories principales (addFieldToFilter ('level', 2)) et après cela vous pouvez obtenir toute sa catégorie enfant par Mage :: getModel (' catalogue/catégorie ') -> charger (- ENFANTS ID--); –