ম্যাজেন্টো 2 - ইভা সত্তার বৈশিষ্ট্য বিকল্পগুলির মান কীভাবে পাবেন?


18

আমি কীভাবে ইভা সত্তার বৈশিষ্ট্য বিকল্পগুলির মানগুলি পেতে পারি?
আমি কেবল ম্যাজেন্টো 1.x এর সমাধান পেয়েছি তবে এম 2 আমি জানি না।
এম 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();

যে কেউ জানেন, আমাকে ধাপে ধাপে দেখান, প্লিজ! ধন্যবাদ!

উত্তর:


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

কীভাবে "মান" এবং "লেবেল" পাবেন?
মিঃ টো-কেন

1
ফলাফলটি কেমন দেখাচ্ছে তা দেখুন। ভার এটি বা কিছু ফেলে দিন।
মারিয়াস

অ্যারে (2) {[0] => অ্যারে (2) {["মান"] => ইনট (1) ["লেবেল"] => অবজেক্ট (ম্যাজেন্টো me ফ্রেমওয়ার্ক \ ফ্রেস) # 1504 (2) "[" পাঠ্য ":" ম্যাজেন্টো \ ফ্রেমওয়ার্ক \ বাক্যাংশ ": ব্যক্তিগত] => স্ট্রিং (7)" সক্ষম "" "" যুক্তি ":" ম্যাজেন্টো me ফ্রেমওয়ার্ক \ শব্দবন্ধ ": ব্যক্তিগত] => অ্যারে (0) {}}} [1] = > অ্যারে (2) {["মান"] => ইনট (2) ["লেবেল"] => অবজেক্ট (ম্যাজেন্টো me ফ্রেমওয়ার্ক \ ফ্রেস) # 1494 (2) {["পাঠ্য": "ম্যাজেন্টো \ ফ্রেমওয়ার্ক ra শব্দবন্ধ" : প্রাইভেট] => স্ট্রিং (8) "অক্ষম" ["যুক্তি" ":" ম্যাজেন্টো
me

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

আপনার পিএইচটিএমএল ফাইলের ভিতরে কল করুন,

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

ধন্যবাদ।


এটি ব্যবহার করার জন্য কনফিগার বৈশিষ্ট্যাবলী জন্য বিকল্পগুলি ফেরত দেয় না swatchমত, ইনপুট colorgetOptions()পদ্ধতি হার্ড নির্দিষ্ট ইনপুট প্রকারের কোডেড হয়, "dropdowns" মত, তাই এটি নমুনা ইনপুট অপশন অগ্রাহ্য। অন্য কেউ যদি এটি চালিয়ে যায় তবে কেবল মাথা উঁচু করুন।
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@ এমরিয়াস উত্তরের মন্তব্যে @ ক্যান্ডির প্রস্তাবিত এপি সার্ভিস স্তরটি ব্যবহার করি ।

নিম্নলিখিত হিসাবে আপনার নির্মাতায় পরিষেবা ডেটা সদস্য ইনজেক্ট করুন।

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_defised] => 1 [ডিফল্ট_মূল্য] => পণ্যের ম্যানুয়াল ডাউনলোড [is_unique] => 0 [is_global] => 0 [is_visible] => 1 [is_searchable] => 0 [is_filteable] => 0 [is_comparable] => 0 [ is_visible_on_front] => 0 [এই_এইচটিএমএল_বিহীন_অন_ফ্রন্ট] => 1 [is_used_for_price_rules] => 0 [is_filterable_in_search] => 0 [ব্যবহৃত_ইন_প্রডেক্ট_লিস্টিং] => 0 [ব্যবহৃত_আর_সোর্ট_ব্লাই]]> [অবস্থান_আরভিজ_ ]_ [অবস্থান_আরভিজ_]0 [is_wysiwyg_enabled] => 0 [is_used_for_promo_rules] => 0 [is_requided_in_admin_store] => 0 [is_used_in_grid] => 1 [is_visible_in_grid] => 1 [is_filterable_in_grid]]> [1 অনুসন্ধান]


1
এটি একটি খুব সুস্পষ্টভাবে উত্তর দেওয়া হয়েছে
ডমডামব্রোগিয়া

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.