2010-09-07 9 views
9

Tengo un módulo personalizado con una página de back-end. En la grilla, muestro el correo electrónico del cliente como el nombre de usuario. De forma predeterminada, Magento agrega un filtro a cada columna en la grilla. Ahora, cuando intento filtrar por el correo electrónico del cliente, aparece una excepción que dice que mi tabla personalizada no tiene una columna de correo electrónico. Magento está tratando de encontrar eso en mi tabla personalizada. ¿Cómo puedo solucionar este problema o cómo puedo eliminar el campo de esa columna para que el administrador no pueda filtrar por ese campo? Gracias.Magento Desactivar campo de filtro a cuadrícula de administrador

Respuesta

33

Añadir la opción

'filter' => false 

a la columna que desea quitar el filtro de en la vista de cuadrícula (por ejemplo, aplicación/código/core/Mago/Admi nHtml/Bloquear/Ventas/Pedido/Grid.php)

$this->addColumn('email', array(
     'header' => Mage::helper('module')->__('Email'), 
     'align'  =>'left', 
     'index'  => 'email', 
     'filter' => false, 
    )); 
1

supongo que quería decir "¿cómo puedo eliminar el campo de esa columna para que el administrador puede 't filtro con este campo"

Si es así, te puedo decir cómo quitar el campo de correo electrónico.

abierto /app/code/local/Namespace/Module/Block/Adminthml/Module/Grid.php

En algún lugar de los _prepareColumns función protegida() que debe encontrar algo como:

$this->addColumn('email', array(
     'header' => Mage::helper('module')->__('Email'), 
     'align'  =>'left', 
     'index'  => 'email', 
)); 

Solo comenta estas líneas.

Y cuidado que, en el método __construct en el comienzo mismo de toda la clase, usted no tiene

$this->setDefaultSort('email'); 

Si es así, cambiarlo a

$this->setDefaultSort('id'); // if you have an id field in your module. 
+0

ok, quiero mostrar la columna, pero elimine el campo en la parte superior de la columna, ¿cómo puedo hacer eso? –

+1

si hago eso, elimino la columna, no quiero eliminar la columna, solo el campo en la parte superior, que se usa para filtrar –

0

Si usted no tiene una columna de correo electrónico en la tabla personalizada, entonces supongo que está creando su red por unirse a la tabla personalizada a un núcleo tabla que contiene la dirección de correo electrónico de los usuarios, como customer_entity.

Cuando filtra en una columna, Magento usa el índice de columna para producir la cláusula where. Que en su caso dará algo como WHERE email LIKE '%filter value%', pero no encontrará el correo electrónico en su tabla personalizada.

Puede solucionarlo usando filter_index para indicar explícitamente a Magento qué tabla y qué columna usar al compilar la cláusula where. Intentar algo como esto

$this->addColumn('email', array(
    'header' => Mage::helper('module')->__('Email'), 
    'index'  => 'email', 
    'filter_index'   => 'core_table.email', 
)); 

donde core_table es la tabla que se están uniendo con.

Cuestiones relacionadas