Pregunta

Para fines de diseño, necesito recuperar la ruta de categoría de productos de cada solo producto. Pude recuperar la ruta de categoría y explotar el primer nivel utilizando el siguiente código en catálogo/producto/list.phtml:

<?php $currentCat = Mage::registry('current_category'); ?>
<?php $exp = explode("/", $currentCat->getPath());?>

Por otro lado, intenté recuperar la ruta de categoría de cada pantalla de producto en resultados de búsqueda para mostrar diferentes colores para cada producto en función de su categoría principal pero sin buenos resultados.

Cualquier ayuda será apreciada. Brgds.

¿Fue útil?

Solución

El siguiente código le dará una matriz que comienza con la categoría de raíz (ID: 1), luego la categoría de raíz almacena y luego la ruta hacia la categoría en la categoría en su producto.

$category = Mage::getModel('catalog/product')->load([id])->getCategory();
$path = explode('/', $category->getPath());

Sin embargo, este es un código bastante 'pesado' solo para fines de diseño. Es posible que sea mejor extender la colección de productos en el Mage_Catalog_Block_Product_List clase, método _getProductCollection uniéndose al catalog_category_entity tabla a la consulta de recolección y agregar el path campo a los campos de selección

Otros consejos

Para obtener el camino del catálogo raíz

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

Utilicé el siguiente código para encontrar categorías de productos para pan rallado al aterrizar a la página del producto fuera del sitio. (cuando if ($category = $this->getCategory()) falla)

$cate La última categoría se encontró el producto y puede usar funciones de categoría para obtener ruta.

Magento/App/Code/Core/Mage/Catalog/Helper/Data.php

Agregue dónde se encuentra el producto si proviene de otro lugar de la categoría

Necesita la solución: TODO: ¡Compruebe si el producto tiene categoría antes de bucle!

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() : ''
                );
        }}
    }
}

Gracias por sus respuestas que me ayudaron a lograr esto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top