SlideShare une entreprise Scribd logo
1  sur  19
Télécharger pour lire hors ligne
El universo JavaScript
     en Drupal7 7
       Ramon Vilar Gavaldà
Quién soy
                                Socio fundador de Ymbra
                                Desarrollador Drupal
                                Desarrollador frontend
                                Miembro activo de la comunidad
                                drupalera:
Ramon Vilar Gavaldà              • Miembro de la junta de
http://ymbra.com/blogs/ramon        Drupal.cat
http://twitter.com/rvilar
                                 • Administrador de la traducción
http://drupal.org/user/293298       catalana de Drupal

© 2011_                                                          2
Qué es Ymbra




               http://ymbra.com/



© 2011_                            3
Índice



    Drupal 7 y JavaScript
    De qué nos sirve todo esto en el núcleo
    El objeto JS Drupal
    Cómo añadir JS a nuestro Drupal
    Formularios dependientes
    AJAX
    Buenas prácticas en nuestros desarrollos
    Conclusiones



© 2011_                                        4
Drupal 7 y JavaScript
    En Drupal 7 el número de líneas de código JS ha crecido
    exponencialmente.
    Gran número de funcionalidades JS añadidas: overlay,
    machine-name, fields, etc.
    Nuevas bibliotecas en el núcleo con extras de
    funcionalidades:
          • jQuery 1.4.4, jQuery UI 1.8.6, jQuery Cookie 1.0,
            jQuery Once 1.2, jQuery BBQ 1.2, Farbastic




© 2011_                                                         5
De qué nos sirve todo esto en el núcleo
    Sólo está para las funcionalidades implicadas o nos aporta
    algo más?
          drupal_add_library(‘system’,	
  ‘farbastic’);

    Library API: hook_library y hook_library_alter
  function	
  drupalday_library()	
  {
    $libraries	
  =	
  array();
    $libraries[‘drupalday_library’]	
  =	
  array(
       ‘title’	
  =>	
  ‘Drupal	
  Day’,
       ‘website’	
  =>	
  ‘http://drupalday.es’,
       ‘version’	
  =>	
  ‘1.0’,
       ‘js’	
  =>	
  ...,
       ‘css’	
  =>	
  ...,
       ‘dependencies’	
  =>	
  array(array(‘system’,	
  ‘ui.dialog’)),
    );
    return	
  $libraries;
  }
© 2011_                                                                  6
El objeto JS Drupal
    Aunque parezca mentira, hay mucho desconocimiento de
    este objeto global.
    No es nuevo en Drupal 7 pero sí que han cambiado
    algunas cosas. Mucha documentación en misc/drupal.js
    A tener en cuenta (en seguida lo explico):
          • Drupal.behaviors
          • Drupal.settings
          • Drupal.theme
          • Drupal.t



© 2011_                                                    7
El objeto JS Drupal	
  -­‐	
  Drupal.behaviors
    Es la forma de añadir comportamiento a una página o a
    un elemento.
(function($)	
  {
  Drupal.behaviors.drupalDay	
  =	
  {
    attach:	
  function(context,	
  settings)	
  {
      $(‘#logo’,	
  context)
        .append(‘<h2>El	
  Drupal	
  Day	
  mola	
  mogollón!</h2>’);
    }
  }
})(jQuery);


    Qué nos aporta? Funciones de attach y detach:

          Cuando se añade un fragmento HTML vía AJAX, se
          ejecutan todos los behaviors pasando el fragmento
          cómo contexto. Lo mismo pasa con los detach.
© 2011_                                                                 8
El objeto JS Drupal	
  -­‐	
  Drupal.settings
     Es normal querer pasar información de servidor a cliente
     (de PHP a JS).
     Drupal.settings nos permite hacer precisamente esto.
drupal_add_js(array(‘drupalDay’	
  =>	
  ‘DrupalDay	
  rulez’),	
  ‘setting’);

alert(Drupal.settings.drupalDay);


$variables	
  =	
  array(
   ‘drupalDay’	
  =>	
  array(
      ‘sponsors’	
  =>	
  ‘Muchas	
  gracias!’,
      ‘liders’	
  =>	
  ‘Muchas	
  gracias	
  aún	
  más!’,
   ),
);
alert(Drupal.settings.drupalDay.liders);

 © 2011_                                                                   9
El objeto JS Drupal	
  -­‐	
  Drupal.theme	
  (I)
    Atención!! El theming también ha llegado al JS!
    Todo HTML añadido a la página se debería hacer
    mediante una función de theming.
     (function($)	
  {
       Drupal.theme.prototype.slogan	
  =	
  function(text)	
  {
         return	
  ‘<h2>’	
  +	
  text	
  +	
  ‘</h2>’;
       }

       Drupal.behaviors.drupalDay	
  =	
  {
         attach:	
  function(context,	
  settings)	
  {
           $(‘#logo’,	
  context)
             .append(Drupal.theme(‘slogan’,	
  ‘Drupal	
  mola!’));
         }
       }
     })(jQuery);


© 2011_                                                               10
El objeto JS Drupal	
  -­‐	
  Drupal.theme (i II)
    Ahora en nuestro módulo/tema podemos reescribir la
    salida.
          (function($)	
  {
            Drupal.theme.slogan	
  =	
  function(text)	
  {
              return	
  ‘<p	
  id=”slogan”>’	
  +	
  text	
  +	
  ‘</p>’;
            }
          })(jQuery);




© 2011_                                                                     11
El objeto JS Drupal	
  -­‐	
  Drupal.t
    Drupal.t() funciona exactamente igual que la función
    t() de PHP
(function($)	
  {
  Drupal.theme.prototype.slogan	
  =	
  function(text)	
  {
    return	
  ‘<h2>’	
  +	
  Drupal.t(‘DrupalDay	
  es	
  @great’,	
  {‘@great’:	
  
    text})	
  +	
  ‘</h2>’;
  }
})(jQuery);


    Las variables se pueden pasar con @, ! y %; con el mismo
    significado que en PHP
    Drupal.checkPlain


© 2011_                                                                                12
Cómo añadir JS a nuestro Drupal
    Sólo a modo de repaso...
    Podemos añadir JS en un tema a través de los
    ficheros .info:
    scripts[]	
  =	
  drupalday.js


    Podemos añadir JS en un módulo con drupal_add_js():
    ficheros y JS inline
    drupal_add_js($data	
  =	
  NULL,	
  $options	
  =	
  NULL);




© 2011_                                                            13
Formularios dependientes
    En Drupal 7 Form API añade nuevas características cómo
    #states
$form[‘registration’][‘equipment’]	
  =	
  array(
   ‘#type’	
  =>	
  ‘checkboxes’,
   ‘#options’	
  =>	
  drupal_map_assoc(array(t(‘Chairs’),	
  t(‘’)PC))),
   ‘#title’	
  =>	
  t(‘What	
  do	
  you	
  need?’),
   ‘#states’	
  =>	
  array(
      ‘visible’	
  =>	
  array(
         ‘:input[name=”room”]’	
  =>	
  array(‘value’	
  =>	
  t(‘Study	
  Room’)),
      ),
   ),
);


    Si quereis más: AJAX y Conditional Fields en D7


© 2011_                                                                          14
AJAX
    En las mejoras de Form API se añade #ajax

    Se añade un gran conjunto de comandos para gestionar
    los datos añadidos vía AJAX
    ajax_command_after
    ajax_command_alert
    ajax_command_append
    ajax_command_before
    ...

    Si quereis más: AJAX y Conditional Fields en D7


© 2011_                                                15
Buenas prácticas en nuestros desarrollos (I)

    Sin Firebug no somos nadie!
    Siempre punto y coma al final de cada línea! Si no lo
    hacemos, tendremos problemas con el agregador de JS.
    Cuidado con las comas colgadas al final de arrays u
    objetos! IE nos dará algún que otro susto
    Funciones anónimas para evitar problemas de scope en
    variables.
    Sobretodo, acordaos de declarar las variables! Puede ser
    una buena práctica hacerlo siempre al inicio de la función.


© 2011_                                                     16
Buenas prácticas en nuestros desarrollos (i II)

    Es una buena práctica intentar siempre escribir behaviors
    para aprovecharnos de la gestión que hace Drupal.
    Si el JS de nuestro módulo toma cierta notoriedad,
    hagamos un objeto global y construyamos una biblioteca.
    Parece una locura pero no es tan complejo.
    Y para terminar pero no menos importante... cuidado
    con los selectores jQuery! $(‘p.foo’) mejor que $
    (‘.foo’) y $(‘#bar’) mejor que $(‘p#bar’). Ah!! Y
    pasemos siempre el contexto! $(‘p.foo’,	
  context)

    http://api.jquery.com es nuestra amiga

© 2011_                                                    17
Conclusiones
    Normalmente tendemos a menospreciar el JS y aveces es
    un cuello de botella a nivel de rendimiento en cliente.
    Cuidado con el JS que añadimos en nuestros proyectos. a
    veces es mejor picar algo a mano que empezar a añadir
    bibliotecas extra.
    Mucho nuevo JS en el núcleo. Potencia a tope!!
    La Form API + AJAX nos abre un nuevo horizonte
    Y aún falta ver lo que nos añadirán con módulos
    contribuidos...


© 2011_                                                  18
Preguntas?




             hola@ymbra.com



© 2011_                       19

Contenu connexe

Tendances

Taller de Drupal - Sesión 2
Taller de Drupal - Sesión 2Taller de Drupal - Sesión 2
Taller de Drupal - Sesión 2
SEAT, S.A.
 
Jsf Java Server Faces
Jsf   Java Server FacesJsf   Java Server Faces
Jsf Java Server Faces
cok12v
 
Presentacion Drupal Ccrtv
Presentacion Drupal CcrtvPresentacion Drupal Ccrtv
Presentacion Drupal Ccrtv
Pedro Cambra
 
Taller de Drupal - Sesion 1
Taller de Drupal -  Sesion 1Taller de Drupal -  Sesion 1
Taller de Drupal - Sesion 1
SEAT, S.A.
 
Manual programacion - java - jsp & xml
Manual   programacion - java - jsp & xmlManual   programacion - java - jsp & xml
Manual programacion - java - jsp & xml
gilhorak
 

Tendances (20)

Curso CDA: Drush CLI Drupal
Curso CDA: Drush CLI DrupalCurso CDA: Drush CLI Drupal
Curso CDA: Drush CLI Drupal
 
Semana 1 Introducción a Java
Semana 1   Introducción a JavaSemana 1   Introducción a Java
Semana 1 Introducción a Java
 
Semana 2 Configuración entorno de desarrollo
Semana 2   Configuración entorno de desarrolloSemana 2   Configuración entorno de desarrollo
Semana 2 Configuración entorno de desarrollo
 
Introducción a Drupal
Introducción a DrupalIntroducción a Drupal
Introducción a Drupal
 
Java script para desarrolladores SharePoint
Java script para desarrolladores SharePointJava script para desarrolladores SharePoint
Java script para desarrolladores SharePoint
 
Taller de Drupal - Sesión 2
Taller de Drupal - Sesión 2Taller de Drupal - Sesión 2
Taller de Drupal - Sesión 2
 
Jsf Java Server Faces
Jsf   Java Server FacesJsf   Java Server Faces
Jsf Java Server Faces
 
Programacion orientada a objetos en javascript
Programacion orientada a objetos en javascriptProgramacion orientada a objetos en javascript
Programacion orientada a objetos en javascript
 
Java desde cero
Java desde ceroJava desde cero
Java desde cero
 
Los mejores trucos y prácticas para configurar drupal
Los mejores trucos y prácticas para configurar drupalLos mejores trucos y prácticas para configurar drupal
Los mejores trucos y prácticas para configurar drupal
 
Presentacion Drupal Ccrtv
Presentacion Drupal CcrtvPresentacion Drupal Ccrtv
Presentacion Drupal Ccrtv
 
Cross development - React para desarrolladores de asp.net
Cross development - React para desarrolladores de asp.netCross development - React para desarrolladores de asp.net
Cross development - React para desarrolladores de asp.net
 
Taller de Drupal - Sesion 1
Taller de Drupal -  Sesion 1Taller de Drupal -  Sesion 1
Taller de Drupal - Sesion 1
 
Presentación Drupal
Presentación DrupalPresentación Drupal
Presentación Drupal
 
Gwt III - Avanzado
Gwt III - AvanzadoGwt III - Avanzado
Gwt III - Avanzado
 
Introduccion drupal
Introduccion drupalIntroduccion drupal
Introduccion drupal
 
Patrones de diseño I
Patrones de diseño IPatrones de diseño I
Patrones de diseño I
 
Taller de Grails
Taller de GrailsTaller de Grails
Taller de Grails
 
Manual programacion - java - jsp & xml
Manual   programacion - java - jsp & xmlManual   programacion - java - jsp & xml
Manual programacion - java - jsp & xml
 
MobileCONGalicia Introducción a Android
MobileCONGalicia Introducción a AndroidMobileCONGalicia Introducción a Android
MobileCONGalicia Introducción a Android
 

Similaire à El universo JavaScript en Drupal 7

Seminario jquery, html5 y wicket
Seminario jquery, html5 y wicketSeminario jquery, html5 y wicket
Seminario jquery, html5 y wicket
Adrià Solé Orrit
 
Presentación de zan php
Presentación de zan phpPresentación de zan php
Presentación de zan php
Carlos Zantana
 
Joomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensionesJoomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensiones
deivit86
 
El Mal Odiado Javascript
El Mal Odiado JavascriptEl Mal Odiado Javascript
El Mal Odiado Javascript
El Jota
 

Similaire à El universo JavaScript en Drupal 7 (20)

Drupal7 para desarrolladores
Drupal7 para desarrolladoresDrupal7 para desarrolladores
Drupal7 para desarrolladores
 
La magia de jquery
La magia de jqueryLa magia de jquery
La magia de jquery
 
Seminario jquery, html5 y wicket
Seminario jquery, html5 y wicketSeminario jquery, html5 y wicket
Seminario jquery, html5 y wicket
 
Presentación de zan php
Presentación de zan phpPresentación de zan php
Presentación de zan php
 
Twig y otros "themas" en Drupal 8
Twig y otros "themas" en Drupal 8Twig y otros "themas" en Drupal 8
Twig y otros "themas" en Drupal 8
 
Introducción a JQuery
Introducción a JQueryIntroducción a JQuery
Introducción a JQuery
 
Joomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensionesJoomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensiones
 
Proyectos escalables con Drupal
Proyectos escalables con DrupalProyectos escalables con Drupal
Proyectos escalables con Drupal
 
Drupal 7 a través Drupal Commerce
Drupal 7 a través Drupal CommerceDrupal 7 a través Drupal Commerce
Drupal 7 a través Drupal Commerce
 
Android Superstar - Buenas Prácticas
Android Superstar - Buenas PrácticasAndroid Superstar - Buenas Prácticas
Android Superstar - Buenas Prácticas
 
Presentacion Ruby on Rails CTIC-Cusco2007
Presentacion Ruby on Rails CTIC-Cusco2007Presentacion Ruby on Rails CTIC-Cusco2007
Presentacion Ruby on Rails CTIC-Cusco2007
 
Taller de zan php
Taller de zan phpTaller de zan php
Taller de zan php
 
Extender Jquery para crear componentes web personalizados
Extender Jquery  para crear componentes web personalizadosExtender Jquery  para crear componentes web personalizados
Extender Jquery para crear componentes web personalizados
 
Atix20
Atix20Atix20
Atix20
 
WordPress y JavaScript
WordPress y JavaScriptWordPress y JavaScript
WordPress y JavaScript
 
Guia jQuery INCES Militar - Kurt Gude
Guia jQuery INCES Militar - Kurt GudeGuia jQuery INCES Militar - Kurt Gude
Guia jQuery INCES Militar - Kurt Gude
 
Rails intro
Rails introRails intro
Rails intro
 
Introduccion a j query
Introduccion a j queryIntroduccion a j query
Introduccion a j query
 
Presentación Jornada Drupal Sevilla Febrero 2015
Presentación Jornada Drupal Sevilla Febrero 2015Presentación Jornada Drupal Sevilla Febrero 2015
Presentación Jornada Drupal Sevilla Febrero 2015
 
El Mal Odiado Javascript
El Mal Odiado JavascriptEl Mal Odiado Javascript
El Mal Odiado Javascript
 

Plus de Ymbra

Distribuciones en Drupal
Distribuciones en DrupalDistribuciones en Drupal
Distribuciones en Drupal
Ymbra
 
Drupal 7 multilingüe: internacionalització i localització de llocs web
Drupal 7 multilingüe: internacionalització i localització de llocs webDrupal 7 multilingüe: internacionalització i localització de llocs web
Drupal 7 multilingüe: internacionalització i localització de llocs web
Ymbra
 

Plus de Ymbra (10)

Migrate, una herramienta de trabajo y desarrollo
Migrate, una herramienta de trabajo y desarrolloMigrate, una herramienta de trabajo y desarrollo
Migrate, una herramienta de trabajo y desarrollo
 
Field Types API: Field, widgets y formatters
Field Types API: Field, widgets y formattersField Types API: Field, widgets y formatters
Field Types API: Field, widgets y formatters
 
Distribuciones en Drupal
Distribuciones en DrupalDistribuciones en Drupal
Distribuciones en Drupal
 
Introducció al Git
Introducció al GitIntroducció al Git
Introducció al Git
 
Views 3: Qué hay de nuevo
Views 3: Qué hay de nuevoViews 3: Qué hay de nuevo
Views 3: Qué hay de nuevo
 
ELISAVA Beta. Cas d'èxit desenvolupat per Ymbra
ELISAVA Beta. Cas d'èxit desenvolupat per YmbraELISAVA Beta. Cas d'èxit desenvolupat per Ymbra
ELISAVA Beta. Cas d'èxit desenvolupat per Ymbra
 
Drupal 7: mucho más que una nueva versión (para desarrolladores)
Drupal 7: mucho más que una nueva versión (para desarrolladores)Drupal 7: mucho más que una nueva versión (para desarrolladores)
Drupal 7: mucho más que una nueva versión (para desarrolladores)
 
Drupal 7 multilingüe: internacionalització i localització de llocs web
Drupal 7 multilingüe: internacionalització i localització de llocs webDrupal 7 multilingüe: internacionalització i localització de llocs web
Drupal 7 multilingüe: internacionalització i localització de llocs web
 
Drupal 7: mucho más que una nueva versión
Drupal 7: mucho más que una nueva versiónDrupal 7: mucho más que una nueva versión
Drupal 7: mucho más que una nueva versión
 
Desmitificant l'HTML5
Desmitificant l'HTML5Desmitificant l'HTML5
Desmitificant l'HTML5
 

Dernier

redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
nicho110
 

Dernier (12)

Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 

El universo JavaScript en Drupal 7

  • 1. El universo JavaScript en Drupal7 7 Ramon Vilar Gavaldà
  • 2. Quién soy Socio fundador de Ymbra Desarrollador Drupal Desarrollador frontend Miembro activo de la comunidad drupalera: Ramon Vilar Gavaldà • Miembro de la junta de http://ymbra.com/blogs/ramon Drupal.cat http://twitter.com/rvilar • Administrador de la traducción http://drupal.org/user/293298 catalana de Drupal © 2011_ 2
  • 3. Qué es Ymbra http://ymbra.com/ © 2011_ 3
  • 4. Índice Drupal 7 y JavaScript De qué nos sirve todo esto en el núcleo El objeto JS Drupal Cómo añadir JS a nuestro Drupal Formularios dependientes AJAX Buenas prácticas en nuestros desarrollos Conclusiones © 2011_ 4
  • 5. Drupal 7 y JavaScript En Drupal 7 el número de líneas de código JS ha crecido exponencialmente. Gran número de funcionalidades JS añadidas: overlay, machine-name, fields, etc. Nuevas bibliotecas en el núcleo con extras de funcionalidades: • jQuery 1.4.4, jQuery UI 1.8.6, jQuery Cookie 1.0, jQuery Once 1.2, jQuery BBQ 1.2, Farbastic © 2011_ 5
  • 6. De qué nos sirve todo esto en el núcleo Sólo está para las funcionalidades implicadas o nos aporta algo más? drupal_add_library(‘system’,  ‘farbastic’); Library API: hook_library y hook_library_alter function  drupalday_library()  { $libraries  =  array(); $libraries[‘drupalday_library’]  =  array( ‘title’  =>  ‘Drupal  Day’, ‘website’  =>  ‘http://drupalday.es’, ‘version’  =>  ‘1.0’, ‘js’  =>  ..., ‘css’  =>  ..., ‘dependencies’  =>  array(array(‘system’,  ‘ui.dialog’)), ); return  $libraries; } © 2011_ 6
  • 7. El objeto JS Drupal Aunque parezca mentira, hay mucho desconocimiento de este objeto global. No es nuevo en Drupal 7 pero sí que han cambiado algunas cosas. Mucha documentación en misc/drupal.js A tener en cuenta (en seguida lo explico): • Drupal.behaviors • Drupal.settings • Drupal.theme • Drupal.t © 2011_ 7
  • 8. El objeto JS Drupal  -­‐  Drupal.behaviors Es la forma de añadir comportamiento a una página o a un elemento. (function($)  { Drupal.behaviors.drupalDay  =  { attach:  function(context,  settings)  { $(‘#logo’,  context) .append(‘<h2>El  Drupal  Day  mola  mogollón!</h2>’); } } })(jQuery); Qué nos aporta? Funciones de attach y detach: Cuando se añade un fragmento HTML vía AJAX, se ejecutan todos los behaviors pasando el fragmento cómo contexto. Lo mismo pasa con los detach. © 2011_ 8
  • 9. El objeto JS Drupal  -­‐  Drupal.settings Es normal querer pasar información de servidor a cliente (de PHP a JS). Drupal.settings nos permite hacer precisamente esto. drupal_add_js(array(‘drupalDay’  =>  ‘DrupalDay  rulez’),  ‘setting’); alert(Drupal.settings.drupalDay); $variables  =  array( ‘drupalDay’  =>  array( ‘sponsors’  =>  ‘Muchas  gracias!’, ‘liders’  =>  ‘Muchas  gracias  aún  más!’, ), ); alert(Drupal.settings.drupalDay.liders); © 2011_ 9
  • 10. El objeto JS Drupal  -­‐  Drupal.theme  (I) Atención!! El theming también ha llegado al JS! Todo HTML añadido a la página se debería hacer mediante una función de theming. (function($)  { Drupal.theme.prototype.slogan  =  function(text)  { return  ‘<h2>’  +  text  +  ‘</h2>’; } Drupal.behaviors.drupalDay  =  { attach:  function(context,  settings)  { $(‘#logo’,  context) .append(Drupal.theme(‘slogan’,  ‘Drupal  mola!’)); } } })(jQuery); © 2011_ 10
  • 11. El objeto JS Drupal  -­‐  Drupal.theme (i II) Ahora en nuestro módulo/tema podemos reescribir la salida. (function($)  { Drupal.theme.slogan  =  function(text)  { return  ‘<p  id=”slogan”>’  +  text  +  ‘</p>’; } })(jQuery); © 2011_ 11
  • 12. El objeto JS Drupal  -­‐  Drupal.t Drupal.t() funciona exactamente igual que la función t() de PHP (function($)  { Drupal.theme.prototype.slogan  =  function(text)  { return  ‘<h2>’  +  Drupal.t(‘DrupalDay  es  @great’,  {‘@great’:   text})  +  ‘</h2>’; } })(jQuery); Las variables se pueden pasar con @, ! y %; con el mismo significado que en PHP Drupal.checkPlain © 2011_ 12
  • 13. Cómo añadir JS a nuestro Drupal Sólo a modo de repaso... Podemos añadir JS en un tema a través de los ficheros .info: scripts[]  =  drupalday.js Podemos añadir JS en un módulo con drupal_add_js(): ficheros y JS inline drupal_add_js($data  =  NULL,  $options  =  NULL); © 2011_ 13
  • 14. Formularios dependientes En Drupal 7 Form API añade nuevas características cómo #states $form[‘registration’][‘equipment’]  =  array( ‘#type’  =>  ‘checkboxes’, ‘#options’  =>  drupal_map_assoc(array(t(‘Chairs’),  t(‘’)PC))), ‘#title’  =>  t(‘What  do  you  need?’), ‘#states’  =>  array( ‘visible’  =>  array( ‘:input[name=”room”]’  =>  array(‘value’  =>  t(‘Study  Room’)), ), ), ); Si quereis más: AJAX y Conditional Fields en D7 © 2011_ 14
  • 15. AJAX En las mejoras de Form API se añade #ajax Se añade un gran conjunto de comandos para gestionar los datos añadidos vía AJAX ajax_command_after ajax_command_alert ajax_command_append ajax_command_before ... Si quereis más: AJAX y Conditional Fields en D7 © 2011_ 15
  • 16. Buenas prácticas en nuestros desarrollos (I) Sin Firebug no somos nadie! Siempre punto y coma al final de cada línea! Si no lo hacemos, tendremos problemas con el agregador de JS. Cuidado con las comas colgadas al final de arrays u objetos! IE nos dará algún que otro susto Funciones anónimas para evitar problemas de scope en variables. Sobretodo, acordaos de declarar las variables! Puede ser una buena práctica hacerlo siempre al inicio de la función. © 2011_ 16
  • 17. Buenas prácticas en nuestros desarrollos (i II) Es una buena práctica intentar siempre escribir behaviors para aprovecharnos de la gestión que hace Drupal. Si el JS de nuestro módulo toma cierta notoriedad, hagamos un objeto global y construyamos una biblioteca. Parece una locura pero no es tan complejo. Y para terminar pero no menos importante... cuidado con los selectores jQuery! $(‘p.foo’) mejor que $ (‘.foo’) y $(‘#bar’) mejor que $(‘p#bar’). Ah!! Y pasemos siempre el contexto! $(‘p.foo’,  context) http://api.jquery.com es nuestra amiga © 2011_ 17
  • 18. Conclusiones Normalmente tendemos a menospreciar el JS y aveces es un cuello de botella a nivel de rendimiento en cliente. Cuidado con el JS que añadimos en nuestros proyectos. a veces es mejor picar algo a mano que empezar a añadir bibliotecas extra. Mucho nuevo JS en el núcleo. Potencia a tope!! La Form API + AJAX nos abre un nuevo horizonte Y aún falta ver lo que nos añadirán con módulos contribuidos... © 2011_ 18
  • 19. Preguntas? hola@ymbra.com © 2011_ 19