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

Magento 1.6.0.0-rc2 (a pocos pasos de la versión estable)

La versión 1.6.0.0-rc2 de Magento se hizo presente y, así como en la versión anterior, nos permite pensar que ya no veremos grandes cambios en cuanto a la funcionalidad (aunque de sólo pensar de la cantidad de trabajo que implica proveer soporte para múltiples bases de datos, es más que entendible).

Hasta éste momento, la lista de cambios y mejoras que veríamos en la versión estable incluiría, entre otros, los siguientes puntos.

  • Precio mínimo anunciado (MAP).
  • Carrito de Compras persistente.
  • Versión 21 de XmlConnect.
  • Mejoras para las Order Payment Action en PayPal Express Checkout.
  • Actualización de Prototype a 1.7.
  • Se quitó deprecation.js por incompatibilidad con Prototype 1.7.
  • Revisión de la lógica de modelos para tener soporte para múltiples motores de base de datos.
  • Opción de SKU dinámico para los productos configurables.
  • Se quitó Google Base.

Desde lo técnico, el punto que personalmente más me interesa es el del soporte múltiple para bases de datos.

Más allá de querer conocer con qué otros RDBM será compatible, la primera pregunta que surge para los que desarrollamos sobre la plataforma está relacionada con la compatibilidad.

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.

Magento 1.6.0.0-rc1 (un amiguito para Mysql)

Con el lanzamiento de la versión 1.6.0.0-rc1 de Magento, comenzamos a acercarnos a lo que será la versión definitiva de la nueva etapa de la plataforma.

Los puntos destacables, los highlights, siguen siendo los mismos que en la versión anterior, pero si vamos a encontrar una serie de mejoras y cambios.

  • Versión 21 de XmlConnect.
  • Mejoras para las Order Payment Action en PayPal Express Checkout.
  • Se quitó deprecation.js por incompatibilidad con Prototype 1.7.
  • Revisión de la lógica de modelos para tener soporte para múltiples motores de base de datos.

En ésta oportunidad, se trata de una versión que apunta más que nada a corregir y mejorar código.

La lista completa de cambios se encuentra, como siempre, en el changelog de la versión.

Magento 1.6.0.0-beta1 (persistencia para todos)

Momento de retomar las reviews de las últimas releases. Hace casi dos meses, el 15 de junio, se hizo pública la versión 1.6.0.0-beta 1 de Magento.

La lista de los cambios que se vinieron desarrollando hasta ésta versión se compone por:

  • Precio mínimo anunciado (MAP)
  • Carrito de Compras persistente.

Por supuesto, la integración con PayPal recibe algún que otro ajuste también. A nivel atributos veremos algunos nuevos para los productos: country_of_manufacture y los correspondientes al MAP.

Vamos a encontrar nuevas opciones de configuración para las funcionalidades del Carrito Persistente y de las opciones MAP.

Para los que prefieran seguir de cerca los cambios y las correcciones de bugs, pueden ver el changelog. Mientras tanto, a seguir revisando el código y comparando los cambios entre cada versión.

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

Magento 1.6.0.0-alpha1 (versionando por versionar)

Con una cantidad importante de correcciones y cambios bastante profundos, el jueves 26 de mayo se publicó la versión 1.6.0.0-alpha1 de Magento.

A nivel mejoras, vamos a encontrarnos con opciones para SKU dinámico para productos configurables, cambios para Moneybookers y actualización de la librería Prototype a 1.7.

A nivel código, dados los fixes que se han hecho, son demasiados los cambios que vamos a ver.

En cuanto a lo inmediatamente visible, el primer cambio lo vamos a ver al instalar, ya que en la configuración de base de datos debemos elegir el tipo, si bien por el momento tenemos una única opción.

Como bien dice el changelog, Google Base se ha quitado. Tampoco vamos a encontrar las opciones de The Find (al menos no en ésta release), si bien el módulo está en el código.

Para la configuración HTTPS tenemos un nuevo parámatro.

Ya casi como un copy & paste, ésta versión NO debe ponerse productiva.

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

Magento 1.5.1.0 (sin sorpresas importantes hasta al versión 2)

Otra versión que reviso (minuciosamente) tarde. El 23 de abril se publicó la versión 1.5.1.0 de Magento. (Me sigue llamando la atención lo poco anunciadas de las últimas versiones.)

El changelog no es más que la suma de los cambos mostrados en la versión beta y la rc. Sólo para hacer memoria, los cambios destacados son:

  • Actualización de Magento Mobile a las versión 20.
  • Se agregan excepciones para los Mensajes de Regalo en la API.
  • Mensajes de Regalo para el Carrito.
  • Implementada compatibilidad WS-I para la API.
  • Se remplaza el uso de Varien_File_Uploader por Mage_Core_Model_File_Uploader.
  • Ha vuelto el uso de almacenamiento alternativo.

Revisando el código se ven ajustes al módulo de PayPal, al de Impuestos y XmlConnect, entre otros.

Si es que ya no la están usando, es condición probar la versión en un entorno no productivo antes de dar el salto en producción.

En mi caso, hace ya poco más de una semana que la estoy usando para un proyecto nuevo y no parece haber problemas (por el momento).

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