Вопрос

Для целей проектирования мне нужно получить путь категории продукта каждого отдельного продукта. Я смог получить путь категории и взорвать первый уровень, используя следующий код в каталоге/продукт/list.phtml:

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

С другой стороны, я попытался получить путь категории категории каждого отображения продукта в результатах поиска, чтобы отображать разные цвета для каждого продукта на основе их основной категории, но без хороших результатов.

Любая помощь будет оценена. Brgds.

Это было полезно?

Решение

Следующий код даст вам массив, начиная с категории корней (ID: 1), затем категория корней магазинов, а затем путь к категории, в которой находится ваш продукт.

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

Однако это довольно «тяжелый» кусок кода только для целей дизайна. Вы можете лучше расширить сбор продуктов в Mage_Catalog_Block_Product_List класс, метод _getProductCollection присоединение к catalog_category_entity таблица к запросу коллекции и добавление path Поле в выберите поля

Другие советы

Чтобы получить путь от корневого каталога

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

Я использовал следующий код, чтобы найти категории продуктов для панировочных сухарей при посадке на страницу продукта за пределами сайта. (когда if ($category = $this->getCategory()) терпит неудачу)

$cate Последняя категория продукт был найден, и вы можете использовать функции категорий для достижения пути.

magento/app/code/core/mage/catalog/helper/data.php

Добавьте, где продукт найден, если откуда -то еще, кроме категории

Требуется исправление: TODO: Проверьте, есть ли у продукта категория перед циклами!

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

Спасибо за ваши ответы, которые помогли мне сделать это.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top