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

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

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

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

Get Product Collection by Category ID через Class Construct

/**
* @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 — масив з ідентифікаторами категорій.
  • $_productCollectionFactory — об’єкт factory колекцій продуктів, який використовується для отримання колекції моделі продукту.
  • addCategoriesFilter — функція, яка застосовує фільтр категорії.
  • $collection — повертає колекцію продуктів із заданих категорій

тоді використайте

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

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

Get Product Collection by Category ID через Object Manager

Отримайте колекцію продуктів за ідентифікатором категорії за допомогою object manager:

$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 є легкою, якщо ви знаєте, які інструменти використовувати, щоб зробити цю розробку ефективнішою. Тепер, коли ви знаєте, як отримати колекцію продуктів за ідентифікатором категорії, ви можете показувати її там, де вам потрібно.