Как получить все супер атрибуты для настраиваемого элемента в Magento - PullRequest
4 голосов
/ 14 октября 2011

В моей системе есть настраиваемые продукты, состоящие из цвета и размера. Я написал следующий код для получения данных, но он слишком медленный. Перед добавлением этого бита кода время загрузки страницы составляет менее 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'];
    }
}

1 Ответ

3 голосов
/ 13 апреля 2012

Операция 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'];
    }

При этом будут получены все коды атрибутов. Вы можете изменить запрос так, чтобы он получал нужные вам данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...