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.

La solución de artesano sería editar el código de nuestro módulo y quitar la llamada a ese javascript (algo que puede llegar a ser realmente tedioso si éste módulo lo reutilizáramos todo el tiempo).

Para resolver éste escenario, vamos a hacer uso de uno de los condicionales que podemos aplicar en el layout. En éste caso será el turno de ifconfig, que se encarga de validarse contra una key de configuración que le indiquemos.

Siguiendo con la idea de agregar una librería que podría o no estar presente, el código quedaría de la siguiente forma.

<layout version="0.1.0">
 
    ...
 
    <default>
        <reference name="head">
            <action method="addJs" ifconfig="javascript/jquery/custom"><script>jquery/jquery.js</script></action>
        </reference>
    </default>
 
    ...
 
</layout>

Para que esa key de configuración pueda ser editada, le agregamos a nuestro módulo la opción de configuración. En este caso, podría verse de la siguiente manera.

Incluyendo archivos de layout por configuración en Magento

Desde ahora, si cuando agregamos el módulo la librería que necesitamos no está siendo usada, activamos su uso mediante la configuración.

Si nos toca agregarla en un proyecto en el cual, por ejemplo, la librería ya es invocada desde el page.xml, no tendremos necesidad de modificar ningún archivo para evitar la doble instancia de la misma librería.