Magento 2 mendapatkan semua atribut produk tanpa id produk

12

Saya ingin mengambil semua atribut produk yang tersedia, lalu mengonversinya menjadi nama & nilai untuk bidang opsi pilihan saya. Di Magento 1 saya bisa mencapainya seperti ini:

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

Apakah ada cara di Magento 2 untuk melakukan hal yang sama?

pria sederhana
sumber
Saya telah menggunakan kode menurut "RonakChauhan" itu berfungsi dengan baik dalam file blok saya Tapi saya menghadapi beberapa masalah saya butuh bantuan karena saya tidak dapat memfilter atribut sesuai dengan visibilitas mereka yaitu saya memerlukan atribut yang statusnya diatur "terlihat = > ya "di Admin ... Bantuan apa pun akan Diapresiasi ... Ini adalah Kode saya untuk mendapatkan kelas koleksi Atribut Produk yang diperluas ProductList \ Magento \ Framework \ View \ Element \ Template {protected $ _attributeFactory; fungsi publik __construct (\ Magento \ Catalogue \ Model \ ResourceModel \ Eav \ Attribute $ attributeFactory) {parent :: __ construct ($ context); $ this -> _ attrib
Gurjeet Singh

Jawaban:

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

Di sini Anda dapat memiliki seluruh koleksi atribut, Anda dapat memfilternya sesuai kebutuhan Anda.

Ronak Chauhan
sumber
bagaimana cara mendapatkan nama atribut dan id?
lelaki sederhana
menggunakan foreachAnda bisa getAttributeId()jugagetAttributeName()
Ronak Chauhan
Periksa jawaban yang diperbarui
Ronak Chauhan
cetak kosong getAttributeName
pria sederhana
1
echo "<pre>"; print_r($attributes);exit;gunakan ini di foreach dan periksa
Ronak Chauhan
8

Gagasan lain adalah bahwa kita harus mencoba dengan Layer Kontrak Layanan .

Gunakan Magento\Eav\Api\AttributeRepositoryInterfaceuntuk mendapatkan atribut eav.

Saya sudah punya jawaban di sini: /magento//a/161426/33057

Sebagai contoh:

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

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

CATATAN: Untuk kode jenis entitas dalam getListmetode, kita dapat menemukan dalam eav_entity_typetabel.

Khoa TruongDinh
sumber