Cómo añadir columnas en diferentes zonas del administrador de Magento


Notice: Undefined variable: post in /furanet/sites/diegomestre.com/web/htdocs/wp-content/themes/docpress/functions.php on line 294

Notice: Trying to get property of non-object in /furanet/sites/diegomestre.com/web/htdocs/wp-content/themes/docpress/functions.php on line 294

Cómo añadir columnas en diferentes zonas del administrador de Magento

Un asunto que a menudo me han pedido diferentes clientes es poder modificar, es decir añadir o quitar columnas en los diferentes listados que hay en el administrador de magento.

Como sabéis, hay listados por todas partes, prácticamente cada opción es una tabla con su zona superior para filtrar y que pulsando sobre un elemento de la lista entras a modificar todos sus atributos. Tenemos tablas-listado de productos, de clientes, de pedidos, de facturas, de promociones, etc… por todas partes.

Existen módulos, algunos de ellos muy útiles y muy buenos que automatizan esta tarea de forma muy fácil, y te permiten desde el mismo administrador escoger tú las columnas que necesitas en tu tabla. Pero bueno, nunca está de más como poder hacer estas modificaciones.

Bien, cada una de estas tablas se configura en su correspondiente sitio en el core de Magento, en su bloque correspondiente. Por ejemplo, la tabla del listado de pedidos, se configura en el archivo app/code/core/Mage/Adminhtml/Block/Sales/Order/Grid.php (Recordad no modificar este archivo y sacar copia en app/code/local o app/code/community)

En este archivo encontraremos dos funciones, simplemente modificándolas podremos añadir o retirar columnas de nuestra tabla:

protected function _prepareCollection()
    {
        $collection = Mage::getResourceModel($this->_getCollectionClass());
        $this->setCollection($collection);
        return parent::_prepareCollection();
    }

Esta primera función _prepareCollection() es la encargada de ejecutar la consulta contra la base de datos. Para profundizar en este tema, lo haré en un próximo artículo

Y acto seguido en este mismo archivo tenemos la función que añade las columnas de esta consulta:

protected function _prepareColumns()
    {

        $this->addColumn('real_order_id', array(
            'header'=> Mage::helper('sales')->__('Order #'),
            'width' => '80px',
            'type'  => 'text',
            'index' => 'increment_id',
        ));

        if (!Mage::app()->isSingleStoreMode()) {
            $this->addColumn('store_id', array(
                'header'    => Mage::helper('sales')->__('Purchased From (Store)'),
                'index'     => 'store_id',
                'type'      => 'store',
                'store_view'=> true,
                'display_deleted' => true,
            ));
        }

        $this->addColumn('created_at', array(
            'header' => Mage::helper('sales')->__('Purchased On'),
            'index' => 'created_at',
            'type' => 'datetime',
            'width' => '100px',
        ));

A simple vista muchos de vosotros ya sabríais añadir una nueva columna, ¿verdad?. Efectivamente simplemente hay que hacer llamadas al método addColumn, pasándole 2 parámetros, el primero el identificador de la columna y el segundo un array con la información que hace falta para la columna, son los siguientes datos:

header: El nombre que aparecerá en el admin
index:El índice, hace referencia al valor de la consulta SQL anterior
type: El tipo de datos (datetime, text, integer,…)
width: El ancho que debe ocupar la columna en la tabla

Creo que es bastante fácil, no obstante si intentándolo no lo consigues, no dudes en escribirme aquí un comentario y en cuanto pueda te intento ayudar a resolverlo.

Escribe tu comentario

comentarios

Comments

  1. Hola!

    Estoy intentando hacer modificaciones en el grid, tal y como comentas en el post, pero no se reflejan los cambios. Concretamente he intentado quitar un par de columnas, para empezar.

    He probado de todo. He refrescado la cache, y hecho mil cambios, pero todo está igual. Se te ocurre algo que esté haciendo mal?

    Gracias…

    • Hola Manu,

      Bueno, este artículo es una síntesis de las cosas que hay que hacer para modificar el grid de pedidos (realmente cualquier grid se modificaría igual), realmente hay varias cosas que comprobar.
      Lo primero que yo miraría es que no tuvieras algún módulo que esté sobreescribiendo o extendiendo la funcionalidad del core, que es lo más probable, y en ese caso, las modificaciones habría que hacerlas sobre ese módulo. Esto puedes haciendo escribiendo una línea en el core que te marque algo en el log, por ejemplo.
      Otra cosa es ver si las columnas las tienes en la query, ten en cuenta que sólo con esto sólo puedes añadir columnas cuyo valor esté esta query (valor index del array de la columna). Si no están, no te daría error pero te dejaría esa columna en blanco.

      Espero haberte ayudado

      Diego.

      • Gracias Diego,

        Lo más probable es que en algún sitio se esté sobreescribiendo esa funcionalidad, porque he llegado a borrar el archivo y no se aprecian cambios.

        Investigaré a fondo.

        Muchas gracias por la ayuda.

        • Ahí lo tienes, seguro que es eso.

          Módulos que con frecuencia hacen eso son módulos para borrar pedidos, ya que tiene que meter el enlace a “Borrar”, o módulos de checkout, ya que los datos que muestra del grid los tiene que sacar de otras tablas.

          Un saludo

          • A parte de tener un módulo que sobreescribía la función que contruye el grid, también es importante hacer una compilación después de hacer cambios… ainss

            :D

            Lo pongo aquí por si alguien lee la conversación y tiene el mismo problema…

          • Sí, Manu, si compilas el php ese es otro motivo por el cual no funcionarían los cambios.

            Me alegro que al final hayas encontrado la solución.

            Un saludo

  2. Awesome blog! Do you have any suggstions for aspiring writers?
    I’m planning to start my own blog soon but I’m a little lost on everything.
    Would you advise starting with a free plaform
    like WordPress or go for a paid option? There are so
    many options out there that I’m completely
    confused .. Any ideas? Maany thanks!

  3. A mi no me funciona, lo modifico le añado cosas y se queda igual, tengo la version 1.7.0.2

Speak Your Mind

*