J'essaie d'ajouter product_type à la sortie de Magento Google Base en fonction des catégories du produit, mais il semble que je ne puisse pas. J'ai le code suivant:
// 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' );
}
Le problème est qu'il renvoie toutes des catégories, pas seulement celles dans lesquelles se trouve le produit. Quelqu'un a-t-il une solution?
En utilisant le lien source supprimé par Rao ci-dessus, j'ai trouvé une meilleure réponse:
$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();
}
Ceci n'est absolument pas testé ..
//load the product
$product = Mage::getModel('catalog/product')->load($productId);
//load the categories of this product
$categoryCollection = $product->getCategoryCollection();
Vous pouvez ensuite parcourir $categoryCollection
comme dans un tableau.
Obtenir toutes les catégories du produit
<?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' );
}
?>
Voulez-vous souligner que la solution de @Rao est la meilleure si vous avez un objet de produit à partir duquel obtenir les ID de catégorie car il ne fait qu'un seul appel SQL.
Si vous ne possédez que des identifiants de catégorie, vous pouvez procéder comme suit:
$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();
}
Où tableau (1,2,3) sont vos catégories. Notez que le tableau a des entiers, pas des valeurs de chaîne, j'ai trouvé que SQL peut être difficile à ce sujet.
Voulait également souligner que les solutions tirant une catégorie à la fois sont très inefficaces car elles effectuent un appel SQL à chaque itération de la boucle, par exemple:
foreach(..){
Mage::getModel('catalog/category')->load($categoryId);
}
La solution de Rao tente de charger tous les attributs, ce qui signifie beaucoup de requêtes et de jointures, mais vous n'avez besoin que d'un product_id
pour charger ses catégories. Donc, vous pouvez faire ceci:
$product = Mage::getModel("catalog/product")->setId($productId);
$categories = $product->getCategoryCollection();
Cela ne chargera pas le produit et vous donnera les catégories.
Ce code fonctionne dans un fichier phtml dans 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*/