obtenir le chemin de la catégorie de produits
Question
pour la conception des fins je dois récupérer le chemin de la catégorie de produit de chaque produit unique. J'ai pu récupérer le chemin de la catégorie et exploser le premier niveau en utilisant le code suivant dans catalogue / produit / list.phtml:
<?php $currentCat = Mage::registry('current_category'); ?>
<?php $exp = explode("/", $currentCat->getPath());?>
d'autre part j'ai essayé de récupérer chemin de la catégorie de chaque affichage du produit dans les résultats de recherche afin d'afficher différentes couleurs pour chaque produit en fonction de leur catégorie mais sans bons résultats.
toute aide sera appréciée. brgds.
La solution
Le code suivant vous donnera un tableau en commençant par la catégorie racine (id: 1)., Puis la stocke catégorie racine, puis le chemin vers le bas pour la catégorie de votre produit est en
$category = Mage::getModel('catalog/product')->load([id])->getCategory();
$path = explode('/', $category->getPath());
Comment jamais, cela est tout à fait un morceau de « lourd » de code juste pour la conception.
Vous pourriez être mieux d'étendre la collection de produits dans la classe Mage_Catalog_Block_Product_List
, méthode _getProductCollection
se joindre à la table catalog_category_entity
à la requête de collecte et en ajoutant le champ path
aux champs sélectionner
Autres conseils
Pour obtenir le chemin du catalogue racine
public function getCategoryPath($sku)
{
$product = Mage::getModel('catalog/product')->loadByAttribute('sku',$sku);
$pathArray = array();
$collection1 = $product->getCategoryCollection()
->setStoreId(Mage::app()->getStore()->getId())
->addAttributeToSelect('path')
->addAttributeToSelect('is_active');
foreach($collection1 as $cat1){
$pathIds = explode('/', $cat1->getPath());
$collection = Mage::getModel('catalog/category')->getCollection()
->setStoreId(Mage::app()->getStore()->getId())
->addAttributeToSelect('name')
->addAttributeToSelect('is_active')
->addFieldToFilter('entity_id', array('in' => $pathIds));
$pahtByName = '';
foreach($collection as $cat){
$pahtByName .= '/' . $cat->getName();
}
$pathArray[] = $pahtByName;
}
return $pathArray;
}
je code suivant pour trouver des catégories de produits pour mie de pain lors de l'atterrissage à la page du produit site extérieur. (Lorsque if ($category = $this->getCategory())
échoue)
$cate
est le dernier produit de la catégorie a été trouvé et vous pouvez utiliser les fonctions de la catégorie pour obtenir le chemin.
magento / app / code / core / Mage / Catalogue / Helper / Data.php
Ajouter où le produit se trouve en venant d'ailleurs que la catégorie
A besoin CORRECTIF: TODO: vérifier si le produit a la catégorie avant le bouclage
if(empty($path)) {
if ($this->getProduct()) {
$collection = Mage::getModel('catalog/category')->getCollection()
->setStoreId(Mage::app()->getStore()->getId())
->addAttributeToSelect('name')
->addAttributeToSelect('is_active')
->addFieldToFilter('entity_id', array('in' => $this->getProduct()->getCategoryIds()));
$categories = array();
$cate = "";
foreach ($collection as $category) {
$cate = $category;
$pathInStore = $category->getPathInStore();
$pathIds = array_reverse(explode(',', $pathInStore));
}
$categories = $cate->getParentCategories();
if($categories) {
foreach($pathIds as $categoryId) {
$path['category'.$categoryId] = array(
'label' => $categories[$categoryId]->getName(),
'link' => $this->_isCategoryLink($categoryId) ? $categories[$categoryId]->getURL() : ''
);
}}
}
}
Merci pour vos réponses qui m'a aidé à y parvenir.