Как получить категории для продукта в 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' ); } 

Проблема в том, что он возвращает все категории, а не только те, в которых находится продукт. У любого есть решение?

Используя исходную ссылку, вышедшую из-за Рао, я нашел лучший ответ:

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

Это совершенно не проверено.

 //load the product $product = Mage::getModel('catalog/product')->load($productId); //load the categories of this product $categoryCollection = $product->getCategoryCollection(); 

Затем вы можете выполнить цикл $categoryCollection как через массив.

источник

Получить все категории продукта

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

Хотите указать, что решение @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); } 

Решение Rao пытается загрузить все атрибуты, что означает множество запросов и объединений, но вам нужно только product_id для загрузки его категорий. Таким образом, вы можете сделать это:

  $product = Mage::getModel("catalog/product")->setId($productId); $categories = $product->getCategoryCollection(); 

Это не загрузит продукт и предоставит вам категории.