Hero

Como agregar archivos javascript en una página especifica con Drupal 7

Febrero 04, 2013

kenneth
jQuery
Drupal

En nuestros modulos personalizados en ciertas ocaciones debemos agregar archivos javascript para crear una caracteristica en particular. Ahora bien debemos indicarle al modulo que cargue dicho fichero y esto lo podemos conseguir definiendolo en el archivo *.info de nuestro modulo personalizado, como por ejemplo:

<pre title="Archivo modulo_personalizado.info">; $Id$
name = "Modulo personalizado"
description = "Descripcion de mi modulo personalizado."
package = Personalizado
core = 7.x

files[] = modulo_personalizado.js

O de igual forma podemos cargarlo implementando el hook_init, de la siguiente manera:

<pre title="Implementando Hook_init()">function modulo_personalizado_init(){
 drupal_add_js(drupal_get_path('module', 'modulo_personalizado') . '/modulo_personalizado.js');
}

El inconveniente es que este archivo se nos cargara en todas las paginas del proyecto. Ahora si lo que necesitamos es cargarlo en una pagina en particular, por ejemplo en las paginas administrativas para edicion de nodos para un tipo de nodo especifico, para esta tarea podriamos usar expresiones regulares y validar el tipo del nodo actual. Podriamo emplear un codigo similar al siguiente:

<pre title="Cargar archivo javascript - hook_init()">function modulo_personalizado_init(){
  $current_path = current_path();
  $node = menu_get_object();

  if (drupal_match_path($current_path, "node/*/edit") && (isset($node) && is_object($node) && $node->type == 'MI_TIPO_CONTENIDO')) {
    drupal_add_js(drupal_get_path('module', 'modulo_personalizado') . '/modulo_personalizado.js');
  }
}

El detalle de esta posible solucion, es que se ve penalizado el rendimiento puesto que el hook_init() se ejecutar para todas las peticiones al servidor incluyendo las llamadas AJAX, entonces lo recomendable en estos casos seria utilizar el #attached la cual nos permite cargar archivos javascript cuando se esta contruyendo el formulario, implementando el hook_form_FORM_ID_alter, en la linea #1 podemos ver el ID del formulario, en el cual podemos estar seguro que se adjuntara para los formulario del tipo de contenido que deseamos, de la siguiente manera:

<pre title="Cargar archivo javascript - hook_form_FORM_ID_alter()">// $form_id = 'MI_TIPO_CONTENIDO_node_form';

function modulo_personalizado_form_MI_TIPO_CONTENIDO_node_form_alter(&$form, &$form_state) {
  $form['#attached']['js'] = array(
    drupal_add_js(drupal_get_path('module', 'modulo_personalizado') . '/modulo_personalizado.js'),
  );
}

Espero que esto les sea de mucha ayuda,

Recibe consejos y oportunidades de trabajo 100% remotas y en dólares de weKnow Inc.