He creado un informe personalizado. El informe tiene un número significativo de campos que son necesarios para cuando se exporta en formato CSV.
Lo que estoy tratando de averiguar es si hay una manera de omitir la representación de algunos de los campos en la cuadrícula frontal. La mayoría de ellos no son realmente importantes para el proceso de filtrado en admin y solo se usan cuando el informe se descarga para un análisis posterior fuera de Magento.
Esperaría que este tipo de funcionalidad resida en la clase de cuadrícula, ya que eso es lo que genera la cuadrícula real y, más adelante, el CSV exportado, pero no veo nada que parezca que se ocupe de la visibilidad.
Antes de entrar y anular los métodos en esta clase para nuestro informe personalizado, ¿hay una forma menos conocida de lograr esto que sea más fácil que agregar algún tipo de propiedad "showInGrid" a través de la matriz de propiedades addColumn?
TL, DR ¿hay una manera fácil de exportar campos (por ejemplo, CSV o XML) pero omitidos de la cuadrícula de administración?
Respuestas:
Cree una definición de bloque separada, por ejemplo, duplique el bloque Grid en otro bloque que sea específico para su CSV; Llamaría a esto en
Csvgrid.php
lugar deGrid.php
: contendría todas las mismas funciones que lo normalGrid.php
, pero omita una columna.En tu controlador:
Al duplicar la cuadrícula, colóquela
Csvgrid.php
en el mismo directorio físico,Grid.php
pero cámbiele el nombre según corresponda; ¡no olvide cambiar el nombre de la clase!Editar:
Entonces resulta que
Mage_Adminhtml_Block_Widget_Grid
tiene un método llamadoremoveColumn
, definido como:Supongo que porque se
Mage_Adminhtml_Block_Report_Grid
extiendeMage_Adminhtml_Block_Widget_Grid
, hereda este método y debería poder usarse. En ese caso, crearía una nueva cuadrícula de bloques y ampliaría la cuadrícula en la que se encuentra su informe actual. Desde allí puede usar su propioprepareColumns
método, llame alparent::_prepareColumns()
y luego llameremoveColumn
...La mejor de las suertes.
fuente
_prepareColumns
que hará referencia a un índice que ya no existe en la colección. Si bien hay un método 'removeColumn', yo diría que extienda la clase Grid y llameparent::_prepareColumns()
, luego inyecte su propioremoveColumns
método.Puede usar set
column_css_class
y enheader_css_class
cuantono-display
a la columna que desea ocultar. Esto ocultará su columna de la cuadrícula de administración. Sin embargo, esta columna estará presente en el csv o xml exportado.fuente
Hay un método
_afterLoadCollection()
en Mage / Adminhtml / Block / Widget / Grid.php que se puede anular para eliminar / agregar columnas para exportar o mostrar$this->_isExport
.NOTA: Agregar esto a la
_prepareCollection()
no funcionará ya que los filtros de la colección no se habrán enviado, lo que dará como resultado que se elimine toda la colección menos cualquier filtrado.fuente
Si solo necesita esos campos para el informe, ¿por qué no los agrega solo para el informe? Los bloques de cuadrícula tienen el método getCollection que devolverá el modelo de colección y puede agregar los campos que necesita para su informe.
fuente
La manera fácil de hacer esto es
Retroceda el archivo Grid.php (app / core / Mage / Adminhtml / Block / Sales / Order / Grid.php)
luego agregue su columna personalizada como hice a continuación:
También hizo cambios en
Esto significa que tenemos que agregar nuestro valor de columna personalizado a la colección. Para eso tenemos que unir nuestra tabla con la tabla de colección de cuadrícula.
Ahora ve y revisa el backend, exporta los pedidos. se agregará nuestra columna personalizada.
fuente