Как получить коллекцию товаров в 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. Надеемся, что данный код не вызвал у вас непонимания. Если у вас есть замечания/предложения по данной теме, напишите об этом в форме комментариев ниже. Спасибо!
This post was last modified on 09/10/2018 21:12
Последние посты
Генри Форд
Человек имеет два мотива поведения — один настоящий и второй, который красиво звучит Генри Форд…
Фридрих Ницше
Не нужно додумывать слишком много. Так вы создаете проблемы, которых изначально не было Фридрих Ницше…
Такой разный инвертор! Выбираем между кондиционерами Inverter, Inverter DC и Full DC
Лето в разгаре, а значит самое время задуматься о покупке кондиционера. Но как не потеряться…
Омар Хайям
Настоящий друг — это человек, который в глаза тебе выскажет все, что о тебе думает,…
Полезные советы по выбору раздвижной двери
Следует знать, что функциональность и дизайн работают рука об руку, когда вы используете раздвижную дверь.…