воскресенье, 15 июня 2014 г.

Magento: Как добавить во flat таблицу аттрибут с собственной source моделью

Для добавления атрибута продукта во flat таблицу достаточно выполнить следующие действия:
1. Включить для атрибута настройку "Used in Product Listing"
2. Выполнить полный реиндекс catalog_product_flat

Но это не работает если вы создаете атрибут с собственной source моделью. Чтобы сделать это нужно выполнить несколько дополнительных действий:
1. Добавить в source модель функцию getFlatColums() с описанием вашего атрибута. Да да, именно getFlatColums, а не getFlatColumns (привет core разработчикам Magento).
/**
 * {@inheritdoc}
 */
public function getFlatColums()
{
    return array($this->getAttribute()->getAttributeCode() => array(
        'type'      => 'tinyint',
        'unsigned'  => true,
        'is_null'   => true,
        'default'   => null,
        'extra'     => null
    ));
}

2. Добавить функцию getFlatUpdateSelect()
/**
 * {@inheritdoc}
 */
public function getFlatUpdateSelect($store)
{
    /** @var $attr Mage_Eav_Model_Resource_Entity_Attribute */
    $attr = Mage::getResourceSingleton('eav/entity_attribute');
    return $attr->getFlatUpdateSelect($this->getAttribute(), $store);
}

После этих действий не забываем выполнить полный реиндекс catalog_product_flat.
Читать далее