Получить путь категории продукта
Вопрос
Для целей проектирования мне нужно получить путь категории продукта каждого отдельного продукта. Я смог получить путь категории и взорвать первый уровень, используя следующий код в каталоге/продукт/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() : ''
);
}}
}
}
Спасибо за ваши ответы, которые помогли мне сделать это.