Magento 2 liefert alle Produktattribute ohne Produkt-ID

12

ich will alle verfügbaren Produktattribute abrufen und sie dann in Name und Wert für mein Auswahlfeld "Optionen" konvertieren. In Magento 1 kann ich das so erreichen:

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

Gibt es in magento 2 eine Möglichkeit, dasselbe zu tun?

einfacher Kerl
quelle
Ich habe Code gemäß "RonakChauhan" verwendet, der in meiner Blockdatei einwandfrei funktioniert. Ich habe jedoch ein Problem, bei dem ich Hilfe benötige, da ich Attribute nicht nach ihrer Sichtbarkeit filtern kann, dh ich benötige die Attribute, deren Status auf "visible =" gesetzt ist > yes "in Admin ... Jede Hilfe wird geschätzt ... Hier ist mein Code zum Abrufen der Produktattribut-Auflistungsklasse ProductList extend \ Magento \ Framework \ View \ Element \ Template {protected $ _attributeFactory; öffentliche Funktion __construct (\ Magento \ Catalog \ Model \ ResourceModel \ Eav \ Attribute $ attributeFactory) {parent :: __ construct ($ context); $ this -> _ attrib
Gurjeet Singh

Antworten:

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

Hier können Sie eine ganze Sammlung von Attributen haben und diese nach Ihren Wünschen filtern.

Ronak Chauhan
quelle
Wie erhalte ich den Attributnamen und die ID?
einfacher Typ
Verwendung foreachSie bekommen können getAttributeId()sowiegetAttributeName()
Ronak Chauhan
Überprüfen Sie die aktualisierte Antwort
Ronak Chauhan
getAttributeName print blank
einfacher Typ
1
echo "<pre>"; print_r($attributes);exit;Verwenden Sie dies in foreach und überprüfen Sie
Ronak Chauhan
8

Eine andere Idee ist, dass wir es mit Service Contracts Layer versuchen sollten .

Verwenden Sie Magento\Eav\Api\AttributeRepositoryInterfacediese Option, um das eav-Attribut abzurufen.

Ich habe bereits hier eine Antwort: /magento//a/161426/33057

Beispielsweise:

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

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

HINWEIS: Den Entitätstypcode in getListmethod finden Sie in der eav_entity_typeTabelle.

Khoa TruongDinh
quelle