Obtener la ruta de categoría de productos
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.
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.