Magento 2 - Làm thế nào để có được giá trị tùy chọn thuộc tính của thực thể eav?


18

Làm thế nào tôi có thể nhận được các giá trị tùy chọn thuộc tính của thực thể eav?
Tôi chỉ tìm thấy giải pháp cho magento 1.x nhưng M2 tôi không biết.
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();

Bất cứ ai biết, chỉ cho tôi từng bước, xin vui lòng! Cảm ơn!

Câu trả lời:


55

bạn có thể thêm vào hàm tạo của lớp của bạn một ví dụ \Magento\Eav\Model\Confignhư thế này:

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

sau đó bạn có thể sử dụng nó trong lớp học của bạn

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

Làm thế nào để có được "giá trị" và "nhãn"?
MrTo-Kane

1
xem kết quả như thế nào Var đổ nó hoặc cái gì đó.
Marius

mảng (2) {[0] => mảng (2) {["value"] => int (1) ["nhãn"] => đối tượng (Magento \ Framework \ Ph cụm) # 1504 (2) {["văn bản ":" Magento \ Framework \ Ph cụm từ ": private] => chuỗi (7)" Đã bật "[" đối số ":" Magento \ Framework \ Ph cụm từ ": private] => mảng (0) {}}} [1] = > mảng (2) {["value"] => int (2) ["nhãn"] => đối tượng (Magento \ Framework \ Ph cụm) # 1494 (2) {["text": "Magento \ Framework \ Ph cụm" : private] => chuỗi (8) "Đã tắt" ["đối số": "Magento \ Framework \ Ph cụm từ": private] => mảng (0) {}}}}
MrTo-Kane

12
Nhận xét nhỏ nhưng quan trọng: Nếu có sẵn, tốt hơn nên sử dụng Lớp dịch vụ mô-đun. Đối với các thuộc tính eav đó là \Magento\Eav\Api\Attribute RepositoryInterface. Bất cứ điều gì không được đánh dấu là @api được coi là riêng tư và có thể được xóa trong các bản phát hành nhỏ.
KAndy

5
@KAndy Nhận xét tốt. Bạn có thể viết nó như một câu trả lời. Tôi nghĩ nó tốt hơn tôi nhiều.
Marius

5

Bạn có thể làm điều đó chỉ cần gọi mã bên dưới trong tệp Chặn của bạn.

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

Gọi bên trong tập tin phtml của bạn,

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

Cảm ơn.


Điều này không trả về các tùy chọn cho các thuộc tính được cấu hình để sử dụng swatchđầu vào, như color. Các getOptions()phương pháp được cứng mã hoá để loại đầu vào nhất định, như "Dropdowns", do đó nó sẽ bỏ qua các tùy chọn swatch đầu vào. Chỉ cần một cái đầu lên nếu có ai khác chạy vào đó.
thaddeusmt

Xin chào @Rakesh, Làm thế nào tôi đạt được điều này nhưng đối với Admin. Tôi cần các giá trị tùy chọn này cho bộ lọc cột lưới. Bạn có thể vui lòng cho tôi biết.
Ravi Soni

5

Sử dụng mã sau đây để có được tất cả các tùy chọn thuộc tính.

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;

 }

Xin vui lòng bạn có thể bấm vào đây để giải thích chi tiết hơn. http://www.pearlbells.co.uk/code-snippets/get-magento-attribution-options-programmatically/


4

Tôi sử dụng Lớp dịch vụ Api được Magento\Eav\Api\AttributeRepositoryInterfaceđề xuất bởi @kandy trong các nhận xét về câu trả lời @marius.

Tiêm thành viên dữ liệu dịch vụ trong hàm tạo của bạn như sau.

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

Và bạn có thể có được thuộc tính bằng cách này.

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

Để có được các giá trị tùy chọn thuộc tính mảng, sử dụng này.

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

2

Tiêm một thể hiện \Magento\Catalog\Model\Product\Attribute\Repositorytrong hàm tạo của bạn (trong một khối, lớp trình trợ giúp hoặc bất cứ nơi nào):

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

Sau đó tạo một phương thức trong lớp của bạn để lấy thuộc tính theo mã:

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

Sau đó, bạn có thể gọi phương thức này như vậy, ví dụ: bên trong tệp .phtml

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

Sau đó, bạn có thể thực hiện cuộc gọi trên đối tượng thuộc tính, vd

  1. Nhận tùy chọn: $attribute->getOptions()
  2. Nhận nhãn frontend cho mỗi cửa hàng: $attrTest->getFrontendLabels()
  3. Gỡ lỗi mảng dữ liệu: echo '> ' . print_r($attrTest->debug(), true);

debug: Array ([property_id] => 274 [entity_type_id] => 4 [property_code] => sản phẩm_manual_doad_label [backend_type] => varchar [frontend_input] => text [frontend_label] => Hướng dẫn tải xuống sản phẩm is_user_d xác định] => 1 [default_value] => Tải xuống hướng dẫn sử dụng sản phẩm [is_unique] => 0 [is_global] => 0 [is_visible] => 1 [is_searchable] => 0 [is_filterable] => 0 [is_comparable] is_visible_on__n_n___________h_hh đó_ đó_ đó là đó là một thứ gì đó được sử dụng0 [is_wysiwyg_enables] => 0 [is_wysiwyg_enables] => 0 [is_use_for_promo_r__________


1
Đây là một câu trả lời được giải thích rất rõ
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();  
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.