Как получить категории для продукта в Magento
Я пытаюсь добавить product_type к моему выпуску Magento Google Base на основе категорий продуктов, но я, похоже, не могу. У меня есть следующий код:
// Get categories from product to include as product_type
$categoryIds = $object->getCategoryIds();
foreach($categoryIds as $categoryId) {
$category = Mage::getModel('catalog/category')->load($categoryId);
$this->_setAttribute('product_type', $category->getName(), 'text' );
}
Проблема в том, что он возвращает все категории, а не только те, в которых находится продукт. У кого-нибудь есть решение?
Ответы
Ответ 1
Используя исходную ссылку, снятую Rao выше, я действительно нашел лучший ответ:
$product = Mage::getModel('catalog/product')->load($productId);
$cats = $product->getCategoryIds();
foreach ($cats as $category_id) {
$_cat = Mage::getModel('catalog/category')->load($category_id) ;
echo $_cat->getName();
}
Ответ 2
Это совершенно не проверено.
//load the product
$product = Mage::getModel('catalog/product')->load($productId);
//load the categories of this product
$categoryCollection = $product->getCategoryCollection();
Затем вы можете пройти через $categoryCollection
как через массив.
источник
Ответ 3
Получить все категории продукта
<?php
$_Product = Mage::getModel("catalog/product")->load( PRODUCT_ID );
$categoryIds = $_Product->getCategoryIds();//array of product categories
foreach($categoryIds as $categoryId) {
$category = Mage::getModel('catalog/category')->load($categoryId);
$this->_setAttribute('product_type', $category->getName(), 'text' );
}
?>
Ответ 4
Хотите отметить, что решение @Rao является лучшим, если у вас есть объект продукта, чтобы получить идентификатор категории, поскольку он делает только один вызов SQL.
Если у вас есть только идентификатор категории, вы можете сделать следующее:
$categories = Mage::getModel('catalog/category')
->getCollection()
->addAttributeToSelect('name') //you can add more attributes using this
->addAttributeToFilter('entity_id', array('in'=>array(1,2,3)));
foreach($categories as $_cat){
$holder[]= $_cat->getName();
}
Где массив (1,2,3) - ваши категории. Обратите внимание, что массив имеет целые числа, а не строковые значения, я обнаружил, что SQL может быть придирчивым к этому.
Также хотелось бы отметить, что решения, которые вытягивают по одной категории за раз, очень неэффективны, поскольку он вызывает вызов SQL для каждой итерации цикла, например:
foreach(..){
Mage::getModel('catalog/category')->load($categoryId);
}
Ответ 5
Решение Rao пытается загрузить все атрибуты, что означает много запросов и объединений, но вам нужно только product_id
загрузить его категории. Итак, вы можете сделать это:
$product = Mage::getModel("catalog/product")->setId($productId);
$categories = $product->getCategoryCollection();
Это не загрузит продукт и предоставит вам категории.