Magento 2 - eav varlık öznitelik seçenekleri değeri nasıl alınır?


18

Eav varlığının öznitelik seçenekleri değerlerini nasıl alabilirim?
Sadece magento 1.x için çözüm buldum ama M2 bilmiyorum.
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();

Herkes biliyor, bana adım adım göster, pls!

Yanıtlar:


55

sınıfınızın yapıcısına şöyle bir örnek ekleyebilirsiniz \Magento\Eav\Model\Config:

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

bunu sınıfınızda kullanabilirsiniz

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

"Değer" ve "etiket" nasıl alınır?
MrTo-Kane

1
sonucun nasıl göründüğüne bakın. Var dökümü falan.
Marius

dizi (2) {[0] => dizi (2) {["değer"] => int (1) ["etiket"] => nesne (Magento \ Framework \ Phrase) # 1504 (2) {["metin ":" Magento \ Framework \ Phrase ": private] => string (7)" Enabled "[" argümanlar ":" Magento \ Framework \ Phrase ": private] => dizi (0) {}}} [1] = > dizi (2) {["değer"] => int (2) ["etiket"] => nesne (Magento \ Framework \ Phrase) # 1494 (2) {["text": "Magento \ Framework \ Phrase" : private] => string (8) "Disabled" ["argümanlar": "Magento \ Framework \ Phrase": private] => dizi (0) {}}}}
MrTo-Kane

12
Küçük ama önemli açıklama: Varsa, Modül Servis Katmanı kullanmak daha iyidir. Eav nitelikleri için \Magento\Eav\Api\Attribute RepositoryInterface. @Api olarak işaretlenmemiş herhangi bir şey özel kabul edilir ve küçük sürümlerde kaldırılabilir.
KAndy

5
@KAndy İyi not. Bunu bir cevap olarak yazabilirsiniz. Bence benden daha iyi.
Marius

5

Bunu sadece Block dosyanızın altındaki kodu arayabilirsiniz.

<?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 dosyanızın içinde arayın,

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

Teşekkürler.


Bu swatch, gibi girdileri kullanmak üzere yapılandırılmış özniteliklere ilişkin seçenekleri döndürmez color. getOptions()Yöntem sert böylece renk örneği giriş seçeneklerini atlar, "Dropdowns" gibi belirli girdi türlerine kodlanmıştır. Başkasının buna koşması halinde sadece bir uyarı.
thaddeusmt

Merhaba @ Rakesh, Bunu nasıl başarabilirim ama Yönetici için. Kılavuz sütun filtresi için bu seçenek değerine ihtiyacım var. Lütfen söyler misiniz?
Ravi Soni

5

Tüm özellik seçeneklerini elde etmek için aşağıdaki kodu kullanın.

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;

 }

Daha detaylı açıklama için lütfen buraya tıklayınız. http://www.pearlbells.co.uk/code-snippets/get-magento-attribute-options-programmatically/


4

Api Hizmet Katmanı kullanıyorum Magento\Eav\Api\AttributeRepositoryInterfaceMarius cevabı hakkındaki yorumlarda @kandy tarafından önerilen .

Yapıcıya servis verisi üyesini aşağıdaki gibi enjekte et.

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

Ve bunu kullanarak özelliği alabilirsiniz.

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

Öznitelik seçeneği değerleri dizisini almak için bunu kullanın.

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

2

\Magento\Catalog\Model\Product\Attribute\RepositoryOluşturucunuza bir örneğini enjekte edin (bir blokta, yardımcı sınıfta veya herhangi bir yerde):

/**
 * @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;
    ...
}

Ardından, özniteliği koda göre almak için sınıfınızda bir yöntem oluşturun:

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

Daha sonra bu yöntemi şöyle çağırabilirsiniz, örneğin .phtml dosyası içinde

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

Ardından, öznitelik nesnesini arayabilirsiniz;

  1. Seçenekleri alın: $attribute->getOptions()
  2. Her mağaza için ön uç etiketi alın: $attrTest->getFrontendLabels()
  3. Veri dizisinde hata ayıklama: echo '> ' . print_r($attrTest->debug(), true);

debug: Dizi ([attribute_id] => 274 [entity_type_id] => 4 [attribute_code] => product_manual_download_label [backend_type] => varchar [frontend_input] => text [frontend_label] => Ürün Kılavuzu İndirme Etiketi [is_required] => 0 [ is_user_defined] => 1 [default_value] => Ürün Kılavuzu İndir [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 [kullanılmış_in_product_listing] => 0 [kullanılmış_for_sort_by] => 0 [is_visible_] = 0_vanced =]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_fil_rable_in_grid] => 1 [arama_ağırlığı] = 1]


1
Bu çok iyi açıklanmış bir cevap
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();  
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.