Magento 2 - Як отримати значення параметрів атрибуту об'єкта eav?


18

Як я можу отримати значення параметрів атрибутів об'єкта eav?
Я знайшов рішення тільки для magento 1.x, але M2 не знаю.
M1:

$attr = Mage::getResourceModel('eav/entity_attribute_collection')->setCodeFilter('specialty')->getData()[0];
$attributeModel = Mage::getModel('eav/entity_attribute')->load($attr['attribute_id']);
$src =  $attributeModel->getSource()->getAllOptions();

Хтось знає, покажіть мені крок за кроком, pls! Дякую!

Відповіді:


55

ви можете додати до конструктора свого класу такий примірник \Magento\Eav\Model\Config:

protected $eavConfig;
public function __construct(
    ...
    \Magento\Eav\Model\Config $eavConfig,
    ...
){
    ...
    $this->eavConfig = $eavConfig;
    ...
}

то ви можете використовувати це у своєму класі

$attribute = $this->eavConfig->getAttribute('catalog_product', 'attribute_code_here');
$options = $attribute->getSource()->getAllOptions();

Як отримати "значення" та "мітку"?
MrTo-Kane

1
подивіться, як виглядає результат. Вар скидає це чи щось.
Маріус

масив (2) {[0] => масив (2) {["значення"] => int (1) ["мітка"] => об'єкт (Magento \ Framework \ Phrase) # 1504 (2) {["текст ":" Magento \ Framework \ Phrase ": private] => string (7)" Включено "[" аргументи ":" Magento \ Framework \ Phrase ": private] => масив (0) {}}} [1] = > array (2) {["value"] => int (2) ["label"] => об'єкт (Magento \ Framework \ Phrase) # 1494 (2) {["text": "Magento \ Framework \ Phrase" : private] => string (8) "Вимкнено" ["аргументи": "Magento \ Framework \ Phrase": private] => array (0) {}}}}
MrTo-Kane

12
Невелике, але важливе зауваження: Якщо це можливо, краще скористатися модулем сервісного шару. Для атрибутів eav це \Magento\Eav\Api\Attribute RepositoryInterface. Все, що не позначено як @api, вважається приватним і може бути видалено в незначних випусках.
KAndy

5
@KAndy Добре зауваження. Ви можете написати це як відповідь. Я думаю, що це набагато краще, ніж у мене.
Маріус

5

Ви можете це зробити, просто зателефонувавши під кодом нижче у вашому файлі блоку.

<?php
namespace Vendor\Package\Block;

class Blockname extends \Magento\Framework\View\Element\Template
{
    protected $_productAttributeRepository;

    public function __construct(        
        \Magento\Framework\View\Element\Template\Context $context,   
        \Magento\Catalog\Model\Product\Attribute\Repository $productAttributeRepository,
        array $data = [] 
    ){        
        parent::__construct($context,$data);
        $this->_productAttributeRepository = $productAttributeRepository;
    } 

    public function getAllBrand(){
        $manufacturerOptions = $this->_productAttributeRepository->get('manufacturer')->getOptions();       
        $values = array();
        foreach ($manufacturerOptions as $manufacturerOption) { 
           //$manufacturerOption->getValue();  // Value
            $values[] = $manufacturerOption->getLabel();  // Label
        }
        return $values;
    }  
}

Зателефонуйте до файлу phtml,

<div class="manufacturer-name">
      <?php $getOptionValue = $this->getAllBrand();?>
      <?php foreach($getOptionValue as $value){ ?>
           <span><?php echo $value;?></span>
      <?php } ?>
</div>

Спасибі.


Це не повертає параметри атрибутів, налаштованих на використання swatchвходів, наприклад color. getOptions()Метод закодований певні типів введення, наприклад , «випадають», тому він пропускає опцію введення зразка. Просто голова вгору, якщо хтось інший наштовхується на це.
thaddeusmt

Привіт @ Ракеш, як я цього досягну, але не для адміністратора. Мені потрібні ці параметри значення для фільтра стовпців Grid. Скажіть, будь ласка.
Раві Соні

5

Використовуйте наступний код, щоб отримати всі параметри атрибутів.

function getExistingOptions( $object_Manager ) {

$eavConfig = $object_Manager->get('\Magento\Eav\Model\Config');
$attribute = $eavConfig->getAttribute('catalog_product', 'color');
$options = $attribute->getSource()->getAllOptions();

$optionsExists = array();

foreach($options as $option) {
    $optionsExists[] = $option['label'];
}

return $optionsExists;

 }

Будь ласка, Ви можете натиснути тут для більш детального пояснення. http://www.pearlbells.co.uk/code-snippets/get-magento-attribute-options-programmatic/


4

Я використовую Api Service Layer, Magento\Eav\Api\AttributeRepositoryInterfaceзапропонований @kandy у коментарях до відповіді @marius.

Введіть члена даних служби у свій конструктор наступним чином.

protected $eavAttributeRepository;
public function __construct(
    ...
    \Magento\Eav\Api\AttributeRepositoryInterface $eavAttributeRepositoryInterface,
    ...
){
    ...
    $this->eavAttributeRepository = $eavAttributeRepositoryInterface;
    ...
}

І ви можете отримати атрибут за допомогою цього.

$attribute = $this->eavAttributeRepository->get(
    \Magento\Catalog\Model\Product::ENTITY,
    'attribute_code_here'
);
// var_dump($attribute->getData()); 

Щоб отримати масив значень параметрів атрибутів, використовуйте це.

$options = $attribute->getSource()->getAllOptions();

2

Введіть екземпляр \Magento\Catalog\Model\Product\Attribute\Repositoryу свій конструктор (у блоці, довідковому класі чи де завгодно):

/**
 * @var \Magento\Catalog\Model\Product\Attribute\Repository $_productAttributeRepository
 */
protected $_productAttributeRepository;

/**
 * ...
 * @param \Magento\Catalog\Model\Product\Attribute\Repository $productAttributeRepository
 * ...
 */
public function __construct(
    ...
    \Magento\Catalog\Model\Product\Attribute\Repository $productAttributeRepository,
    ...
) {
    ...
    $this->_productAttributeRepository = $productAttributeRepository;
    ...
}

Потім створіть у своєму класі метод отримання атрибута за кодом:

/**
 * Get single product attribute data 
 *
 * @return Magento\Catalog\Api\Data\ProductAttributeInterface
 */
public function getProductAttributeByCode($code)
{
    $attribute = $this->_productAttributeRepository->get($code);
    return $attribute;
}

Потім ви можете назвати цей метод так, наприклад, всередині .phtml-файлу

$attrTest = $block->getProductAttributeByCode('test');

Тоді ви можете робити дзвінки по об’єкту атрибута, наприклад

  1. Отримати варіанти: $attribute->getOptions()
  2. Отримайте ярлик для фронтену для кожного магазину: $attrTest->getFrontendLabels()
  3. Налагодження масиву даних: echo '> ' . print_r($attrTest->debug(), true);

налагодження: Array ([attribute_id] => 274 [entit_type_id] => 4 [атрибут_код] => product_manual_download_label [backend_type] => varchar [frontend_input] => текст [frontend_label] => Етикетка завантаження керівництва продукту [is_required] => 0 [ is_user_defined] => 1 [default_value] => Завантажити посібник із продукту [is_unique] => 0 [is_global] => 0 [is_visible] => 1 [is_searchable] => 0 [is_filterable] => 0 [is_comparable] => 0 [ is_visible_on_front] => 0 [is_html_allowed_on_front] => 1 [is_used_for_price_rules] => 0 [is_filterable_in_search] => 0 [used_in_product_listing] => 0 [used_for_sort_by] => 0 [is_visible_in_in_ad_arch]0 [is_wysiwyg_enabled] => 0 [is_used_for_promo_rules] => 0 [is_required_in_admin_store] => 0 [is_used_in_grid] => 1 [is_visible_in_grid] => 1 [is_filterable_in_grid] => 1 [пошук_ ваги]


1
Це дуже добре пояснена відповідь
domdambrogia

0
   <?php
      /* to load the Product */
  $_product = $block->getProduct();
  $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
  $attributeSet = $objectManager- 
   >create('Magento\Eav\Api\AttributeSetRepositoryInterface');
  $attributeSetRepository = $attributeSet->get($_product->getAttributeSetId());
  $_attributeValue  = $attributeSetRepository->getAttributeSetName();  
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.