Як отримати колекцію товарів в Magento 2
У сьогоднішній практичної статті ми розглянемо 2 способи, які вирішують проблему отримання колекції товарів в Magento 2. Перший метод передбачає використання ін’єкції залежностей (DI), а другий – використання менеджера об’єктів (Object Manager). А тепер перейдемо до практики.
Метод №1: Використовуємо ін’єкцію залежностей (DI)
Ви можете отримати доступ до списку товарів свого інтернет-магазину на Magento 2 використовуючи ін’єкцію залежностей (Dependency Injection – DI). Як її використовувати ми розглядали в попередній статті.
По-перше, потрібно зробити ін’єкцію об’єкта класу \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory
в конструктор класу Блоку вашого модуля, а потім отримати до нього доступ з файлу .phtml
теми.
Приблизний шлях до файлу, в якому ви будете його використовувати, приблизно такий:
app/code/VendorName/ModuleName/Block/YourBlock.php
Код в цьому файлі буде приблизно таким:
<?php namespace VendorName\ModuleName\Block; class YourBlock extends \Magento\Framework\View\Element\Template { protected $_productCollectionFactory; protected $_productVisibility; public function __construct( \Magento\Framework\View\Element\Template\Context $context, \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory, \Magento\Catalog\Model\Product\Visibility $productVisibility, array $data = [] ) { $this->_productCollectionFactory = $productCollectionFactory; $this->_productVisibility = $productVisibility; parent::__construct($context, $data); } public function getProductCollection() { $collection = $this->_productCollectionFactory->create(); $collection->addAttributeToSelect('*'); // вибираємо всі атрибути товару $collection->addWebsiteFilter(); // фільтруємо товари поточного сайту $collection->addStoreFilter(); // фільтруємо товари поточного магазину $collection->setVisibility($this->productVisibility->getVisibleInSiteIds()); // встановлюємо фільтр видимості товарів $collection->setPageSize(10); // робимо вибірку лише 10 товарів return $collection; } }
Після цього ви можете використовувати даний метод в файлі-шаблоні .phtml
теми наступним чином:
$productCollection = $block->getProductCollection(); foreach ($productCollection as $product) { echo "<p>Product name: " . $product->getName() . " (Product ID: " . $product->getId() . ")</p>"; }
Метод №2: Використовуємо менеджер об’єктів (Object Manager)
У цьому методі, щоб отримати колекцію товарів в Magento 2, ви можете використовувати наступний код:
$objectManager = \Magento\Framework\App\ObjectManager::getInstance(); $productCollectionFactory = $objectManager->get('\Magento\Catalog\Model\ResourceModel\Product\CollectionFactory'); $collection = $productCollectionFactory->create(); $collection->addAttributeToSelect('*'); // вибираємо всі атрибути товару $collection->addWebsiteFilter(); // фільтруємо товари поточного сайту $collection->addStoreFilter(); // фільтруємо товари поточного магазину $collection->setVisibility($objectManager->get('\Magento\Catalog\Model\Product\Visibility')->getVisibleInSiteIds()); // встановлюємо фільтр видимості товарів // робимо вибірку лише 10 товарів $collection->setPageSize(10); foreach ($productCollection as $product) { echo "<p>Product name: " . $product->getName() . " (Product ID: " . $product->getId() . ")</p>"; }
Другий метод є менш рекомендованим, але для цілей розробки його можна використовувати прямо з файлів-шаблонів .phtml
поточної теми інтернет-магазину.
От і все! З даної статті ви дізналися, як можна легко на практиці отримати колекцію товарів в Magento 2. Сподіваємося, що даний код не викликав у вас нерозуміння. Якщо у вас є зауваження/пропозиції по даній темі, напишіть про це в формі коментарів нижче. Дякуємо!