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