Obtenir la valeur de l'attribut déroulant lors de l'utilisation de addAttributeToSelect
-
11-12-2019 - |
Question
Lors du chargement d'une collection, comment puis-je obtenir le texte de la valeur de l'attribut (et pas seulement le numéro de l'option) lorsqu'il s'agit d'un attribut déroulant.
Exemple:
$collection = Mage::getResourceModel('catalog/product');
$collection->addAttributeToSelect('color'); // color is a dropdown attribute
Lorsque vous utilisez ce code, les identifiants d'option s'affichent pour color
tel que:123, 117, etc.et non les valeurs du texte (comme :rouge, vert, etc.)
Habituellement, nous parcourons chaque produit et obtenons le texte de l'attribut, mais comme celui-ci est utilisé dans le Catalogue->Gérer les produits page Je recherche une solution alternative.
La solution
Je suppose que vous utilisez d'abord Mage_Catalog_Model_Resource_Product_Collection
et pas simplement la ressource comme indiqué dans votre question.
Maintenant, je suppose également que vous parcourez les résultats de votre collection.
foreach($collection as $product) {}
Une fois que vous avez l'objet produit, vous pouvez appeler la fonction getAttributeText
et spécifiez le code d'attribut.Cela chargera l'attribut pour obtenir la source, puis le texte de l'option en fonction des données d'attribut attribuées au produit.
public function getAttributeText($attributeCode)
{
return $this->getResource()
->getAttribute($attributeCode)
->getSource()
->getOptionText($this->getData($attributeCode));
}
Donc, si vous parcourez votre collection, vous devez simplement appeler :
foreach ($collection as $product) {
$color_value = $product->getAttributeText('color');
}
Autres conseils
Essayez d'ajouter "_value" après le nom de l'attribut comme ceci :
$collection = Mage::getResourceModel('catalog/product');
$collection->addAttributeToSelect('color_value'); // color is a dropdown attribute
Si vous utilisez des tables plates pour les produits, vous pouvez consulter la table de base de données catalog_product_flat_1 pour voir les attributs disponibles, je crois.
Avez-vous besoin de trier par valeurs ?Sinon, vous pouvez sélectionner toutes les options d'attribut en tant que $colors
hachez avec une (!) requête, puis affichez-les comme $colors[$product->getColor()]
C'est probablement plus rapide que de sélectionner chaque valeur dans la boucle ou de créer des jointures supplémentaires, mais cela ne fonctionne pas pour le tri des collections :(