Categories: Мадженто 2

Magento 2 – Як отримати всі атрибути товару

Дана стаття покликана показати вам, як можна на практиці легко отримати всі атрибути товару програмним методом. Цей трюк буде корисний, якщо вам потрібно отримати список всіх доступних атрибутів певного товару. Наприклад, якщо вам потрібно отримати перелік всіх назв атрибутів, щоб можна було їх скопіювати для подальшого використання.

 

 

Отримуємо всі атрибути товару в Magento 2

Щоб зробити це, ви можете використовувати в своєму модулі невеликий код, який повертає список всіх доступних атрибутів товару:

$product = $this->_productRepository->get("тут вкажіть SKU – артикул товару");
$attributes = $product->getAttributes();
foreach($attributes as $attr)
{
  echo $attr->getName() . "\n";
}

 

З даної моделі ви зможете отримати колекцію всіх атрибутів, які призначені товару. У циклі ви можете отримати з колекції всі необхідні дані. У прикладі використовується вивід назви атрибута, але ви можете отримати й інші дані.

 

 

Репозиторій (сховище) товарів

Код використовує нову модель в Magento 2, яка називається репозиторій (repository) товарів. З цього сховища ви можете отримати товари по їх артикулу (SKU), як в прикладі вище, або ж за ідентифікатором (id) товару. Для цього використовуйте один з наступних двох варіантів:

$this->_productRepository->get('sku')
$this->_productRepository->getById('id')

 

Якщо вказаний артикул (SKU) або ідентифікатор (id) є в системі, ви отримаєте екземпляр товару. Якщо ні, ви отримаєте повідомлення про помилку, тому вам може знадобитися додати блок catch try.

Ви зможете отримати доступ до сховища товару в модулі шляхом ін’єкції залежностей. У __construct метод моделі вам потрібно додати:

class ModelName
{
  protected $_productRepository;

  public function __construct(\Magento\Catalog\Model\ProductRepository $productRepository)
  {
    $this->_productRepository = $productRepository;
    ...
  }
  …
}

 

Більше про ін’єкцію залежностей в Magento 2 ви зможете дізнатися з нашої попередньої статті.

 

 

Кеш сховища товару

Тут важливо звернути увагу на трохи дивну поведінку в Magento 2. Іноді ви можете неусвідомлено використовувати невірні дані (наприклад, при імпорті великої кількості товарів з різними значеннями атрибутів). Якщо атрибут має нульове (null) значення і воно не може бути встановлене, можливо, що ви отримаєте дані атрибута з іншого товару. Це відбувається, якщо ви отримуєте товари по репозиторію товару в циклі. Існує внутрішній кеш Magento 2, і дані атрибута товару заповнюються методом ледачого завантаження (lazy loading). Якщо є нульові дані, ви можете отримати значення з попереднього товару. Щоб вирішити цю проблему, просто очистіть кеш сховища (репозиторія) товарів до моменту його використання:

$this->_productRepository->cleanCache();

 

 

У сьогоднішній невеликій статті ми дізналися, як можна легко отримати на практиці всі атрибути товару. Для цього ви можете використовувати репозиторій товару, але в цьому випадку також не забувайте і про внутрішній кеш в Magento 2.

 

Share
Published by
SebWeo

Recent Posts

Чому обрати освіту за кордоном: переваги для майбутнього вашої дитини

Навчання за кордоном вже давно асоціюється з якісною освітою, новими можливостями та безліччю перспектив. Але…

1 день ago

Як вибрати майстра для перетяжки меблів?

Вибір майстра для ремонту та перетяжки меблів – завдання, яке потребує вдумливого підходу. Адже від…

2 дні ago

Що краще вибрати для хостингу: сервер VPS Windows чи VPS Linux?

Вибір ідеального хостингу під свій сайт може бути досить заплутаною справою, особливо коли існує багато…

1 тиждень ago

Лоуренс Пітер

Щоб уникати помилок, потрібно набиратися досвіду; щоб набиратися досвіду, потрібно робити помилки Лоуренс Пітер  

2 тижні ago

Що таке Чорне СЕО (Black Hat SEO) — вся потрібна інформація

Коротке визначення Чорного SEO Чорне СЕО (або Чорна оптимізація) — це будь-яка практика, метою якої…

2 тижні ago

Права категорії C: кому вони потрібні та як їх отримати?

Отримання прав водія категорії C відкриває двері до професійної діяльності, пов'язаної з керуванням вантажними автомобілями.…

3 тижні ago