我正在尝试根据产品的类别将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' );
}
问题在于它返回所有类别,而不仅仅是产品所在的类别。任何人都有解决方案吗?
答案 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
。
答案 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*/