que han estado trabajando a través de este tema también, que Yo describiría como "no puede acceder al atributo de colección de productos en modo plano" o "addAttributeToSelect no funciona en modo plano".
he encontrado una solución "limpia", que:
- no requiere el atributo de tener los ajustes específicos de administrador (que podría ser añadido por un usuario, o se oculta en la parte delantera)
- obras tanto para el modo plano y no plano
Tenga en cuenta - en el siguiente código que he utilizado la colección de productos asociados, pero esto se aplica a cualquier colección de productos (en concreto, cualquier cosa que hereda de Mage_Eav_Model_Entity_Collection_Abstract
)
código de defecto:
$_product = Mage::getModel('catalog/product')->loadByAttribute('sku', 'ABC123');
$coll = $_product->getTypeInstance()->getAssociatedProductCollection()
->addAttributeToSelect('my_custom_attribute')
;
En el modo plano, el código anterior en silencio no puede agregar el atributo si sucede no estar en la mesa plana.
código de trabajo:
$_product = Mage::getModel('catalog/product')->loadByAttribute('sku', 'ABC123');
$coll = $_product->getTypeInstance()->getAssociatedProductCollection()
->joinAttribute('my_custom_attribute', 'catalog_product/my_custom_attribute', 'entity_id', null, 'left')
->addAttributeToSelect('my_custom_attribute')
;
El método joinAttribute
agrega un join a la consulta. Funciona incluso si esto duplica un atributo que ya está en la tabla plana.
Tenga en cuenta que he utilizado una unión left
allí, para asegurar que recupera productos si my_custom_attribute
no está establecido en esos productos. Puede cambiar eso para inner
si solo está interesado en las filas donde está establecido my_custom_attribute
.
(probado en el CE 1.6.2.0)
"Usado en P El anuncio de roduct "parece ser la clave. Tenía varios atributos que ya eran "Usar en la Navegación en capas" pero no aparecían en la tabla catalog_product_flat_1 hasta que establecí "Usado en el Listado de productos" también. – ben