Получение значения атрибута раскрывающегося списка при использовании addAttributeToSelect
-
11-12-2019 - |
Вопрос
При загрузке коллекции, как я могу получить текст значения атрибута (а не только номер опции), если это атрибут раскрывающегося списка.
Пример:
$collection = Mage::getResourceModel('catalog/product');
$collection->addAttributeToSelect('color'); // color is a dropdown attribute
При использовании этого кода идентификаторы опций отображаются для color
такой как:123, 117 и т. д.а не текстовые значения (например:красный, зеленый и т. д.)
Обычно мы перебираем каждый продукт и получаем текст атрибута, но поскольку он используется в Каталог->Управление продуктами page Я ищу альтернативное решение.
Решение
Я предполагаю, что вы сначала используете Mage_Catalog_Model_Resource_Product_Collection
а не просто ресурс, как указано в вашем вопросе.
Теперь я также предполагаю, что вы просматриваете результаты своей коллекции.
foreach($collection as $product) {}
Если у вас есть объект продукта, вы можете вызвать функцию getAttributeText
и укажите код атрибута.Это загрузит атрибут, получит источник, а затем текст опции на основе данных атрибута, назначенных продукту.
public function getAttributeText($attributeCode)
{
return $this->getResource()
->getAttribute($attributeCode)
->getSource()
->getOptionText($this->getData($attributeCode));
}
Итак, если вы просматриваете свою коллекцию, вам нужно просто позвонить:
foreach ($collection as $product) {
$color_value = $product->getAttributeText('color');
}
Другие советы
Попробуйте добавить «_Value» после того, как имя атрибута такое:
$collection = Mage::getResourceModel('catalog/product');
$collection->addAttributeToSelect('color_value'); // color is a dropdown attribute
.
Если вы используете плоские таблицы для продуктов, вы можете посмотреть в таблицу базы данных Catalog_Product_flat_1, чтобы увидеть доступные атрибуты, я полагаю.
Вам нужно отсортировать по значениям?Если нет, вы можете выбрать все параметры атрибутов в виде хэша $colors
с одним (!) Запрос, а затем отображать их в виде $colors[$product->getColor()]
Возможно, это быстрее, чем выберите каждое значение в цикле или сделать дополнительные соединения, но не работает для сортировки сбора: (