Как получить список всех атрибутов

23

Как я могу получить список (массив) всех определенных атрибутов продукта? (в основном мне нужен код и метка).

редактировать :

Атрибуты, которые мне нужны, чтобы динамически генерировать ACL для всех атрибутов продукта, существующих в магазине. (работает над модулем для скрытия атрибутов и других полей в бэкенде редактирования продукта )

Alex
источник
Игнорирование наборов атрибутов?
отметки
@benmarks: Да.
Алекс

Ответы:

37

Если вам нужен MySQL Query, попробуйте это:

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

Альтернатива коду Fabian, если вам нужен 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делает в основном то, что пытался создать Фабиан. Благодарность!
Алекс
милости
Как получить список атрибутов, используя идентификатор группы? не атрибуты наборов
Аттила Наги
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);

DOES

Код это документация:

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

надеюсь рабочее решение (обновлено @Alex comment)

Вы должны передать, 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 или класс обслуживания, но я не могу найти его ATM.
Алекс
Отлично - но 4 жестко закодирован (даже не ооочень вероятно изменится). Исправить это для upvote :-)
Алекс
И нет, первая строка не работает. Mage_Catalog_Model_Product :: ENTITY - это строка, а не Mage_Eav_Model_Entity_Type
Алекс
Я думаю, что я получил это сейчас: D
Фабиан Блехшмидт
Но тогда я опаздываю. Я сделаю, когда я передам 2k респ: p
Фабиан Блехшмидт
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
Umair
источник
Не хочу использовать простой SQL ...
Алекс