Categories: Мадженто 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. Надеемся, что данный код не вызвал у вас непонимания. Если у вас есть замечания/предложения по данной теме, напишите об этом в форме комментариев ниже. Спасибо!

 

Recent Posts

Когда точно пора сдать старый катализатор для выгодной продажи

Некоторые запчасти в автомобилях мы эксплуатируем до того момента, пока они полностью не выйдут из…

7 дней ago

Как онлайн-мониторинг цен конкурентов помогает бизнесу в 2026 году

В 2026 году конкуренция в e-commerce стала жесткой как никогда. Клиенты выбирают не только по…

2 недели ago

5 аграрных ошибок, которые вредят урожаю, но о них редко говорят

Урожай чаще всего теряют не из-за аномальных изменений погоды, а из-за мелких решений, которые кажутся…

4 недели ago

Музыкальные инструменты, история, классификация и роль в культуре человечества

Музыкальные инструменты сопровождают человечество на протяжении всей его истории. Они появились задолго до письменности и…

1 месяц ago

VR-продакшн, полный цикл создания виртуальной реальности

VR-продакшн сегодня представляет собой отдельное направление в цифровом производстве, объединяющее технологии виртуальной реальности, 3D-графику, программирование,…

1 месяц ago

Почему Bambu Lab – «iPhone среди 3D-принтеров»

Еще несколько лет назад 3D-печать считалась занятием для «избранных» – людей, готовых тратить время на…

2 месяца ago