Як отримати колекцію товарів в 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)
Міст — це щось більше, ніж просто споруда, яка поєднує два береги. Для того, щоб… Читати далі
Соломон
Життя нас вчить, що свою пару ми пізнаємо, коли розлучаємося, своїх братів ми пізнаємо, коли… Читати далі
Річард Бах
Жодне бажання не дається тобі окремо від сили, що дозволяє його здійснити. Хоча, можливо, для… Читати далі