У сьогоднішній практичної статті ми розглянемо 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. Сподіваємося, що даний код не викликав у вас нерозуміння. Якщо у вас є зауваження/пропозиції по даній темі, напишіть про це в формі коментарів нижче. Дякуємо!
Іспанська мова приваблює мільйони людей своєю мелодійністю, емоційністю та відносною простотою вивчення. Одним із найважливіших…
Коли проєкт залежить від чужих обмежень, зростають ризики простоїв, втрати доступу до даних і складнощів…
У тих, хто планує створення сайту вперше, майже завжди виникає питання: що таке домен і…
Для простого користувача критерієм хорошого Wi-Fi є швидке завантаження сторінок та відсутність буферизації під час…
Коли власник стоматологічної клініки вперше замислюється про автоматизацію, він нерідко іде найпростішим шляхом: гуглить "CRM…
Алоха! Останні кілька років остаточно закріпили тренд на віддалену роботу. Для веб-розробників, DevOps-інженерів та адміністраторів…