Отримати колекцію товарів за ідентифікатором категорії в Magento

Як розробник, вам зазвичай доводиться виконувати багато буденних завдань. Вони вимагали б багато часу, якби ви не знали жодних хитрощів для швидшої обробки великих обсягів інформації. Одним із таких завдань є отримання колекції продуктів за ID категорії для пов'язаних продуктів або оновлення цін тощо.

Якою б не була причина, ви повинні знати, як отримати колекцію продуктів за ID категорії в Magento.

Щоб отримати колекцію продуктів за ID категорії:

Отримати колекцію продуктів за ID категорії за допомогою конструкції класу

/**
* @var \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory
*/
protected $_productCollectionFactory;

public function __construct(
\Magento\Backend\Block\Template\Context $context,
\Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory
) {
$this->_productCollectionFactory = $productCollectionFactory;
parent::__construct($context);
}


public function getProductCollectionByCategoryIds($ids)
{
$collection = $this->_productCollectionFactory->create();
$collection->addAttributeToSelect('*');
$collection->addCategoriesFilter(['in' => $ids]);
return $collection;
}

, де

  • $ids — масив з ID категорій.
  • $_productCollectionFactory — об'єкт фабрики колекції продуктів, який використовується для отримання колекції моделі продукту.
  • addCategoriesFilter — функція, яка застосовує фільтр категорій.
  • $collection — повертає колекцію продуктів із заданих категорій

, а потім використовуємо

$ids = [6,29,350];
$categoryProducts = $this->getProductCollectionByCategoryIds($ids);

foreach ($categoryProducts as $product) {
    echo $product->getName() . ' - ' . $product->getProductUrl() . PHP_EOL;
}

Отримати колекцію продуктів за ідентифікатором категорії за допомогою диспетчера об'єктів

Отримати колекцію продуктів за ідентифікатором категорії за допомогою менеджер об'єктів :

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$_productCollectionFactory = $objectManager->create(\Magento\Catalog\Model\ResourceModel\Product\CollectionFactory::class);

$categoryIds = [9];

$collection = $_productCollectionFactory->create();
$collection->addAttributeToSelect('*');
$collection->addCategoriesFilter(['in' => $categoryIds]);

foreach ($collection as $product) {
    print_r($product->getData());
}

Розробка на Magento легко, якщо ви знаєте, які інструменти використовувати, щоб зробити вашу розробку ефективнішою. ​​Тепер, коли ви знаєте, як отримати колекцію продуктів за ідентифікатором категорії, ви можете продовжити та відобразити її де завгодно.