Jak uzyskać listę wszystkich atrybutów

23

Jak mogę pobrać listę (tablicę) wszystkich zdefiniowanych atrybutów produktu? (w zasadzie potrzebuję kodu i etykiety).

edycja :

Potrzebne mi atrybuty, aby dynamicznie generować listy ACL dla wszystkich atrybutów produktu istniejących w sklepie. (praca nad modułem Ukryj atrybuty i inne pola w zapleczu edycji produktu )

Alex
źródło
Ignorujesz zestawy atrybutów?
zyskuje
@benmarks: Tak.
Alex

Odpowiedzi:

37

Jeśli potrzebujesz zapytania MySQL, spróbuj:

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')

Alternatywą dla kodu Fabian, jeśli potrzebujesz skryptu PHP opartego na Magento, spróbuj tego:

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

foreach ($attributes as $attribute){
    echo $attribute->getAttributecode();
    echo '<br>';
    echo $attribute->getFrontendLabel();
}
Sylvain Rayé
źródło
Miły. Mage_Catalog_Model_Resource_Product_Attribute_Collectionrobi w zasadzie to, co Fabian próbował stworzyć. Dzięki!
Alex
nie ma za co :-)
Sylvain Rayé
jak uzyskać listę atrybutów za pomocą identyfikatora grupy? nie zestawy atrybutów
Attila Naghi
5

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

powinieneś zrobić.

Właśnie znaleźliśmy błąd, musisz podać identyfikator podmiotu:

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

ROBI

Kod jest dokumentacją:

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

mam nadzieję, że działa rozwiązanie (zaktualizowane przez komentarz @Alex)

Musisz przekazać a, Mage_Eav_Model_Entity_Typewięc to powinno działać i nie jest zakodowane na stałe:

$type = Mage::getModel('eav/entity_type')->loadByCode(Mage_Catalog_Model_Product::ENTITY)
Mage::getResourceModel('eav/entity_attribute_collection')->setEntityTypeFilter($type);
Fabian Blechschmidt
źródło
Kolekcja zwraca liczbę 0 ... Pamiętam, że był do tego jakiś API lub klasa usług, ale nie mogę znaleźć bankomatu.
Alex
Świetnie - ale 4 jest zakodowane na stałe (nawet nie ma takiej możliwości, aby się zmieniło). Napraw to, aby uzyskać opinię :-)
Alex
I nie, pierwsza linia nie działa. Mage_Catalog_Model_Product :: ENTITY jest łańcuchem, a nie Mage_Eav_Model_Entity_Type
Alex
Myślę, że mam go teraz: D
Fabian Blechschmidt
Ale spóźniłem się. Zrobię to, gdy przejdę powtórkę 2k: p
Fabian Blechschmidt
2

Ma to na celu uzyskanie wszystkich atrybutów

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
źródło
Nie chcę używać zwykłego SQL ...
Alex