모든 속성 목록을 얻는 방법


23

정의 된 모든 제품 속성의 목록 (배열)을 가져 오려면 어떻게해야합니까? (기본적으로 코드와 레이블이 필요합니다).

편집 :

상점에 존재하는 모든 제품 속성에 대해 ACL을 동적으로 생성하려면이 속성이 필요합니다. ( 제품 편집 백엔드에서 속성 및 기타 필드 숨기기 모듈 작업 )


속성 세트를 무시 하시겠습니까?
benmarks

@ 벤 마크 : 예.
Alex

답변:


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

Fabian 코드 대신 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파비안은 기본적으로 무엇을 만들려고 했습니까? 감사!
Alex

천만에요 :-)
Sylvain Rayé

그룹 ID를 사용하여 속성 목록을 어떻게 얻습니까? 속성 세트가 아님
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 또는 서비스 클래스가 있었지만 ATM을 찾을 수 없다는 것을 기억합니다.
Alex

훌륭하지만 4는 하드 코딩되어 있습니다 (아무리 변경되지 않을 수도 있음). 공감대를 위해 고치세요 :-)
Alex

그리고 아니요, 첫 번째 줄은 작동하지 않습니다. Mage_Catalog_Model_Product :: ENTITY는 Mage_Eav_Model_Entity_Type이 아닌 문자열입니다.
Alex

나는 지금 그것을 얻었다 생각 : D
Fabian Blechschmidt

그러나 나는 늦었다. 내가 2k rep : p
Fabian 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을 사용하고 싶지 않습니다 ...
Alex
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.