如何在Magento中获取产品的类别

时间:2011-02-15 20:54:42

标签: php 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' );
}

问题在于它返回所有类别,而不仅仅是产品所在的类别。任何人都有解决方案吗?

6 个答案:

答案 0 :(得分:60)

使用上面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();
} 

答案 1 :(得分:46)

这完全没有经过测试..

//load the product 

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

//load the categories of this product 

$categoryCollection = $product->getCategoryCollection();

然后你可以通过数组循环遍历$categoryCollection

source

答案 2 :(得分:6)

想要指出@Rao的解决方案是最好的,如果你有一个产品对象来获取类别ID,因为它只进行一次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);
}

答案 3 :(得分:5)

获取产品的所有类别

<?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 :(得分:1)

Rao的解决方案尝试加载所有属性,这意味着大量的查询和连接,但您只需要product_id来加载它的类别。所以你可以这样做:

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

这不会加载产品,并会为您提供类别。

答案 5 :(得分:0)

此代码在Magento 2的phtml文件中有效

$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*/