it-swarm-ru.tech

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

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

33
Joost de Valk

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

$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();
} 
60
Joost de Valk

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

//load the product 

$product = Mage::getModel('catalog/product')->load($productId);

//load the categories of this product 

$categoryCollection = $product->getCategoryCollection();

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

источник

45
Rao

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

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

Хочу отметить, что решение @Rao является лучшим, если у вас есть объект продукта для получения идентификаторов категорий, поскольку он делает только один вызов SQL.

Если у вас просто есть ID категории, вы можете сделать следующее:

$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
augsteyer

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

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

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

1
shampoo

Этот код работает в phtml файле в Magento 2 

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$product = $objectManager->get('Magento\Framework\Registry')->registry('current_product');//get current product
$categories = $product->getCategoryIds(); /*will return category ids array*/  
0
swapnil Nandanwar