Holen Sie sich den Produktkategorieweg
Frage
Zum Entwurfszwecke muss ich den Produktkategorienpfad jedes einzelnen Produkts abrufen. Ich konnte den Kategoriepfad abrufen und die erste Ebene mit dem folgenden Code in Katalog/Produkt/list.phtml explodieren:
<?php $currentCat = Mage::registry('current_category'); ?>
<?php $exp = explode("/", $currentCat->getPath());?>
Andererseits habe ich versucht, in Suchergebnissen den Kategoriepfad jeder Produktanzeige abzurufen, um unterschiedliche Farben für jedes Produkt basierend auf ihrer Hauptkategorie anzuzeigen, jedoch ohne gute Ergebnisse.
Jede Hilfe wird geschätzt. Brgds.
Lösung
Der folgende Code gibt Ihnen ein Array, das mit der Stammkategorie (ID: 1), der Stammkategorie gespeichert ist, und dann der Pfad zur Kategorie, in dem Ihr Produkt befindet.
$category = Mage::getModel('catalog/product')->load([id])->getCategory();
$path = explode('/', $category->getPath());
Dies ist jedoch ein ziemlich "schweres" Code nur für Designzwecke. Möglicherweise können Sie die Produktsammlung in der erweitern Mage_Catalog_Block_Product_List
Klasse, Methode _getProductCollection
Beitritt zum catalog_category_entity
Tabelle zur Sammlungsabfrage und Hinzufügen der path
Feld zu den ausgewählten Feldern
Andere Tipps
Um den Weg aus dem Wurzelkatalog zu bekommen
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;
}
Ich habe den folgenden Code verwendet, um Produktkategorien für Breadcrumbs zu finden, wenn sie auf Produktseite außerhalb der Website landen. (Wenn if ($category = $this->getCategory())
scheitert)
$cate
IS Last Kategorieprodukt wurde in gefunden und Sie können Kategoriefunktionen verwenden, um Pfad zu erhalten.
magento/app/code/core/mage/catalog/helper/data.php
Fügen Sie hinzu, wo das Produkt gefunden wird, wenn Sie von einem anderen Ort als einer Kategorie kommen
Bedarf behoben: TODO: Überprüfen Sie, ob das Produkt vor dem Looping eine Kategorie hat!
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() : ''
);
}}
}
}
Vielen Dank für Ihre Antworten, die mir geholfen haben, dies zu erreichen.