У меня есть конфигурируемые продукты в моей системе, состоящие из цвета и размера. Я написал следующий код для получения данных, но он слишком медленный. Перед добавлением этого бита кода время загрузки страницы составляет менее 2 секунд, а после добавления – до 15 секунд. Конечно, есть более быстрый способ получить эту информацию (у меня есть 2 супер-атрибута с примерно 10 опциями)
Мой код:
$productAttributeOptions = $_product->getTypeInstance(true)->getConfigurableAttributesAsArray($_product); $attributeOptions = array(); foreach ($productAttributeOptions as $productAttribute) { foreach ($productAttribute['values'] as $attribute) { $attributeOptions[$productAttribute['label']][$attribute['value_index']] = $attribute['store_label']; } }
Операция getConfigurableAttributesAsArray очень медленная. Это происходит потому, что он выполняет загрузку коллекции атрибутов.
Лучший способ исправить это – использовать пользовательский запрос, который извлекает только нужные вам данные. Что-то вроде этого:
$read = Mage::getSingleton('core/resource')->getConnection('core_read'); $result = $read->query( "SELECT eav.attribute_code FROM eav_attribute as eav LEFT JOIN catalog_product_super_attribute as super ON eav.attribute_id = super.attribute_id WHERE (product_id = " . $this->getProduct()->getId() . ");" ); $attributeCodes = array(); while ($row = $result->fetch()) { $attributeCodes[] = $row['attribute_code']; }
Это позволит получить все коды атрибутов. Вы можете изменить запрос, чтобы получить нужные данные.