Подтвердить что ты не робот

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

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

4b9b3361

Ответ 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();

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