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

Cómo agregar un archivo CSS por layout en Magento

Siguiendo un poco con el tema de las buenas prácticas en cuanto a maquetación, módulos y esas yerbas; vamos a ver cómo incluir un nuevo archivo css dentro de nuestro template.

Básicamente tenemos dos formas (algunas más en realidad si queremos hacer las cosas poco prolijas).

La primera y más extendida, sería tomar page.xml de nuestro layout y repetir, por ejemplo la siguiente línea.

<action method="addCss"><stylesheet>css/mi_css.css</stylesheet></action>

Le cambiamos el nombre del archivo (que deberá estar ubicado en el path correcto) y con eso vamos a tener nuestro archivo css listo para ser leído.

La segunda forma de hacerlo, que nos sirve para nuestras extensiones, es hacer esto mismo pero desde la definición de layout del módulo.

Esto nos permitirá que sólo en los casos en los que el módulo se instancie, o incluso sólo en una sección, se agregue nuestro archivo css.

Dado que el archivo css ya lo tenemos ubicado dentro de las carpeta de skin correspondiente, vamos a agregar la definición a nuestro módulo.

Vamos a suponer que el módulo se llama Noticias. Normalmente, encontraríamos dentro de la carpeta de layout del frontend un archivo noticias.xml.

Dentro de ese archivo tenemos que agregar las siguientes líneas.

<?xml version="1.0"?>
<layout version="0.1.0">
 
    ...
 
    <default>
        <reference name="head">
            <action method="addCss">
                <name>noticias.css</name>
            </action>
        </reference>
    </default>
 
    ...
 
</layout>

De ésta forma le decimos que tome el bloque “head” (que se encuentra definido en page.xml) y agregue un archivo css. Luego se le pasa el path al archivo que puede ser cualquiera dentro de la carpeta de skin the nuestro theme.

Sobreescribir templates en Magento desde el layout

Una de las grandes bondades (y de los grandes problemas en el comienzo de la curva de aprendizaje) es el manejo de los templates a través de las definiciones xml del layout.

Normalmente, cuando trabajamos con un skin desde el comienzo, más allá de las líneas de diseño que puedan existir, tenemos bastante libertad de elección en la forma en que se va estructurar ese theme.

Ahora bien, cambia radicalmente el escenario cuando nos dedicamos a crear extensiones o cuando ciertas customizaciones que hayamos desarrollado se tornan parte de la batería de módulos y ajustes que usamos en cada proyecto.

Si para cada caso debiéramos estar modificando los archivos phtml, los xml, el css… bueno, sería bastante molesto y estaríamos dejando de tener código reutilizable.

A través de las definiciones de layout podemos aplicar cambios al momento de renderear el template sin hacer modificaciones a los archivos que ya se estén usando. En realidad, hay unas cuantas cosas que pueden hacerse, pero dada la cantidad de funciones con las que contamos para el manejo del layout, sólo me voy a centrar en el reemplazo de llamadas a los phtml.

Como ejemplo, vamos a tomar el selector de moneda. Vamos a suponer también que tenemos definido el update de layout en el módulo.

Continue reading

Variable media en las plantillas de email de Magento

Uno de los pocos cambios de la nueva versión de la plataforma, consiste en el agregado de la variable “media” para la composición de los templates de email.

Su uso es absolutamente sencillo.

Al igual que cuando invocamos {{skin url=”"}} para imprimir algún contenido de un skin dado, la variable media utiliza el mismo parámetro.

<img src="{{media url="imagen.jpg"}}" alt="Magento" border="0"/></a>

Esto hará que se busque la imagen dentro de la carpeta media. Si usáramos subcarpetas, deberemos escribir el path partiendo siempre desde dicha carpeta.

Si bien puede parecer una pavada la inclusión del template, su uso puede entenderse en el caso de campañas de promoción, en las cuales podríamos utilizar (es sólo un ejemplo para graficar) el mismo banner que tenemos en la home de la tienda, en el cuerpo del mail.

Eligiendo el Skin para las plantillas de Email en Magento

Una de las virtudes de Magento, es que a nivel funcional tiene cubiertos tantos temas que pareciera que uno no necesita nada más.

Una de sus contras, es que al momento de necesitar una mínima personalización, uno puede terminar sintiéndose perseguido por una multitud de líneas de código corriendo en círculos.

Hoy vamos a ver un pequeño truco, detalle, …… (complete la línea punteada con la palabra que mejor le resulte); que sirve para indicarle a la plantilla, de qué skin tomará las imagenes que se mostrarán en el caso de las plantillas html.

Si ya les tocó tener que personalizar esas plantillas, es probable que hayan visto dentro del código que imprime el logotipo, una línea parecida a la siguiente.

<td valign="top"><a href="{{store url=""}}"><img src="{{skin url="images/logo_email.gif" _area='frontend'}}" alt="Magento"  style="margin-bottom:10px;" border="0"/></a></td>

Un repaso rápido de las variables usadas:

  • {{store url=”"}} es el base_url de la tienda. Por ejemplo: http://www.mitienda.com.ar/
  • {{skin url=”…”}} transforma el source de la imagen a http://www.mitienda.com.ar/skin/frontend/default/default/ y le concatena images/logo_email.gif. Nos quedaría la siguiente url: http://www.mitienda.com.ar/skin/frontend/default/default/images/logo_email.gif.
  • {{skin url}} aplica una directiva: _area=’frontend’. Como vimos en el punto anterior, la imagen es tomada desde …/skin/frontend/. Si el valor de _area lo cambiamos por _area=’adminhtml’, el template buscará la imagen dentro del contenido del skin default/default del backend.

Hasta acá tenemos lo que a simple vista se ve y más o menos podíamos suponer.

Continue reading