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