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;
    ...
  }
  …
}

 

Больше об инъекции зависимостей в Мадженто 2 вы сможете узнать из нашей предыдущей статьи.

 

 

Кэш репозитория товара

Здесь важно обратить внимание на немного странное поведение в Magento 2. Иногда вы можете неосознанно использовать неверные данные (например, при импорте большого количества товаров с разными значениями атрибутов). Если атрибут имеет нулевое (null) значение и оно не может быть установлено, возможно, что вы получите данные атрибута из другого товара. Это происходит, если вы получаете товары по репозиторию товара в цикле. Существует внутренний кэш Magento 2, и данные атрибута товара заполняются методом ленивой загрузки (lazy loading). Если есть нулевые данные, вы можете получить значения из предыдущего товара. Чтобы решить эту проблему, просто очистите кэш хранилища (репозитория) товаров до момента его использования:

$this->_productRepository->cleanCache();

 

 

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

 

Share
Published by
SebWeo
Tags: Magento2

Recent Posts

Уоррен Баффетт

Даже если вы очень талантливы и прилагаете большие усилия, для некоторых результатов просто нужно время:…

2 дня ago

Пошаговая инструкция Импорта данных из Excel в MySQL через phpMyAdmin

Этот практический урок поможет вам перенести данные из вашего Excel-файла (с некоторыми конкретными столбцами) в…

4 дня ago

Распространенные мифы и заблуждения о пиве: восстанавливаем справедливость

Пиво – один из самых популярных напитков, который наряду с чаем и кофе известен во…

4 дня ago

Уроки JavaScript — Краткие функции на замену большому объемному коду

Довольно часто у программистов возникает соблазн написать какую-нибудь обширную функцию, которая должна решать определенную задачу.…

1 неделя ago

Зачем и как просыпаться раньше

Дискуссии вокруг этой темы вас, вероятно, уже утомили. Но я в данной статье постараюсь показать…

2 недели ago

Уроки JavaScript — Шпаргалка для разработчиков по работе с консолью в браузере

Консоль браузера (также известная как консоль JavaScript или веб-консоль) — это мощный инструмент для разработчиков,…

2 недели ago