Як отримати список усіх атрибутів


23

Як я можу отримати список (масив) усіх визначених атрибутів продукту? (в основному мені потрібен код і мітка).

редагувати :

Мені потрібні атрибути, щоб динамічно генерувати ACL для всіх атрибутів товару, які існують у магазині. (працює над модулем для приховання атрибутів та інших полів у програмі Backend Edit )


Ігнорування наборів атрибутів?
орієнтири

@benmarks: Так.
Олексій

Відповіді:


37

Якщо вам потрібен запит MySQL, спробуйте:

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

Альтернатива коду Фабіана, якщо вам потрібен скрипт PHP на основі Magento, спробуйте це:

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

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

Приємно. Mage_Catalog_Model_Resource_Product_Attribute_Collectionробить в основному те, що Фабіан намагався здійснити. Спасибі!
Олексій

ласкаво просимо :-)
Sylvain Rayé

як я можу отримати список атрибутів за допомогою ідентифікатора групи? не набір атрибутів
Attila Naghi

5

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

повинен робити.

Ми щойно знайшли помилку, вам потрібно передати entity_type_id:

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

ДАЄ

Код - це документація:

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

сподіваємось, що працює рішення (оновлено коментарем @Alex)

Ви повинні пройти Mage_Eav_Model_Entity_Typeтак, щоб це повинно працювати, а не жорстко кодується:

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

Колекція повертає кількість 0 ... Пам’ятаю, для цього був якийсь API чи клас обслуговування, але не можна знайти його банкомат.
Олексій

Чудово - але 4 жорстко закодовані (навіть жоден соуайор, ймовірно, не зміниться). Зафіксуйте це як результат :-)
Олексій

І ні, перший рядок не працює. Mage_Catalog_Model_Product :: ENTITY - це рядок, а не Mage_Eav_Model_Entity_Type
Alex

Думаю, я це зараз отримав: D
Fabian Blechschmidt

Але тоді я спізнююсь. Я зроблю, коли пройду 2-х
повтор

2

Це для отримання всіх атрибутів

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

Не хочеться використовувати звичайний SQL ...
Алекс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.