So erhalten Sie Kategorie-IDs aus der Produktkollektion


7

Ich habe eine Reihe von Produkt-IDs, jetzt möchte ich alle Kategorien erhalten, in die diese Produkte in magento2 gehören .

Zum Beispiel

Wir haben die Kategorien cat_1, cat_2, cat_3, cat_4, cat_5, cat_6, cat_7

product_id_1 existiert in cat_1, cat_2

product_id_2 existiert in cat_3, cat_4

product_id_3 existiert in cat_1, cat_5

Jetzt möchte ich eine Sammlung von Kategorien mit den Kategorien cat1, cat_2, cat_3 und cat_5

Antworten:


10

Sie können array_merge verwenden , um alle IDs aus der Sammlung abzurufen

$prodIds=$block->getProductCollection();
$catIds=[];         
foreach($prodIds as $pid){          

         $product = $this->_productloader->create()->load($pid);   
         $proCats = $product->getCategoryIds();    
         $catIds= array_merge($catIds, $pproCats);   
     }
$finalCat = array_unique($catIds);

5

Wenn Sie alle Kategorie-IDs basierend auf dem Array Ihrer Produkt-IDs erhalten möchten . Sie können es wie folgt erhalten

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$productIdsArray = array(1,2,3,4,5,6,7,8,9); // your product ids
$products = $objectManager->create("Magento\Catalog\Model\Product")->getCollection()->addAttributeToFilter('entity_id',array('in'=> $productIdsArray));

$allCategories = array();  // create a blank array
foreach ($products as $product) {
    $allCategories = array_merge($allCategories, $product->getCategoryIds());  // Merge product category ids array with $allCategories
}
$finalArray = array_unique($allCategories); // removes duplicate entries from an array

Hinweis: Verwenden Sie ObjectManger nicht direkt in Ihrer HTML-Datei. Ich empfehle die Abhängigkeitsinjektion.


4

Sie können die zugewiesenen Kategorien eines Produkts jederzeit mit dem folgenden Code abrufen.

Im Konstruktor:

public function __construct(
        ...
        \Magento\Catalog\Model\ProductFactory $productFactory
    ) {
        ...
        $this->_productFactory = $productFactory;
        ...
    }

Verwenden Sie in Ihrer Methode den folgenden Code

$product = $this->_productFactory->create()->load($pid); // $pid = Product_ID

$cats = $product->getCategoryIds(); // All Categories of $product you will get in array format eg. array(catid 1, catid 2, catid 3)

Danke, aber ich möchte eine Kategoriesammlung von mehreren Produkt-IDs erhalten
Waqar

Sie können Produktschleifen erstellen und ein Kategoriearray für alle Produkte erstellen! Hoffe es hilft dir
Irfan Momin

3

Sie können eine Sammlung von Kategorien nach ID in einem Block wie folgt erhalten:

namespace Your\Modules\Block;


protected $_categoryFactory;

public function __construct(
...
\Magento\Catalog\Model\CategoryFactory $categoryFactory,
...
)
{
...
$this->_categoryFactory = $categoryFactory;
...
}
public function getCategory($categoryId)
{
    $category = $this->_categoryFactory->create();
    $category->load($categoryId);
    return $category;
}
public function getProductbyCategory($categoryId) 
{
    $products = $this->getCategory($categoryId)->getProductCollection();
    $products->addAttributeToSelect('*');
    return $products;
}

Rufen Sie die Funktion in Ihrer HTML-Datei auf:

$collection = $block->getProductbyCategory($catId);
foreach($collection as $data){
    $data->getTitle();
}

Oder Sie können dasselbe in Ihrem Helfer definieren und dann phtml aufrufen:

$yourHelper = $this->helper('Your\Module\Helper\Data');
$collection = $yourHelper->getProductbyCategory($catId);
foreach($collection as $data){
        $data->getTitle();
    }

Ich hoffe das hilft.


Vielen Dank, ich habe eine Reihe von Produkt-IDs und möchte dort Kategorien erhalten
Waqar

Sie können dies versuchen: $ product = $ this -> _ productFactory-> create () -> load ($ pid); $ product = $ this -> _ productFactory-> create () -> load ($ pid); $ cat = $ product-> getCategoryIds (); if (Anzahl ($ Katzen)) {$ firstCategoryId = $ Katzen [0]; $ _category = $ this -> _ categoryFactory-> create () -> load ($ firstCategoryId); return $ _category-> getName (); }
TriAnhHuynh
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.