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

Introducción a Drupal
Introducción a DrupalIntroducción a Drupal
Introducción a DrupalKeopx
 
Java script para desarrolladores SharePoint
Java script para desarrolladores SharePointJava script para desarrolladores SharePoint
Java script para desarrolladores SharePointAdrian Diaz Cervera
 
Taller de Drupal - Sesión 2
Taller de Drupal - Sesión 2Taller de Drupal - Sesión 2
Taller de Drupal - Sesión 2SEAT, S.A.
 
Jsf Java Server Faces
Jsf   Java Server FacesJsf   Java Server Faces
Jsf Java Server Facescok12v
 
Programacion orientada a objetos en javascript
Programacion orientada a objetos en javascriptProgramacion orientada a objetos en javascript
Programacion orientada a objetos en javascriptRobert Moreira
 
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 drupalSiteGround España
 
Presentacion Drupal Ccrtv
Presentacion Drupal CcrtvPresentacion Drupal Ccrtv
Presentacion Drupal CcrtvPedro Cambra
 
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.netAlberto Diaz Martin
 
Taller de Drupal - Sesion 1
Taller de Drupal -  Sesion 1Taller de Drupal -  Sesion 1
Taller de Drupal - Sesion 1SEAT, S.A.
 
Presentación Drupal
Presentación DrupalPresentación Drupal
Presentación DrupalMedio y forma
 
Patrones de diseño I
Patrones de diseño IPatrones de diseño I
Patrones de diseño Ijjegonzalezf
 
Manual programacion - java - jsp & xml
Manual   programacion - java - jsp & xmlManual   programacion - java - jsp & xml
Manual programacion - java - jsp & xmlgilhorak
 
MobileCONGalicia Introducción a Android
MobileCONGalicia Introducción a AndroidMobileCONGalicia Introducción a Android
MobileCONGalicia Introducción a AndroidAlberto Ruibal
 

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

Drupal7 para desarrolladores
Drupal7 para desarrolladoresDrupal7 para desarrolladores
Drupal7 para desarrolladoresPedro Cambra
 
La magia de jquery
La magia de jqueryLa magia de jquery
La magia de jqueryAngelDX
 
Seminario jquery, html5 y wicket
Seminario jquery, html5 y wicketSeminario jquery, html5 y wicket
Seminario jquery, html5 y wicketAdrià Solé Orrit
 
Presentación de zan php
Presentación de zan phpPresentación de zan php
Presentación de zan phpCarlos Zantana
 
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 8Pakman Lh
 
Introducción a JQuery
Introducción a JQueryIntroducción a JQuery
Introducción a JQueryContinuum
 
Joomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensionesJoomladay 2008 Madrid - desarrollo de extensiones
Joomladay 2008 Madrid - desarrollo de extensionesdeivit86
 
Proyectos escalables con Drupal
Proyectos escalables con DrupalProyectos escalables con Drupal
Proyectos escalables con DrupalPablo Cerda
 
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 CommercePedro Cambra
 
Presentacion Ruby on Rails CTIC-Cusco2007
Presentacion Ruby on Rails CTIC-Cusco2007Presentacion Ruby on Rails CTIC-Cusco2007
Presentacion Ruby on Rails CTIC-Cusco2007JuancaPompilla
 
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 personalizadosHéctor Curbelo Barrios
 
Introduccion a j query
Introduccion a j queryIntroduccion a j query
Introduccion a j queryPablo Viteri
 
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 2015Javier Prada Oliva
 
El Mal Odiado Javascript
El Mal Odiado JavascriptEl Mal Odiado Javascript
El Mal Odiado JavascriptEl 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

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 desarrolloYmbra
 
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 formattersYmbra
 
Distribuciones en Drupal
Distribuciones en DrupalDistribuciones en Drupal
Distribuciones en DrupalYmbra
 
Introducció al Git
Introducció al GitIntroducció al Git
Introducció al GitYmbra
 
Views 3: Qué hay de nuevo
Views 3: Qué hay de nuevoViews 3: Qué hay de nuevo
Views 3: Qué hay de nuevoYmbra
 
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 YmbraYmbra
 
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)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 webYmbra
 
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ónYmbra
 
Desmitificant l'HTML5
Desmitificant l'HTML5Desmitificant l'HTML5
Desmitificant l'HTML5Ymbra
 

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

La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfjeondanny1997
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúCEFERINO DELGADO FLORES
 
Viguetas Pretensadas en concreto armado
Viguetas Pretensadas  en concreto armadoViguetas Pretensadas  en concreto armado
Viguetas Pretensadas en concreto armadob7fwtwtfxf
 
La electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdfLa electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdfcristianrb0324
 
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024u20211198540
 
Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...
Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...
Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...Marketing BRANDING
 
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docxPLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docxhasbleidit
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptx
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptxLINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptx
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptxkimontey
 
Herramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdfHerramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdfKarinaCambero3
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptchaverriemily794
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfedepmariaperez
 
Análisis de Artefactos Tecnologicos (3) (1).pdf
Análisis de Artefactos Tecnologicos  (3) (1).pdfAnálisis de Artefactos Tecnologicos  (3) (1).pdf
Análisis de Artefactos Tecnologicos (3) (1).pdfsharitcalderon04
 
Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)JuanStevenTrujilloCh
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersIván López Martín
 
La tecnología y su impacto en la sociedad
La tecnología y su impacto en la sociedadLa tecnología y su impacto en la sociedad
La tecnología y su impacto en la sociedadEduardoSantiagoSegov
 
Slideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan GerenciaSlideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan Gerenciacubillannoly
 
Actividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolarActividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolar24roberto21
 
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptxHugoGutierrez99
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosAlbanyMartinez7
 

Dernier (20)

La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
 
Viguetas Pretensadas en concreto armado
Viguetas Pretensadas  en concreto armadoViguetas Pretensadas  en concreto armado
Viguetas Pretensadas en concreto armado
 
La electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdfLa electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdf
 
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
 
Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...
Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...
Agencia Marketing Branding Google Workspace Deployment Services Credential Fe...
 
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docxPLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptx
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptxLINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptx
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptx
 
Herramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdfHerramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdf
 
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdf
 
Análisis de Artefactos Tecnologicos (3) (1).pdf
Análisis de Artefactos Tecnologicos  (3) (1).pdfAnálisis de Artefactos Tecnologicos  (3) (1).pdf
Análisis de Artefactos Tecnologicos (3) (1).pdf
 
Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 Testcontainers
 
La tecnología y su impacto en la sociedad
La tecnología y su impacto en la sociedadLa tecnología y su impacto en la sociedad
La tecnología y su impacto en la sociedad
 
Slideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan GerenciaSlideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan Gerencia
 
Actividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolarActividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolar
 
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos Juridicos
 

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