Magento 2 - ईआरवी इकाई के विशेषता विकल्प मूल्य कैसे प्राप्त करें?


18

मैं ईवीवी इकाई के विशेषता विकल्प मूल्यों को कैसे प्राप्त कर सकता हूं?
मैं केवल Magento 1.x के लिए समाधान पाया, लेकिन M2 मैं नहीं जानता।
एम 1:

$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) {["मूल्य"] => इंट (1) ["लेबल"] => वस्तु (मैगेंटो \ फ्रेमवर्क \ वाक्यांश) # 1504 (2) {["पाठ ":" मैगेंटो \ फ्रेमवर्क \ वाक्यांश ": निजी] => स्ट्रिंग (7)" सक्षम "[" तर्क ":" Magento \ फ्रेमवर्क \ वाक्यांश ": निजी] => सरणी (0) {}}} [1] =" > सरणी (2) {["मान"] => इंट (2) ["लेबल"] => वस्तु (मैगेंटो \ फ्रेमवर्क \ वाक्यांश) # 1494 (2) {["पाठ": "मैगेंटो \ फ्रेमवर्क \ वाक्यांश" : निजी] => स्ट्रिंग (8) "अक्षम" ["तर्क": "मैगेंटो \ फ्रेमवर्क \ वाक्यांश": निजी] => सरणी (0) {}}}
MrTo-Kane

12
छोटी लेकिन महत्वपूर्ण टिप्पणी: यदि उपलब्ध हो, तो मॉड्यूल सेवा परत का उपयोग करना बेहतर होगा। ईर्व विशेषताओं के लिए \Magento\Eav\Api\Attribute RepositoryInterface। @Api के रूप में चिह्नित कुछ भी निजी नहीं माना जाता है और इसे मामूली रिलीज में हटाया जा सकता है।
कांडी

5
@ एक अच्छी टिप्पणी। आप इसे उत्तर के रूप में लिख सकते हैं। मुझे लगता है कि यह मेरी तुलना में कहीं बेहतर है।
मेरियस

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इनपुट का उपयोग करने के लिए कॉन्फ़िगर की गई विशेषताओं के विकल्पों को वापस नहीं करता है, जैसे colorgetOptions()विधि कठिन कुछ इनपुट प्रकार के लिए कोडित है, "ड्रॉपडाउन" की तरह है, इसलिए यह नमूना इनपुट विकल्प को छोड़ देता है। बस एक सिर अगर किसी और को उस में चलाता है।
thaddeusmt

हाय @ राकेश, मैं इसे कैसे हासिल करता हूं, लेकिन एडमिन के लिए। मुझे ग्रिड कॉलम फ़िल्टर के लिए इन विकल्प मूल्य की आवश्यकता है। क्या आप मुझे बता सकते हैं।
रवि सोनी

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@ मीरी के उत्तर पर टिप्पणियों में @kandy द्वारा सुझाए गए एपी सर्विस लेयर का उपयोग करता हूं ।

अनुसरण के रूप में अपने निर्माता में सेवा डेटा सदस्य को इंजेक्ट करें।

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

डिबग: ऐरे ([एट्रिब्यूट_ड] => २ entity४ [एंटिटी_टाइप_ड] => ४ [एट्रिब्यूट_कोड] => प्रोडक्ट_मनुअल_डाउनलोड_लैबेल [बैकेंड_टाइप] => वेरचर [फ्रंटएंड_इनपुट] => टेक्स्ट [फ्रंटएंड_बेल] => प्रोडक्ट मैनुअल डाउनलोड लेबल [is_required] is_user_defined] => 1 [default_value] => उत्पाद मैनुअल डाउनलोड [is_unique] => 0 [is_global] => 0 [is_vouble] => 1 [is_searchable] => 0 [is_filterable] => 0 [is_comparable] => [[] =0 [is_wysiwyg_enabled] => 0 [is_used_for_promo_rules] => 0 [is_required_in_admin_store] => 0 [is_used_in_grid] => 1 [is_vouble_in_grid] => [1_ is_filterter_nore]


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 Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.