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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top