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