Magento 2 รับคุณสมบัติของผลิตภัณฑ์ทั้งหมดโดยไม่มีรหัสผลิตภัณฑ์


12

ฉันต้องการดึงคุณสมบัติของผลิตภัณฑ์ทั้งหมดที่มีอยู่จากนั้นแปลงเป็นชื่อและค่าสำหรับฟิลด์ตัวเลือกที่เลือกของฉัน ใน Magento 1 ฉันสามารถทำสิ่งนี้ให้สำเร็จ:

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

วีโอไอพี 2 มีวิธีในการทำสิ่งเดียวกันหรือไม่?


ฉันใช้รหัสตาม "RonakChauhan" มันทำงานได้ดีในไฟล์บล็อกของฉัน แต่ฉันประสบปัญหาบางอย่างฉันต้องการความช่วยเหลือซึ่งฉันไม่สามารถกรองแอตทริบิวต์ตามการมองเห็นของพวกเขาเช่นฉันต้องการคุณลักษณะที่สถานะถูกตั้งค่า "มองเห็น = > ใช่ "ในผู้ดูแลระบบ ... ความช่วยเหลือใด ๆ จะได้รับการชื่นชม ... นี่คือรหัสของฉันสำหรับการรับคลาสคอลเลกชัน ProductList ขยายรายการ \ Magento \ Framework \ View \ องค์ประกอบ \ แม่แบบ {ป้องกัน $ _attributeFactory; ฟังก์ชั่นสาธารณะ __ โครงสร้าง (\ Magento \ Catalog \ Model \ ResourceModel \ Eav \ แอตทริบิวต์ $ attributeFactory) {parent :: __ สร้าง ($ บริบท); $ this -> _ attrib
Gurjeet Singh

คำตอบ:


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

ที่นี่คุณสามารถมีทั้งชุดของคุณสมบัติคุณสามารถกรองตามความต้องการของคุณ


วิธีรับชื่อคุณลักษณะและรหัส
ผู้ชายที่เรียบง่าย

ใช้foreachคุณสามารถรับgetAttributeId()เช่นเดียวกับgetAttributeName()
Ronak Chauhan

ตรวจสอบคำตอบที่อัปเดต
Ronak Chauhan

getAttributeName พิมพ์ว่างเปล่า
ผู้ชายธรรมดา

1
echo "<pre>"; print_r($attributes);exit;ใช้สิ่งนี้ในด้านหน้าและตรวจสอบ
Ronak Chauhan

8

ความคิดก็คือว่าเราควรจะลองกับสัญญาบริการชั้น

ใช้Magento\Eav\Api\AttributeRepositoryInterfaceเพื่อรับคุณลักษณะ eav

ฉันมีคำตอบแล้วที่นี่: /magento//a/161426/33057

ตัวอย่างเช่น:

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

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

หมายเหตุ:สำหรับรหัสประเภทเอนทิตีในgetListวิธีการเราสามารถหาได้ในeav_entity_typeตาราง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.