Obtendo o valor do atributo suspenso ao usar addAttributeToSelect
-
11-12-2019 - |
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.
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 :(