Как получить коллекцию товаров в 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. Надеемся, что данный код не вызвал у вас непонимания. Если у вас есть замечания/предложения по данной теме, напишите об этом в форме комментариев ниже. Спасибо!
Последние посты
Как выбрать идеальный ноутбук: Полный гайд
Выбор ноутбука может быть сложной задачей в мире, где рынок переполнен вариантами на любой вкус… Читать далее
Томас Эдисон
Наша самая большая слабость заключается в том, что мы быстро сдаемся. Самый верный способ добиться… Читать далее
Самые красивые и впечатляющие мосты со всего мира (ТОП-10)
Мост — это нечто большее, чем просто сооружение, соединяющее два берега. Для того, чтобы появился… Читать далее
Соломон
Жизнь нас учит, что свою пару мы познаем, когда разводимся, своих братьев мы познаем, когда… Читать далее
Чак Паланик
Кто может — тот делает. Кто не может — тот критикует Чак Паланик Читать далее
Ричард Бах
Ни одно желание не дается тебе отдельно от силы, позволяющей его осуществить. Хотя, возможно, для… Читать далее