В сегодняшней практической статье мы рассмотрим 2 способа, которые решают проблему получения коллекции товаров в Magento 2. Первый метод предусматривает использование инъекции зависимостей (DI), а второй – использование менеджера объектов (Object Manager). А теперь перейдем к практике.
Вы можете получить доступ к списку товаров своего интернет-магазина на 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>";
}
В этом методе, чтобы получить коллекцию товаров в 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. Надеемся, что данный код не вызвал у вас непонимания. Если у вас есть замечания/предложения по данной теме, напишите об этом в форме комментариев ниже. Спасибо!
В мире веб-разработки мы постоянно сталкиваемся с проблемой: "А у меня на компьютере все работает!".…
На заре моей карьеры веб-разработчика все было относительно просто: установил локальный сервер (помните Denwer?), положил…
Если вы когда-либо интересовались, как ускорить свой сайт на WordPress, вы, наверное, слышали о "кешировании".…
Когда мы говорим о веб-разработке, первое, что приходит на ум — это HTML и CSS.…
В мире SEO есть фраза, которую повторяют так часто, что она уже стала клише: "Content…
Создание бизнеса — это как рождение ребенка. Вы вкладываете в него душу, время и деньги.…