2011-06-07 10 views
19

Estoy en el proceso de optimizar la tienda magento, y me he topado con un par de publicaciones que recomiendan usar el Catálogo de productos planos para tiendas con una gran cantidad de SKU.¿Puedo agregar otros atributos a la tabla de catálogo de productos plana de magento?

Como tengo más de 10 mil productos, pensé que lo probaría. Sin embargo, cuando se utiliza el Catálogo de productos planos, solo se seleccionan unos pocos atributos en el objeto del producto (por ejemplo, SKU, nombre, descripción breve). Y mi plantilla muestra algunos otros atributos en la vista de búsqueda/exploración, como Fabricante y Color.

¿Hay alguna manera de agregar estos atributos a la tabla de catálogo de productos planos para que también se pueda acceder a ellos?

Respuesta

41

1.4.x.x, sólo tiene que ir a los atributos que desea utilizar en el "Catálogo de Producto plana" y asegúrese de que la propiedad "utilizado en la lista de productos" se establece en Sí . Tras realizar los cambios, indexar "plana de datos del producto"

Las siguientes propiedades hacen que el atributo que se incluirán en el "Catálogo plana del producto":

"Use in Layered Navigation" = Yes 
"Used in Product Listing" = Yes 
"Used for Sorting in Product Listing" = Yes 
+3

"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

9

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)

+0

¡La única solución lógica al problema! Gracias –

5

Otros han dado la respuesta suele ser suficiente (configuración que se utilizan en el producto de venta en Sí), pero he encontrado un caso extremo que habría sido útil saber cuando estaba buscando esta misma cosa.

Si está utilizando un modelo de origen personalizado para el atributo personalizado que desea incluir en la tabla de productos planos, deberá anular getFlatColums() en la clase de modelo de origen. Sí, sé que está mal escrito, pero ese es Magento nativo para ti.

Muestra:

public function getFlatColums() { 
    return array($this->getAttribute()->getAttributeCode() => array(
     'type'  => 'tinyint', 
     'unsigned' => true, 
     'is_null' => true, 
     'default' => null, 
     'extra'  => null 
    )); 
} 

Fuente: http://www.dconstructing.com/2012/03/14/custom-product-attributes-and-flat-database-tables-in-magento

1

Si desea hacer uso de un atributo en un módulo durante el uso de la tabla de productos planos (filtro de una colección de productos, por ejemplo,) puede agregarlo a Module_File.xml de un módulo

<?xml version="1.0"?> 
<config> 
    <modules> 
     <Your_Module> 
      <active>true</active> 
      <codePool>local</codePool> 
     </Your_Module> 
    </modules> 
    <frontend> 
     <product> 
      <collection> 
       <attributes> 
        <your_custom_attribute /> <!-- This is the attribute name --> 
       </attributes> 
      </collection> 
     </product> 
    </frontend> 
</config> 
Cuestiones relacionadas