すべての属性のリストを取得する方法


23

定義されているすべての製品属性のリスト(配列)を取得するにはどうすればよいですか?(基本的にはコードとラベルが必要です)。

編集

ショップに存在するすべての製品属性のACLを動的に生成するために必要な属性。(製品編集バックエンドの属性とその他のフィールド非表示にするモジュールの作業)


属性セットを無視しますか?
ベンマーク

@ベンチマーク:はい。
アレックス

回答:


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

Fabentoコードの代わりに、MagentoベースのPHPスクリプトが必要な場合は、これを試してください。

$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基本的にファビアンが作成しようとしていたことを行います。ありがとう!
アレックス

どういたしまして:-)
シルヴァンレイエ

グループIDを使用して属性のリストを取得するにはどうすればよいですか?属性セットではない
アッティラナギ14

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またはサービスクラスがあったことを覚えていますが、ATMが見つかりません。
アレックス

すばらしい-しかし、4はハードコードされています(変更される可能性がすくなくても)。賛成票の修正:
アレックス

いいえ、最初の行は機能しません。Mage_Catalog_Model_Product :: ENTITYは文字列であり、Mage_Eav_Model_Entity_Typeではありません
アレックス

私は今それを得たと思う:D
ファビアンBlechschmidt

しかし、それから私は遅れます。P:私は2kの担当者渡すとき、私は、やる
ファビアンBlechschmidt

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を使用したくない
アレックス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.