Extendiendo la configuración gráfica del cron en Magento

Para evitar tener que lidiar con la configuración por xml, en Magento podemos crear la configuración gráfica para los cron jobs de nuestros módulos, de manera que estamos dando mayor flexibilidad al usuario y nos evitamos riesgos que podrían ocasionarse por una mala edición de los archivos.

Normalmente las opciones que nos ofrece la configuración suelen ser suficiente.

En otros casos, es posible que no nos alcance con sólo poder configurar una ejecución diaria, semanal o mensual. En éste esquema, nos estamos perdiendo la posibilidad de configurar la ejecución con repetición por horas o por minutos.

Para poder obtener esas opciones vamos a necesitar crear dos modelos para nuestro módulo, que serán los encargados de brindarnos esas nuevas posibilidades (y de paso vamos a arreglar otras que no funcionan desde la implementación original).

Continue reading

Cómo modificar los botones de la grilla en un módulo de Magento

Cuando utilizamos el generador automático de modulos, nuestra grilla viene un botón para agregar nuevos registros.

En algunas oportunidades, posiblemente necesitemos hacer algunos cambios, ya sea agregando acciones o quitando las que obtenemos por defecto.

Para comenzar, tenemos que identificar la clase que se encarga de definir dicha sección. Suponiendo que el módulo se llama Dc_Test, tenemos que buscar el siguiente archivo: /app/code/local/Dc/Test/Block/Adminhtml/Test.php.

Lo que vamos a ver en el archivo es lo siguiente:

class Dc_Test_Block_Adminhtml_Test extends Mage_Adminhtml_Block_Widget_Grid_Container {
 
    public function __construct()     {
        $this->_controller = 'adminhtml_test';
        $this->_blockGroup = 'test';
        $this->_headerText = Mage::helper('test')->__('Item Manager');
        $this->_addButtonLabel = Mage::helper('test')->__('Add Item');
        parent::__construct();
    }
 
}

Continue reading

Agregar columnas a la grilla de Productos en Magento

Una pequeña pero útil customización que suelen pedirme es la de agregar más información en la grilla de productos y, en otros casos, en la grilla de productos de las categorías. La idea es proveer de mayor cantidad de filtros según la necesidad de cada catalogación.

La grilla de productos, por defecto, tiene éstas columnas.

Si bien hay varios tipos de filtros, los que suelo usar en éstas modificaciones son los campos de texto y los dropdown.

Por ejemplo, para agregar la columna Descripción a la grilla, y que funcione como filtro, debemos realizar el siguiente cambio en el archivo /app/code/core/Mage/Adminhtml/Block/Catalog/Product/Grid.php.

(En realidad, modificamos el archivo del Core sólo para el ejemplo. Lo que hay que hacer es aplicar una reescritura del bloque).

Continue reading

Ajax en las grillas de nuestros módulos Magento

Por defecto, las grillas que podemos armar para el backend, utilizando los elementos que nos provee la plataforma, nos permiten realizar distintas acciones (buscar, ordenar, etc) a través de un post y recargando por completo la página.

Como siempre, tomo como punto de partida o módulo de ejemplo, el que podemos armar utilizando el creador de módulos de Magento. Para el ejemplo, el nombre del módulo no puede ser otro que Dc_Test.

Volviendo sobre el tema de las acciones de la grilla, vamos a tomar una grilla generada por el módulo y vamos a agregar pequeñas modificaciones para tener funcionalidad ajax.

Para lograrlo, sólo necesitamos modificar dos archivos y tan sólo agregar algunas líneas de código.

Continue reading

Incluir archivos JS por layout según configuración en Magento

Ya hemos visto como sobreescribir templates y cómo agregar archivos css de forma modular.

Siguiendo con la idea de armar módulos que podamos reutilizar, vamos a ver cómo agregar archivos javascript pero sólo si hemos configurado desde el backend su inclusión.

Si antes aplicamos el método addCss, en ésta oportunidad tenemos dos formas de llamar a un archivo js.

El código a usar, si nuestro archivo js debe incluirse cada vez que se instancie nuestro módulo, sería el siguiente si es que el archivo se encuentra en la carpeta /skin.

<layout version="0.1.0">
 
    ...
 
    <default>
        <reference name="head">
            <action method="addItem"><type>skin_js</type><name>js/archivo.js</name></action>
        </reference>
    </default>
 
    ...
 
</layout>

Y de ésta otra forma lo hacemos si es que estamos agregando una librería ubicada en /js.

<layout version="0.1.0">
 
    ...
 
    <default>
        <reference name="head">
            <action method="addJs"><script>carpeta/archivo.js</script></action>
        </reference>
    </default>
 
    ...
 
</layout>

Supongamos ahora que armamos un módulo que requiere de una librería (para mi ejemplo y por preferencia, pensemos que es jQuery), pero que siendo la nuestra una extensión, podría pasarnos que al agregarla a un proyecto, jQuery ya se esté usando.

Continue reading