Mejorando el SEO de nuestros módulos en Magento

Hoy vamos a ver dos pequeños trucos para lograr una mejor presentación de nuestros módulos.

El primero está relacionado con el SEO y el segundo con la navegación.

Para no perder la costumbre, vamos a partir de un módulo hecho por el Generador de Módulos. Además, para seguir manteniendo la línea, el módulo ha de llamarse Dc_Test.

Si intentamos acceder al controlador de nuestro módulo en el frontend, vamos a encontrarnos con lo siguiente.

Si vemos el código fuente, vamos a notar que hay 3 tags que no se están usando correctamente: title, description y keywords.

La idea del tip de hoy es aprovechar algunas funcionalidades de Magento para darle a nuestro módulo un poco de SEO haciendo uso de los tags html y del breadcrumb.

Continue reading

Agregar validaciones javascript en Magento de forma no obstrusiva

Pequeño tip en pro de seguir con las buenas prácticas.

Hace no mucho tiempo me tocó hacer una personalización en la cual el requerimiento pedía agregar una regla adicional de validación para ciertos campos del checkout.

Lo que vamos a a ver es cómo agregar reglas propias de validación haciendo uso de la clase Validation. Por supuesto, la idea es no tocar el código original agregando código en js/prototype/validation.js o dentro de un phtml (como todavía seguimos viendo incluso en extensiones pagas).

Para el ejemplo vamos a necesitar 3 archivos.

El escenario con el cual voy a trabajar será el siguiente: “Agregar una nueva validación Javascript a ciertos campos del formulario del checkout sin por esto crear un nuevo módulo” (más adelante voy a volver sobre este punto).

Lo primero que vamos a hacer es crear nuestra función javascript de validación. Dado que la regla en si misma va más allá del skin, voy a crear el archivo dentro del directorio js. En mi caso, el archivo será /js/dc/validacion.js.

Continue reading

Configuraciones dependientes en Magento

Normalmente, cuando creamos un módulo y le agregamos opciones de configuración, obtenemos un formulario, al menos, como el siguiente.

Está claro, el ejemplo es de lo más básico. Contamos con varios tipos de campos que nos permiten manejarnos con cierta flexibilidad al momento de definir nuestras configuraciones.

Dentro de esas posibilidades existe una opción (que no suele verse muy seguido) que nos permite indicar que si un campo cambia de valor, nos muestre (o no) otros campos.

Guiándonos por la primera imagen, la lógica sería la siguiente: si el campo “Condición” equivale a No, mostramos el campo “Valor A”.

Y ahora, si el campo “Condición” cambia a Si, ocultamos el campo “Valor A” y mostramos el campo “Valor B”.

Lograr el comportamiento es bastante sencillo (no, no es necesario enviar otro cohete a luna).

Continue reading

Cómo agregar atributos a una categoría en Magento

Entre las tantas personalizaciones que normalmente se hacen en un tienda, es posible que necesitemos agregar atributos a las categorías.

Dado que Magento no ofrece la posibilidad de gestionar los atributos de ésta entidad desde el backend, vamos a ver cómo agregar uno nuevo a través de nuestros módulos.

En éste caso, vamos a usar un módulo (como siempre: Dc_Test) para agregar el atributo.

Dc_Test va a tener sólo tres archivos. El primero, es la configuración del módulo y estará ubicado en /app/code/local/Dc/Test/etc/config.xml.

< ?xml version="1.0"?>
<config>
   <modules>
      <dc_test>
         <version>0.1.0</version>
      </dc_test>
   </modules>
   <global>
      <resources>
         <test_setup>
            <setup>
               <module>Dc_Test</module>
               <class>Mage_Catalog_Model_Resource_Eav_Mysql4_Setup</class>
            </setup>
            <connection>
               <use>core_setup</use>
            </connection>
         </test_setup>
      </resources>
   </global>
</config>

Continue reading

Cómo modificar valores de configuración vía código en Magento

En algunos escenarios es posible que ante ciertas acciones o resultados, debamos modificar algún valor que se encuentra en la configuración general de Magento.

Para modificar un valor de la configuración general de forma programática (si, suena rara la palabra al traducirla) sólo necesitamos 3 líneas de código, la clave que queremos actualizar y el nuevo valor.

Para el ejemplo, vamos a poner la tienda en modo demo.

$_new_value = '1';
$model = new Mage_Core_Model_Config();
$model->saveConfig('design/head/demonotice', $_new_value, 'default');
Mage::getConfig()->cleanCache();

De ésta forma, con éste sencillo tip, podemos modificar comportamientos generales de la tienda.

Cómo hacer un módulo con soporte multistore en Magento

Una de las características que no necesita presentación en Magento es su capacidad de ser multistore.

Si estuviéramos armando un módulo para mostrar contenido en el frontend de una tienda, deberíamos tener en cuenta ésta característica. (Por más obvio que suena, aún hoy siguen apareciendo módulos que no acusan recibo de esto)

Agregar ésta posibilidad a nuestro módulo es algo realmente sencillo. Para el ejemplo, vas a seguir jugando con el ya ultra modificado módulo Dc_Test.

Una vez que hayamos activado el módulo (como siempre, el creador de Módulos es de gran ayuda), veríamos una grilla y un formulario como los siguientes.

Ahora lo que vamos a hacer es agregar la posibilidad de administrar nuestros registros por store view (ya sea que lo quieran usar por idioma o por tienda).

Continue reading

Cómo obtener la versión de un módulo en Magento

Podría darse el caso en el cual necesitemos obtener información de un módulo para tomar ejecutar ciertas acciones.

Definitivamente es un escenario pensado para cuando creamos extensiones. Para el caso de un desarrollo completo, nuestro control del código y de la tienda es total.

Supongamos entonces que tenemos al ya ultra trillado módulo Dc_Test. Vamos a considerar que nuestro módulo se encarga de interactuar o incluso modificar algún comportamiento del módulo Mage_Newsletter.

No recuerdo ahora las versiones, pero si que tuve que lidiar alguna vez con modelos de ese módulo, que de una versión a otra habían sido eliminados.

La solución ante ese escenario sería reescribir el código de forma tal que funcione de la misma forma sin importar la versión, pero ¿y si existiera un caso en el cual esto no fuera posible?.

Si llegáramos a éste punto, lo que podemos hacer es validar la versión del módulo con el que estamos trabajando. De ésta forma podríamos invocar una acción u otra según las versiones, puntualmente, conflictivas.

Continue reading

Cómo crear una clase para el Shell en Magento

Cuando pensamos en módulos para Magento nos quedamos, normalmente, con agregar funcionalidad para el frontend o para el backend.

Creo que cuando pensamos en un módulo debemos imaginarnos los cuatro posibles entornos para su aplicación. Por los cuatro entornos me refiero:

  • Frontend o tienda propiamente dicha.
  • Backend o administración.
  • API.
  • Consola.

Si bien ésta división puede parecer arbitraria, éstas serán las posibles puertas de entrada que normalmente utilicemos (dependiendo sobre si nos toca ser usuario, administrador, desarrollador o el encargado del mantenimiento; o todo).

Claro está que no todos los módulos requieren funcionalidad en los cuatro entornos, pero en muchos casos deberíamos cuidar las formas y proveer de herramientas para cada caso.

En mi caso, desde hace ya un buen tiempo, me ha tocado desarrollar unas cuantas integraciones que importan o exportan información. Normalmente, con procesos manejados a través del Cron de Magento.

Uno de las situaciones con las que nos vamos a encontrar cuando trabajemos con módulos que funcionan con un cronjob, es la de la prueba de ejecución. Está claro que podemos programar la tarea para que se ejecute y esperar a que suceda. Luego de la quinta prueba es muy probable que empecemos a perder un poco la paciencia.

Lo que vamos a ver hoy es cómo crear una clase para el shell respetando el estilo de la plataforma. Si bien podemos hacerlo por fuera de éstos lineamientos, vamos a tratar de ser lo más respetuosos posible. La idea es lograr tener siempre extensiones prolijas para que puedan ser reutilizadas y no nos generen conflictos con otras extensiones (o al menos que esos casos sean los menos posibles).

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