it-swarm.com.de

Wie erhalte ich Kategorien für ein Produkt in Magento?

Ich versuche, meiner Magento Google Base-Ausgabe product_type basierend auf den Produktkategorien hinzuzufügen. Dies scheint mir jedoch nicht möglich zu sein. Ich habe folgenden Code:

// 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' );
}

Das Problem ist, dass es alle von den Kategorien zurückgibt, nicht nur die, in denen sich das Produkt befindet. Hat jemand eine Lösung?

33
Joost de Valk

Mit dem oben von Rao abgelegten Quelllink fand ich tatsächlich eine bessere Antwort:

$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

Dies wird absolut nicht getestet.

//load the product 

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

//load the categories of this product 

$categoryCollection = $product->getCategoryCollection();

Sie können dann $categoryCollection wie ein Array durchlaufen.

Quelle

45
Rao

Holen Sie sich alle Kategorien des Produkts

<?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

Ich möchte darauf hinweisen, dass die Lösung von @Rao die beste Lösung ist, wenn Sie ein Produktobjekt haben, von dem Kategorie-IDs abgerufen werden sollen, da nur ein SQL-Aufruf ausgeführt wird.

Wenn Sie nur Kategorien-IDs haben, können Sie Folgendes tun:

$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();
}

Dabei sind Array (1,2,3) Ihre Kategorien. Beachten Sie, dass das Array Ganzzahlen enthält, keine Zeichenfolgenwerte. Ich habe festgestellt, dass SQL diesbezüglich wählerisch sein kann.

Ich möchte auch darauf hinweisen, dass Lösungen, die jeweils eine Kategorie ziehen, sehr ineffizient sind, da sie für jede Iteration der Schleife einen SQL-Aufruf auslösen, z.

foreach(..){
    Mage::getModel('catalog/category')->load($categoryId);
}
5
augsteyer

Die Lösung von Rao versucht, alle Attribute zu laden, was viele Abfragen und Verknüpfungen bedeutet. Sie benötigen jedoch nur einen product_id, um die Kategorien zu laden. So kannst du das machen: 

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

Dadurch wird das Produkt nicht geladen und Sie erhalten die Kategorien. 

1
shampoo

Dieser Code funktioniert in der phtml-Datei in 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