Pergunta

Ao carregar uma coleção, como posso obter o texto do valor do atributo (e não apenas o número da opção) quando é um atributo suspenso.

Exemplo:

$collection = Mage::getResourceModel('catalog/product');
$collection->addAttributeToSelect('color'); // color  is a dropdown attribute

Ao usar este código, os IDs das opções são exibidos para color como:123, 117 etc.e não os valores de texto (como:vermelho, verde etc.)

Normalmente iteramos em cada produto e obtemos o texto do atributo, mas como isso está sendo usado no Catálogo->Gerenciar produtos page Estou procurando uma solução alternativa.

Foi útil?

Solução

Presumo que você esteja usando primeiro Mage_Catalog_Model_Resource_Product_Collection e não simplesmente o recurso indicado na sua pergunta.

Agora também estou assumindo que você está percorrendo os resultados de sua coleção.

foreach($collection as $product) {}

Depois de ter o objeto produto, você pode chamar a função getAttributeText e especifique o código do atributo.Isso carregará o atributo, obterá a origem e, em seguida, o texto da opção com base nos dados do atributo atribuído ao produto.

public function getAttributeText($attributeCode)
{
return $this->getResource()
    ->getAttribute($attributeCode)
        ->getSource()
            ->getOptionText($this->getData($attributeCode));
}

Então, se você estiver percorrendo sua coleção, basta ligar:

foreach ($collection as $product) {
    $color_value = $product->getAttributeText('color');
}

Outras dicas

Tente adicionar "_value" após o nome do atributo assim:

$collection = Mage::getResourceModel('catalog/product');
$collection->addAttributeToSelect('color_value'); // color  is a dropdown attribute

Se você estiver usando tabelas simples para produtos, poderá consultar a tabela de banco de dados catalog_product_flat_1 para ver os atributos disponíveis, acredito.

Você precisa classificar pelos valores?Caso contrário, você pode selecionar todas as opções de atributos como $colors hash com uma (!) consulta e, em seguida, exibi-los como $colors[$product->getColor()]

Provavelmente é mais rápido do que selecionar cada valor no loop ou fazer junções extras, mas não funciona para classificação de coleções :(

Licenciado em: CC-BY-SA com atribuição
Não afiliado a magento.stackexchange
scroll top