Come ottenere un elenco di tutti gli attributi


23

Come posso recuperare un elenco (array) di tutti gli attributi di prodotto definiti? (fondamentalmente ho bisogno del codice e dell'etichetta).

modifica :

Gli attributi di cui ho bisogno per generare dinamicamente ACL per tutti gli attributi di prodotto esistenti nel negozio. (lavorando su un modulo per Nascondi attributi e altri campi nel back - end di modifica del prodotto )


Ignorando le serie di attributi?
benmarks

@benmarks: Sì.
Alex,

Risposte:


37

Se hai bisogno di una query MySQL, prova a:

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

Un'alternativa al codice Fabian, se hai bisogno di uno script PHP basato su Magento, prova questo:

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

foreach ($attributes as $attribute){
    echo $attribute->getAttributecode();
    echo '<br>';
    echo $attribute->getFrontendLabel();
}

Bello. Mage_Catalog_Model_Resource_Product_Attribute_Collectionfa fondamentalmente ciò che Fabian stava cercando di creare. Grazie!
Alex,

prego :-)
Sylvain Rayé,

come posso ottenere un elenco di attributi usando un ID di gruppo? non set di attributi
Attila Naghi,

5

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

dovresti ... dovrebbe.

Abbiamo appena trovato un bug, devi passare entity_type_id:

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

DOES

Il codice è la documentazione:

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

si spera soluzione funzionante (aggiornata dal commento @Alex)

Devi passare un Mage_Eav_Model_Entity_Typequindi questo dovrebbe funzionare e non è hardcoded:

$type = Mage::getModel('eav/entity_type')->loadByCode(Mage_Catalog_Model_Product::ENTITY)
Mage::getResourceModel('eav/entity_attribute_collection')->setEntityTypeFilter($type);

La raccolta restituisce un conteggio di 0 ... Ricordo che esisteva una sorta di API o classe di servizio per questo, ma non riesco a trovarlo ATM.
Alex,

Fantastico - ma 4 è hardcoded (anche se non è probabile che cambi). Risolvilo per un voto :-)
Alex

E no, la prima riga non funziona. Mage_Catalog_Model_Product :: ENTITY è una stringa, non un Mage_Eav_Model_Entity_Type
Alex

Penso di averlo capito subito: D
Fabian Blechschmidt,

Ma poi sono in ritardo. Lo farò, quando
supererò

2

Questo per ottenere tutti gli attributi

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

Non voglio usare il semplice SQL ...
Alex
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.