Як отримати колекцію товарів в Magento 2

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

 



Напишіть тут свою думку/питання

Ваша пошта не публікуватиметься. Обов’язкові поля позначені *