Magento 2 nhận tất cả các thuộc tính sản phẩm mà không cần id sản phẩm


12

Tôi muốn truy xuất tất cả các thuộc tính sản phẩm có sẵn, sau đó chuyển đổi nó thành tên & giá trị cho trường tùy chọn đã chọn của tôi. Trong Magento 1 tôi có thể đạt được nó như thế này:

public function getMagentoAttributes()
{
    $values[] = array(
        'value' => '',
        'label' => 'Pick Product Attribute'
    );

    $categories = Mage::getResourceModel('catalog/product_attribute_collection')->getItems();

    foreach ($categories as $category) {
        if ($category->getFrontendLabel() != '') {
            $label = $category->getFrontendLabel();
        } else {
            $label = $category->getAttributecode();
        }

        $values[] = array(
            'value' => $category->getAttributecode(),
            'label' => $label
        );
    }
    return $values;
}

Có cách nào trong magento 2 để làm điều tương tự không?


Tôi đã sử dụng mã theo "RonakChauhan" nó đang hoạt động tốt trong tệp khối của tôi Nhưng tôi gặp phải một số vấn đề tôi cần trợ giúp vì tôi không thể lọc các thuộc tính theo khả năng hiển thị của chúng, tức là tôi cần các thuộc tính có trạng thái được đặt "hiển thị = > có "trong Quản trị viên ... Mọi trợ giúp sẽ được đánh giá cao ... Đây là Mã của tôi để nhận lớp bộ sưu tập Thuộc tính sản phẩm ProductList mở rộng \ Magento \ Framework \ View \ Element \ Template {được bảo vệ $ _attributionFactory; hàm công khai __construct (\ Magento \ Catalog \ Model \ ResourceModel \ Eav \ Attribution $ propertyFactory) {Parent :: __ construc ($ bối cảnh); $ this -> _ attrib
Gurjeet Singh

Câu trả lời:


10
protected $_attributeFactory;

 public function __construct(
    ....
    \Magento\Catalog\Model\ResourceModel\Eav\Attribute $attributeFactory,
    ....
) {
    ....
    $this->_attributeFactory = $attributeFactory;
    ....
}

public function <func_name>()
{
    $attributeInfo = $this->_attributeFactory->getCollection();

   foreach($attributeInfo as $attributes)
   {
        $attributeId = $attributes->getAttributeId();
        // You can get all fields of attribute here
   }
}

Ở đây bạn có thể có toàn bộ bộ sưu tập các thuộc tính, bạn có thể lọc nó theo nhu cầu của bạn.


Làm thế nào để có được tên thuộc tính và id?
anh chàng đơn giản

sử dụng foreachbạn có thể nhận được getAttributeId()cũng nhưgetAttributeName()
Ronak Chauhan

Kiểm tra câu trả lời cập nhật
Ronak Chauhan

getAttributionName in trống
anh chàng đơn giản

1
echo "<pre>"; print_r($attributes);exit;sử dụng điều này trong foreach và kiểm tra
Ronak Chauhan

8

Một ý tưởng khác là chúng ta nên thử với Lớp Hợp đồng Dịch vụ .

Sử dụng Magento\Eav\Api\AttributeRepositoryInterfaceđể có được thuộc tính eav.

Tôi đã có câu trả lời tại đây: /magento//a/161426/33057

Ví dụ:

    $searchCriteria = $this->searchCriteriaBuilder->create();
    $attributeRepository = $this->attributeRepository->getList(
        'catalog_product',
        $searchCriteria
    );

    foreach ($attributeRepository->getItems() as $items) {
        $items->getAttributeCode();
        $items->getFrontendLabel();
    }

LƯU Ý: Đối với mã loại thực thể trong getListphương thức, chúng ta có thể tìm thấy trong eav_entity_typebảng.

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.