Abrufen des Dropdown-Attributwerts bei Verwendung von addAttributeToSelect
-
11-12-2019 - |
Frage
Wie kann ich beim Laden einer Sammlung den Attributwerttext (und nicht nur die Optionsnummer) abrufen, wenn es sich um ein Dropdown-Attribut handelt.
Beispiel:
$collection = Mage::getResourceModel('catalog/product');
$collection->addAttributeToSelect('color'); // color is a dropdown attribute
Bei Verwendung dieses Codes werden die Options-IDs für angezeigt color
wie:123, 117 usw.und nicht die Textwerte (wie:rotes, grünes etc.)
Normalerweise durchlaufen wir jedes Produkt und erhalten den Text für das Attribut, aber da dies in der verwendet wird Katalog-> Produkte verwalten seite Ich suche nach einer alternativen Lösung.
Lösung
Ich gehe davon aus, dass Sie zuerst verwenden Mage_Catalog_Model_Resource_Product_Collection
und nicht nur die Ressource, wie in Ihrer Frage angegeben.
Jetzt gehe ich auch davon aus, dass Sie die Ergebnisse Ihrer Sammlung durchlaufen.
foreach($collection as $product) {}
Sobald Sie das Produktobjekt haben, können Sie die Funktion aufrufen getAttributeText
und geben Sie den Attributcode an.Dadurch wird das Attribut geladen, um die Quelle und dann den Optionstext basierend auf den dem Produkt zugewiesenen Attributdaten abzurufen.
public function getAttributeText($attributeCode)
{
return $this->getResource()
->getAttribute($attributeCode)
->getSource()
->getOptionText($this->getData($attributeCode));
}
Wenn Sie also Ihre Sammlung durchlaufen, müssen Sie einfach anrufen:
foreach ($collection as $product) {
$color_value = $product->getAttributeText('color');
}
Andere Tipps
Versuchen Sie, "_value" nach dem Attributnamen wie folgt hinzuzufügen:
$collection = Mage::getResourceModel('catalog/product');
$collection->addAttributeToSelect('color_value'); // color is a dropdown attribute
Wenn Sie flache Tabellen für Produkte verwenden, können Sie in der Datenbanktabelle catalog_product_flat_1 nach den verfügbaren Attributen suchen, glaube ich.
Müssen Sie nach den Werten sortieren?Wenn nicht, können Sie alle Attributoptionen als auswählen $colors
hash mit einem(!) abfragen und sie dann als anzeigen $colors[$product->getColor()]
Wahrscheinlich ist es schneller als jeden Wert in der Schleife auszuwählen oder zusätzliche Verknüpfungen vorzunehmen, funktioniert aber nicht für die Sammlungssortierung :(