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