마 젠토 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
결과가 어떻게 보이는지보십시오. Var는 그것을 덤프합니다.
Marius

array (2) {[0] => array (2) {[ "value"] => int (1) [ "label"] => object (Magento \ Framework \ Phrase) # 1504 (2) {[ "텍스트 ":"Magento \ Framework \ Phrase ": private] => string (7)"Enabled "["arguments ":"Magento \ Framework \ Phrase ": private] => array (0) {}}} [1] = > array (2) {[ "value"] => int (2) [ "label"] => object (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 좋은 말. 답으로 쓸 수 있습니다. 나는 그것이 내 것보다 훨씬 낫다고 생각합니다.
Marius

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

안녕하세요 @Rakesh, 어떻게 관리하지만 동일한 방법으로 달성 할 수 있습니다. 그리드 열 필터에 이러한 옵션 값이 필요합니다. 말해 줄래?
라비 소니

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-programmatically/


4

Magento\Eav\Api\AttributeRepositoryInterface@marius 답변에 대한 의견에서 @kandy가 제안한 Api 서비스 계층을 사용합니다 .

생성자에 서비스 데이터 멤버를 다음과 같이 삽입하십시오.

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);

디버그 : 배열 ([attribute_id] => 274 [entity_type_id] => 4 [attribute_code] => product_manual_download_label [backend_type] => varchar [frontend_input] => text [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_advanced_in_advanced_advanced_in_advanced_in_advanced_in_advanced_in_advanced_in_advanced_in_advanced_in_advanced_in_advanced_in_advanced_in_advanced_in_advanced_in_advanced_in_advanced_in_advanced_in_advanced_in_advanced_in_advanced_in_advanced_in_advanced_in_advanced_in_advanced_in_advanced_in_advanced]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 [search_weight] => 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();  
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.