Підступна війна росії проти України. Орієнтовні втрати ворога
(станом на 03.07.2022)
35970
осіб
217
літаків
187
гелікоптерів
1584
танків
3744
ББМ
801
артилерія
105
ППО
246
РСЗВ
2618
машин
15
кораблі і катери
Як отримати колекцію товарів в 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. Сподіваємося, що даний код не викликав у вас нерозуміння. Якщо у вас є зауваження/пропозиції по даній темі, напишіть про це в формі коментарів нижче. Дякуємо!

 

 

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

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