So erhalten Sie eine Liste aller Attribute

23

Wie kann ich eine Liste (Array) aller definierten Produktattribute abrufen? (Grundsätzlich brauche ich den Code und das Etikett).

bearbeiten :

Die Attribute, die ich benötige, um dynamisch ACLs für alle im Shop vorhandenen Produktattribute zu generieren. (Arbeiten an einem Modul zum Ausblenden von Attributen und anderen Feldern im Produktbearbeitungs-Backend )

Alex
quelle
Attributmengen ignorieren?
benmarks
@benmarks: Ja.
Alex

Antworten:

37

Wenn Sie eine MySQL-Abfrage benötigen, versuchen Sie Folgendes:

select attribute_id, attribute_code, frontend_label from eav_attribute where entity_type_id IN (select entity_type_id from eav_entity_type where entity_type_code = 'catalog_product')

Eine Alternative zu Fabian-Code, wenn Sie ein auf Magento basierendes PHP-Skript benötigen, versuchen Sie Folgendes:

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

foreach ($attributes as $attribute){
    echo $attribute->getAttributecode();
    echo '<br>';
    echo $attribute->getFrontendLabel();
}
Sylvain Rayé
quelle
Nett. Mage_Catalog_Model_Resource_Product_Attribute_Collectiontut im Grunde das, was Fabian zu basteln versuchte. Vielen Dank!
Alex
Gern
geschehen
Wie erhalte ich eine Liste der Attribute mit einer Gruppen-ID?
Keine
5

//Mage_Eav_Model_Mysql4_Entity_Attribute_Collection
Mage::getResourceModel('eav/entity_attribute_collection')->setEntityTypeFilter(Mage_Catalog_Model_Product::ENTITY);

sollte tun.

Wir haben gerade einen Fehler gefunden, Sie müssen die entity_type_id übergeben:

$col = Mage::getResourceModel('eav/entity_attribute_collection')->setEntityTypeFilter(4);

TUT

Der Code ist die Dokumentation:

if ($type instanceof Mage_Eav_Model_Entity_Type) {
        $additionalTable = $type->getAdditionalAttributeTable();
        $id = $type->getId();
    } else {
        $additionalTable = $this->getResource()->getAdditionalAttributeTable($type);
        $id = $type;
    }

hoffentlich funktionierende Lösung (aktualisiert von @Alex comment)

Sie müssen ein übergeben, Mage_Eav_Model_Entity_Typedamit dies funktioniert und nicht fest codiert ist:

$type = Mage::getModel('eav/entity_type')->loadByCode(Mage_Catalog_Model_Product::ENTITY)
Mage::getResourceModel('eav/entity_attribute_collection')->setEntityTypeFilter($type);
Fabian Blechschmidt
quelle
Die Auflistung gibt eine Anzahl von 0 zurück. Ich erinnere mich, dass es dafür eine Art API oder Serviceklasse gab, kann sie aber nicht finden.
Alex
Großartig - aber 4 ist hartcodiert (auch wenn sich wahrscheinlich kein sooo ändert). Fix it for a upvote :-)
Alex
Und nein, die erste Zeile funktioniert nicht. Mage_Catalog_Model_Product :: ENTITY ist ein String, kein Mage_Eav_Model_Entity_Type
Alex
Ich glaube, ich habe es jetzt verstanden: D
Fabian Blechschmidt
Aber dann bin ich zu spät. Ich werde tun, wenn ich die 2k rep: p
Fabian Blechschmidt
2

Hiermit werden alle Attribute abgerufen

SELECT
    eav_attribute_option_value.option_id,
    eav_attribute_option_value.`value`,
    eav_attribute_option.attribute_id
                FROM
                        eav_attribute_option_value
                INNER JOIN eav_attribute_option ON eav_attribute_option_value.option_id = eav_attribute_option.option_id
                WHERE
                        eav_attribute_option.attribute_id = 135
                OR eav_attribute_option.attribute_id = 142 
                -- 135 = BRANDS
                -- 142 = TYPES
                GROUP BY
                        eav_attribute_option_value.option_id
                ORDER BY
                eav_attribute_option_value.`value` ASC
Umair
quelle
Ich möchte kein einfaches SQL verwenden ...
Alex