SlideShare una empresa de Scribd logo
Desarrollo de Módulos Drupal
(con examples.module)


Alessandro Mascherpa (@ALMADEWEB)

alessandro@almadeweb.es
Asiciación Española de Drupal




                                               Alessandro Mascherpa (@ALMADEWEB)
                                alessandro@almadeweb.es – Asociación Española de Drupal   1 /29
Personal




                                   http://asociaciondrupal.es/
• Desarrollador web freelance.
• Administrador del grupo de usuarios de Drupal
  de Castellón, #DrupalCS:
  http://groups.drupal.org/castellon
                                    Alessandro Mascherpa (@ALMADEWEB)
                     alessandro@almadeweb.es – Asociación Española de Drupal   2 /29
• Consideraciones previas
• Arquitectura Drupal
• Drupal como sistema de Hooks y su manera
  de entender la "Inversión de Control"
• La documentación del desarrollador Drupal
• La API de Drupal
• Crear módulos a partir de "Examples
  module"
• Referencias
                                  Alessandro Mascherpa (@ALMADEWEB)
                   alessandro@almadeweb.es – Asociación Española de Drupal   3 /29
Consideraciones previas
• Entorno de desarrollo
  – Apache (u otro http_server)
  – MySQL (u otro sist. de gestión de bases de datos)
  – PHP (o PHP)
  – IDE o editor para hacer código (según gustos):
    • http://drupal.cocomore.com/blog/using-eclipse-pdt-drupal-deve
  – Instalación de Drupal



                                        Alessandro Mascherpa (@ALMADEWEB)
                         alessandro@almadeweb.es – Asociación Española de Drupal   4 /29
Consideraciones extras
• Entorno de desarrollo II
  – Módulos auxiliares: coder, devel, devel_themer...
  – Drush: http://drupal.org/project/drush
  – GIT: http://drupal.org/node/711070
• Coding standards Drupal
  – http://drupal.org/coding-standards
• Conocer la comunidad Drupal y el workflow de
  desarrollo (issue queues,etc.)... Comprobar
  que lo que vayas a hacer no esté ya hecho
                                       Alessandro Mascherpa (@ALMADEWEB)
                        alessandro@almadeweb.es – Asociación Española de Drupal   5 /29
Hooks: Inversión de control... Drupal-way
  El flujo habitual se da cuando es el código del usuario quien invoca a
  un procedimiento de una biblioteca. La inversión de control sucede
  cuando es la biblioteca la que invoca el código del usuario.

  Wikipedia

 http://martinfowler.com/bliki/InversionOfControl.html
 http://es.wikipedia.org/wiki/Inversi%C3%B3n_de_control

• Drupal lo implementa mediate los patrones de
  diseño Observer y Visitor
 http://drupalwatchdog.com/1/1/design-patterns-of-drupal

                                               Alessandro Mascherpa (@ALMADEWEB)
                                alessandro@almadeweb.es – Asociación Española de Drupal   6 /29
Arquitectura




http://lin-clark.com/sites/default/files/sequence-diagram_get-field-types.png
                                                Alessandro Mascherpa (@ALMADEWEB)
                                 alessandro@almadeweb.es – Asociación Española de Drupal   7 /29
Documentación
• Crear módulos para Drupal 7:
 http://drupal.org/node/1074360
• Libros:
 https://www.packtpub.com/drupal-7-module-development/book
• drupal.org, groups.drupal.org, IRC




                                            Alessandro Mascherpa (@ALMADEWEB)
                             alessandro@almadeweb.es – Asociación Española de Drupal   8 /29
Drupal core API
• User/Permissions/Node_access
• DBTNG (PDO adaptado a Drupal) y
  SchemaAPI
• MenuAPI
• FormAPI
• BlockAPI
• Drupal Mail System

                                  Alessandro Mascherpa (@ALMADEWEB)
                   alessandro@almadeweb.es – Asociación Española de Drupal   9 /29
Drupal core API
•   Entities, FieldAPI y Content
•   FileAPI
•   Theme System
•   JavaScript, AJAX y LibraryAPI
•   Perfiles de instalación
•   SimpleTest
•   Search System...

                                      Alessandro Mascherpa (@ALMADEWEB)
                       alessandro@almadeweb.es – Asociación Española de Drupal   10 /29
Drupal contrib APIS
•   Views
•   EntityAPI
•   SearchAPI
•   Rules
•   Commerce
•   UserPoints, etc...
•   Drush

                                        Alessandro Mascherpa (@ALMADEWEB)
                         alessandro@almadeweb.es – Asociación Española de Drupal   11 /29
Documentación de la API
• Core:
   – http://api.drupal.org/
   – Comentarios Doxygen: http://drupal.org/node/1354
   – Descripciones, ejemplos y comentarios (en ocasiones):
     http://api.drupal.org/api/drupal/includes%21menu.inc/group/menu/7
• Contrib:
   – http://drupalcontrib.org/api/drupal/7
   – http://api.drush.org/api/functions
   – http://api.worldempire.ch/api/userpoints
   – http://api.drupalcommerce.org/

                                               Alessandro Mascherpa (@ALMADEWEB)
                                alessandro@almadeweb.es – Asociación Española de Drupal   12 /29
Estructura de un módulo
• sites/{all o misite}/modules/{custom/}mi_modulo
• Tiene seguro
  – .info
  – .module
• Muy probable que tenga también
  – .install
  – .tests
• Podría tener varios .inc, .css, .js ...
                                       Alessandro Mascherpa (@ALMADEWEB)
                        alessandro@almadeweb.es – Asociación Española de Drupal   13 /29
User/Permissions/Node_access
• Administración de usuarios, roles y permisos
• Control de acceso
• hook_permission




                                    Alessandro Mascherpa (@ALMADEWEB)
                     alessandro@almadeweb.es – Asociación Española de Drupal   14 /29
hook_permision
function node_access_example_permission() {
  return array(
     'access codemotion table' => array(
        'title' => t('Access codemotion table'),
        'description' => t('May view the table with
de results of codemotion_example table.'),
     ),
  );
}




                                      Alessandro Mascherpa (@ALMADEWEB)
                       alessandro@almadeweb.es – Asociación Española de Drupal   15 /29
Menu System
• Sistema de routing de Drupal (maneja la url)
• Mantenimiento y consulta de datos relativos a
  los menús del sistema
• Renderizado de menús
• Diferentes tipos de menú según donde se
  muestre el enlace (si se muestra)
• Control de acceso incluido
• hook_menu() y hook_menu_alter
                                    Alessandro Mascherpa (@ALMADEWEB)
                     alessandro@almadeweb.es – Asociación Española de Drupal   16 /29
hook_menu (menu_example)
function codemotion_menu() {
  $items['codemotion/table'] = array(
     'title' => 'TableSort example',
     'description' => 'Page with a sortable table',
     'page callback' =>
'codemotion_tablesort_example_page',
     'access arguments' => array('access codemotion
table'),
     'type' => MENU_NORMAL_ITEM,
     'menu_name' => 'main-menu',
  );
  return $items;
}
                                      Alessandro Mascherpa (@ALMADEWEB)
                       alessandro@almadeweb.es – Asociación Española de Drupal   17 /29
Renderizando una página (tablesort_example)
function codemotion_tablesort_example_page() {
  $header = array(
     array('data' => t('Numbers'), 'field' => 't.numbers'),
     array('data' => t('Letters'), 'field' => 't.alpha'),
     array('data' => t('Mixture'), 'field' => 't.random'),
  );
  $query = db_select('codemotion_example', 't')->extend('TableSort');
  $query->fields('t');
  $result = $query->orderByHeader($header)->execute();
  $rows = array();
  foreach ($result as $row) {$rows[] = array('data' => (array) $row);}
  $build['tablesort_table'] = array(
     '#theme' => 'table',
     '#header' => $header,
     '#rows' => $rows,
  );
  return $build;
}

                                              Alessandro Mascherpa (@ALMADEWEB)
                               alessandro@almadeweb.es – Asociación Española de Drupal   18 /29
SchemaAPI
• Capa de abstracción de la base de datos
  basada en PDO
• Muchos plugins
• Definición del schema de datos
• Hooks para definir operaciones durante
  instalación y desinstalación de módulos
• Hooks para definir operaciones durante
  activación y desactivación de módulos
                                   Alessandro Mascherpa (@ALMADEWEB)
                    alessandro@almadeweb.es – Asociación Española de Drupal   19 /29
hook_schema (dbtng_example)
function codemotion_schema() {
  $schema['codemotion_example'] = array(
     'description' => 'Stores some values for sorting fun.',
     'fields' => array(
        'numbers'     => array('description' => 'This column',
           'type' => 'varchar','length' => 10,'not null' => TRUE,
        ),
        'random' => array(
           'description' => 'This column simply holds random',
           'type' => 'varchar','length' => 128,'not null' => TRUE,
        ),
     ),
     'primary key' => array('numbers'),
  );

    return $schema;
}
                                            Alessandro Mascherpa (@ALMADEWEB)
                             alessandro@almadeweb.es – Asociación Española de Drupal   20 /29
hook_install y hook_uninstall (dbtng_example)
function codemotion_install() {
  $rows = array(
     array('numbers' => 1, 'alpha'     =>    'e',     'random'          =>   '912cv21'),
     array('numbers' => 2, 'alpha'     =>    'a',     'random'          =>   '0kuykuh'),
     array('numbers' => 4, 'alpha'     =>    'w',     'random'          =>   '80jsv772'),
     array('numbers' => 6, 'alpha'     =>    's',     'random'          =>   'au832'),
     array('numbers' => 7, 'alpha'     =>    'e',     'random'          =>   't982hkv'),
  );

  if (db_table_exists('codemotion_example')) {
    foreach ($rows as $row) {
      db_insert('codemotion_example')->fields($row)->execute();
    }
  }
}                 function codemotion_uninstall() {
                    db_drop_table('codemotion_example');
                  }

                                            Alessandro Mascherpa (@ALMADEWEB)
                             alessandro@almadeweb.es – Asociación Española de Drupal   21 /29
FormAPI
• Definir formularios a traves de arrays
  asociativos dentro de la función miform_form
• Renderizar formularios: drupal_get_form()
• Form validation: miform_form_validate
• Form submision: miform_form_submit
• hook_form_alter


                                    Alessandro Mascherpa (@ALMADEWEB)
                     alessandro@almadeweb.es – Asociación Española de Drupal   22 /29
_for (form_example)
function form_codemotion_form($form, &$form_state) {
  $form['alpha'] = array(
     '#type' => 'select',
     '#title' => t('Other value'),
     '#options' => array('web' => t('Web'),'hello'=>t('Hello')),
  );
  $form['random'] = array(
     '#type' => 'textarea',
     '#title' => t('What standardized tests did you take?'),
     '#default_value' => 'Un poco de random?',
  );
  $form['submit'] = array(
     '#type' => 'submit', '#value' => 'Enviar',
  );
  return $form;
}


                                           Alessandro Mascherpa (@ALMADEWEB)
                            alessandro@almadeweb.es – Asociación Española de Drupal   23 /29
_form_validate y _form_submit
function form_codemotion_form_validate($form, &$form_state) {
  if(!is_numeric($form_state['values']['numbers'])) {
    form_set_error('numbers', t('Numbers must be a number'));
  }
}

function form_codemotion_form_submit($form, &$form_state) {
  drupal_set_message(t('MyVal: @values',
array('@values'=>$form_state['values']['myvalue'])));
  $row = array('numbers' => $form_state['values']
['numbers'], ...);
  db_insert('codemotion_example')->fields($row)->execute();
  codemotion_mail_send($form_state['values']);
}




                                           Alessandro Mascherpa (@ALMADEWEB)
                            alessandro@almadeweb.es – Asociación Española de Drupal   24 /29
Blocks
• Fragmentos de contenido.
• Se pueden distribuir en cualquier región
  definida en el tema a traves de la UI
• Definidos con hook_block_info
• Renderizados con hook_block_view
• Otros hooks para modificar el comportamiento
  de los existentes en otros módulos

                                   Alessandro Mascherpa (@ALMADEWEB)
                    alessandro@almadeweb.es – Asociación Española de Drupal   25 /29
hook_block_info (block_example)
function codemotion_block_info() {
  $blocks['codemotion'] = array(
     'info' => t('Codemotion Data'),
     'status' => TRUE,
     'region' => 'sidebar_first',
     'visibility' => BLOCK_VISIBILITY_LISTED,
     'pages' => 'node/*',
  );
  $blocks['codemotiontext'] = array(
     'info' => t('Codemotion Text'),
  );
  return $blocks;
}




                                            Alessandro Mascherpa (@ALMADEWEB)
                             alessandro@almadeweb.es – Asociación Española de Drupal   26 /29
hook_block_view (block_example)
/**
  * Implements hook_block_view().
  */
function codemotion_block_view($delta = '') {
   switch ($delta) {
     case 'codemotion':
       $block['subject'] = t('Codemotion Data Block');
       $block['content'] = codemotion_tablesort_example_page();
       break;
     case 'codemotiontext':
       $block['codemotiontext'] = 'codemotiontext';
       break;
   }
   return $block;
}



                                           Alessandro Mascherpa (@ALMADEWEB)
                            alessandro@almadeweb.es – Asociación Española de Drupal   27 /29
A partir de aquí...


                                        http://groups.drupal.org/madrid
http://2012.drupalday.es




                                          Alessandro Mascherpa (@ALMADEWEB)
                           alessandro@almadeweb.es – Asociación Española de Drupal   28 /29
¿Preguntas? ...
… comentarios ...
… críticas ...



                    Gracias :)

            Alessandro Mascherpa
               @ALMADEWEB

                                    Alessandro Mascherpa (@ALMADEWEB)
                     alessandro@almadeweb.es – Asociación Española de Drupal   29 /29

Más contenido relacionado

Similar a Desarrollo de módulos para Drupal

Exposicion Akelos
Exposicion AkelosExposicion Akelos
Exposicion Akelos
dokeosla
 
#Cappacitate2015 Bogota
#Cappacitate2015 Bogota#Cappacitate2015 Bogota
#Cappacitate2015 Bogota
Julián R. Figueroa
 
Cappacitate Android Medellín
Cappacitate Android MedellínCappacitate Android Medellín
Cappacitate Android Medellín
Julián R. Figueroa
 
9.laravel
9.laravel9.laravel
U3-ACT02-TBD-ISC-MSG.pdf
U3-ACT02-TBD-ISC-MSG.pdfU3-ACT02-TBD-ISC-MSG.pdf
U3-ACT02-TBD-ISC-MSG.pdf
GonzaloMartinezSilve
 
Expo felicitas finall
Expo felicitas finallExpo felicitas finall
Expo felicitas finall
Jeff Andre Ventura
 
Presentación Ruby on Rails en Softare Freedom Day 09 Buenos Aires
Presentación Ruby on Rails en Softare Freedom Day 09 Buenos AiresPresentación Ruby on Rails en Softare Freedom Day 09 Buenos Aires
Presentación Ruby on Rails en Softare Freedom Day 09 Buenos Aires
peterpunk
 
(25/02) Desarrollador@S Invita - Introducción y novedades de SQL Server 2008
(25/02) Desarrollador@S Invita - Introducción y novedades de SQL Server 2008(25/02) Desarrollador@S Invita - Introducción y novedades de SQL Server 2008
(25/02) Desarrollador@S Invita - Introducción y novedades de SQL Server 2008
Microsoft Argentina y Uruguay [Official Space]
 
PHP_Mysql.pptx
PHP_Mysql.pptxPHP_Mysql.pptx
PHP_Mysql.pptx
YasserQuispe
 
Laravel 5.1
Laravel 5.1Laravel 5.1
Laravel 5.1
René Sandoval
 
Taller de Drupal - Sesión 4
Taller de Drupal - Sesión 4Taller de Drupal - Sesión 4
Taller de Drupal - Sesión 4
SEAT, S.A.
 
Framework
FrameworkFramework
Framework
TeDy j Sanchez
 
Presentacion Ruby on Rails CTIC-Cusco2007
Presentacion Ruby on Rails CTIC-Cusco2007Presentacion Ruby on Rails CTIC-Cusco2007
Presentacion Ruby on Rails CTIC-Cusco2007
JuancaPompilla
 
Código mantenible, en Wordpress.
Código mantenible, en Wordpress.Código mantenible, en Wordpress.
Código mantenible, en Wordpress.
Asier Marqués
 
Introducción a Laravel 5 - Un Framework para Artesanos Web
Introducción a Laravel 5 - Un Framework para Artesanos WebIntroducción a Laravel 5 - Un Framework para Artesanos Web
Introducción a Laravel 5 - Un Framework para Artesanos Web
Facundo E. Goñi Perez
 
Introduccion a Drupal
Introduccion a DrupalIntroduccion a Drupal
Introduccion a Drupal
Development Factory Group
 
Presentación de zan php
Presentación de zan phpPresentación de zan php
Presentación de zan php
Carlos Zantana
 
Android DB por Cesar Cespedes
Android DB por Cesar CespedesAndroid DB por Cesar Cespedes
Android DB por Cesar Cespedes
Lima GTUG
 
Drupal7 para desarrolladores
Drupal7 para desarrolladoresDrupal7 para desarrolladores
Drupal7 para desarrolladores
Pedro Cambra
 
Todo lo que necesitas saber sobre Drupal 8
Todo lo que necesitas saber sobre Drupal 8Todo lo que necesitas saber sobre Drupal 8
Todo lo que necesitas saber sobre Drupal 8
Acquia
 

Similar a Desarrollo de módulos para Drupal (20)

Exposicion Akelos
Exposicion AkelosExposicion Akelos
Exposicion Akelos
 
#Cappacitate2015 Bogota
#Cappacitate2015 Bogota#Cappacitate2015 Bogota
#Cappacitate2015 Bogota
 
Cappacitate Android Medellín
Cappacitate Android MedellínCappacitate Android Medellín
Cappacitate Android Medellín
 
9.laravel
9.laravel9.laravel
9.laravel
 
U3-ACT02-TBD-ISC-MSG.pdf
U3-ACT02-TBD-ISC-MSG.pdfU3-ACT02-TBD-ISC-MSG.pdf
U3-ACT02-TBD-ISC-MSG.pdf
 
Expo felicitas finall
Expo felicitas finallExpo felicitas finall
Expo felicitas finall
 
Presentación Ruby on Rails en Softare Freedom Day 09 Buenos Aires
Presentación Ruby on Rails en Softare Freedom Day 09 Buenos AiresPresentación Ruby on Rails en Softare Freedom Day 09 Buenos Aires
Presentación Ruby on Rails en Softare Freedom Day 09 Buenos Aires
 
(25/02) Desarrollador@S Invita - Introducción y novedades de SQL Server 2008
(25/02) Desarrollador@S Invita - Introducción y novedades de SQL Server 2008(25/02) Desarrollador@S Invita - Introducción y novedades de SQL Server 2008
(25/02) Desarrollador@S Invita - Introducción y novedades de SQL Server 2008
 
PHP_Mysql.pptx
PHP_Mysql.pptxPHP_Mysql.pptx
PHP_Mysql.pptx
 
Laravel 5.1
Laravel 5.1Laravel 5.1
Laravel 5.1
 
Taller de Drupal - Sesión 4
Taller de Drupal - Sesión 4Taller de Drupal - Sesión 4
Taller de Drupal - Sesión 4
 
Framework
FrameworkFramework
Framework
 
Presentacion Ruby on Rails CTIC-Cusco2007
Presentacion Ruby on Rails CTIC-Cusco2007Presentacion Ruby on Rails CTIC-Cusco2007
Presentacion Ruby on Rails CTIC-Cusco2007
 
Código mantenible, en Wordpress.
Código mantenible, en Wordpress.Código mantenible, en Wordpress.
Código mantenible, en Wordpress.
 
Introducción a Laravel 5 - Un Framework para Artesanos Web
Introducción a Laravel 5 - Un Framework para Artesanos WebIntroducción a Laravel 5 - Un Framework para Artesanos Web
Introducción a Laravel 5 - Un Framework para Artesanos Web
 
Introduccion a Drupal
Introduccion a DrupalIntroduccion a Drupal
Introduccion a Drupal
 
Presentación de zan php
Presentación de zan phpPresentación de zan php
Presentación de zan php
 
Android DB por Cesar Cespedes
Android DB por Cesar CespedesAndroid DB por Cesar Cespedes
Android DB por Cesar Cespedes
 
Drupal7 para desarrolladores
Drupal7 para desarrolladoresDrupal7 para desarrolladores
Drupal7 para desarrolladores
 
Todo lo que necesitas saber sobre Drupal 8
Todo lo que necesitas saber sobre Drupal 8Todo lo que necesitas saber sobre Drupal 8
Todo lo que necesitas saber sobre Drupal 8
 

Más de Alessandro Mascherpa

Drupal7 site buildingesue_3
Drupal7 site buildingesue_3Drupal7 site buildingesue_3
Drupal7 site buildingesue_3
Alessandro Mascherpa
 
Curso Drupal 7 SiteBuilding parte 2
Curso Drupal 7 SiteBuilding parte 2Curso Drupal 7 SiteBuilding parte 2
Curso Drupal 7 SiteBuilding parte 2
Alessandro Mascherpa
 
Curso Drupal7 SiteBuilding parte 1
Curso Drupal7 SiteBuilding parte 1Curso Drupal7 SiteBuilding parte 1
Curso Drupal7 SiteBuilding parte 1
Alessandro Mascherpa
 
Drupal8 Symfony2 en DrupalCS
Drupal8 Symfony2 en DrupalCSDrupal8 Symfony2 en DrupalCS
Drupal8 Symfony2 en DrupalCS
Alessandro Mascherpa
 
Drupal User Points. MicroCharla marzo 2012
Drupal User Points. MicroCharla marzo 2012Drupal User Points. MicroCharla marzo 2012
Drupal User Points. MicroCharla marzo 2012
Alessandro Mascherpa
 
Drupal Sitebuilding 101
Drupal Sitebuilding 101Drupal Sitebuilding 101
Drupal Sitebuilding 101
Alessandro Mascherpa
 
Introducción a Node.js
Introducción a Node.jsIntroducción a Node.js
Introducción a Node.js
Alessandro Mascherpa
 

Más de Alessandro Mascherpa (7)

Drupal7 site buildingesue_3
Drupal7 site buildingesue_3Drupal7 site buildingesue_3
Drupal7 site buildingesue_3
 
Curso Drupal 7 SiteBuilding parte 2
Curso Drupal 7 SiteBuilding parte 2Curso Drupal 7 SiteBuilding parte 2
Curso Drupal 7 SiteBuilding parte 2
 
Curso Drupal7 SiteBuilding parte 1
Curso Drupal7 SiteBuilding parte 1Curso Drupal7 SiteBuilding parte 1
Curso Drupal7 SiteBuilding parte 1
 
Drupal8 Symfony2 en DrupalCS
Drupal8 Symfony2 en DrupalCSDrupal8 Symfony2 en DrupalCS
Drupal8 Symfony2 en DrupalCS
 
Drupal User Points. MicroCharla marzo 2012
Drupal User Points. MicroCharla marzo 2012Drupal User Points. MicroCharla marzo 2012
Drupal User Points. MicroCharla marzo 2012
 
Drupal Sitebuilding 101
Drupal Sitebuilding 101Drupal Sitebuilding 101
Drupal Sitebuilding 101
 
Introducción a Node.js
Introducción a Node.jsIntroducción a Node.js
Introducción a Node.js
 

Último

Computacion cuántica y sus ventajas y desventajas
Computacion cuántica y sus ventajas y desventajasComputacion cuántica y sus ventajas y desventajas
Computacion cuántica y sus ventajas y desventajas
sofiahuarancabellido
 
Nuevos tiempos, nuevos espacios.docxdsdsad
Nuevos tiempos, nuevos espacios.docxdsdsadNuevos tiempos, nuevos espacios.docxdsdsad
Nuevos tiempos, nuevos espacios.docxdsdsad
larapalaciosmonzon28
 
Manual de soporte y mantenimiento de equipo de cómputo
Manual de soporte y mantenimiento de equipo de cómputoManual de soporte y mantenimiento de equipo de cómputo
Manual de soporte y mantenimiento de equipo de cómputo
doctorsoluciones34
 
Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)
Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)
Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)
AbrahamCastillo42
 
HERRAMIENTAS WEB--------------------.pptx
HERRAMIENTAS WEB--------------------.pptxHERRAMIENTAS WEB--------------------.pptx
HERRAMIENTAS WEB--------------------.pptx
maralache30
 
Informació Projecte Iniciativa TIC SOPRA STERIA.pdf
Informació Projecte Iniciativa TIC SOPRA STERIA.pdfInformació Projecte Iniciativa TIC SOPRA STERIA.pdf
Informació Projecte Iniciativa TIC SOPRA STERIA.pdf
Festibity
 
Presentación de Tic en educación y sobre blogger
Presentación de Tic en educación y sobre bloggerPresentación de Tic en educación y sobre blogger
Presentación de Tic en educación y sobre blogger
larapalaciosmonzon28
 
Informació Projecte Iniciativa TIC HPE.pdf
Informació Projecte Iniciativa TIC HPE.pdfInformació Projecte Iniciativa TIC HPE.pdf
Informació Projecte Iniciativa TIC HPE.pdf
Festibity
 
Tecnología 5G Presentación.pdf trabajo .
Tecnología 5G Presentación.pdf trabajo .Tecnología 5G Presentación.pdf trabajo .
Tecnología 5G Presentación.pdf trabajo .
asrielgamer3421
 
Sitios web 3.0 funciones ventajas y desventajas
Sitios web 3.0 funciones ventajas y desventajasSitios web 3.0 funciones ventajas y desventajas
Sitios web 3.0 funciones ventajas y desventajas
paulroyal74
 
Catalogo general tarifas 2024 Vaillant. Amado Salvador Distribuidor Oficial e...
Catalogo general tarifas 2024 Vaillant. Amado Salvador Distribuidor Oficial e...Catalogo general tarifas 2024 Vaillant. Amado Salvador Distribuidor Oficial e...
Catalogo general tarifas 2024 Vaillant. Amado Salvador Distribuidor Oficial e...
AMADO SALVADOR
 
Gabinete, puertos y dispositivos que se conectan al case
Gabinete,  puertos y  dispositivos que se conectan al caseGabinete,  puertos y  dispositivos que se conectan al case
Gabinete, puertos y dispositivos que se conectan al case
JuanaNT7
 
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdfProjecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Festibity
 
Refrigeradores Samsung Modo Test y Forzado
Refrigeradores Samsung Modo Test y ForzadoRefrigeradores Samsung Modo Test y Forzado
Refrigeradores Samsung Modo Test y Forzado
NicandroMartinez2
 
MONOGRAFIA memoria RAM.docx trabajo DE TECNOLOGIA
MONOGRAFIA memoria RAM.docx trabajo DE TECNOLOGIAMONOGRAFIA memoria RAM.docx trabajo DE TECNOLOGIA
MONOGRAFIA memoria RAM.docx trabajo DE TECNOLOGIA
leia ereni
 
TODO SOBRE LA INFORMÁTICA, HISTORIA, ¿QUE ES?, IMPORTANCIA Y CARACTERISTICAS....
TODO SOBRE LA INFORMÁTICA, HISTORIA, ¿QUE ES?, IMPORTANCIA Y CARACTERISTICAS....TODO SOBRE LA INFORMÁTICA, HISTORIA, ¿QUE ES?, IMPORTANCIA Y CARACTERISTICAS....
TODO SOBRE LA INFORMÁTICA, HISTORIA, ¿QUE ES?, IMPORTANCIA Y CARACTERISTICAS....
bendezuperezjimena
 
Inteligencia Artificial
Inteligencia ArtificialInteligencia Artificial
Inteligencia Artificial
YashiraPaye
 
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador Valencia
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador ValenciaCatalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador Valencia
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador Valencia
AMADO SALVADOR
 
Projecte Iniciativa TIC 2024 SOPRA STERIA. inCV.pdf
Projecte Iniciativa TIC 2024 SOPRA STERIA. inCV.pdfProjecte Iniciativa TIC 2024 SOPRA STERIA. inCV.pdf
Projecte Iniciativa TIC 2024 SOPRA STERIA. inCV.pdf
Festibity
 
edublogs info.docx asdasfasfsawqrdqwfqwfqwfq
edublogs info.docx asdasfasfsawqrdqwfqwfqwfqedublogs info.docx asdasfasfsawqrdqwfqwfqwfq
edublogs info.docx asdasfasfsawqrdqwfqwfqwfq
larapalaciosmonzon28
 

Último (20)

Computacion cuántica y sus ventajas y desventajas
Computacion cuántica y sus ventajas y desventajasComputacion cuántica y sus ventajas y desventajas
Computacion cuántica y sus ventajas y desventajas
 
Nuevos tiempos, nuevos espacios.docxdsdsad
Nuevos tiempos, nuevos espacios.docxdsdsadNuevos tiempos, nuevos espacios.docxdsdsad
Nuevos tiempos, nuevos espacios.docxdsdsad
 
Manual de soporte y mantenimiento de equipo de cómputo
Manual de soporte y mantenimiento de equipo de cómputoManual de soporte y mantenimiento de equipo de cómputo
Manual de soporte y mantenimiento de equipo de cómputo
 
Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)
Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)
Todo sobre la tarjeta de video (Bienvenidos a mi blog personal)
 
HERRAMIENTAS WEB--------------------.pptx
HERRAMIENTAS WEB--------------------.pptxHERRAMIENTAS WEB--------------------.pptx
HERRAMIENTAS WEB--------------------.pptx
 
Informació Projecte Iniciativa TIC SOPRA STERIA.pdf
Informació Projecte Iniciativa TIC SOPRA STERIA.pdfInformació Projecte Iniciativa TIC SOPRA STERIA.pdf
Informació Projecte Iniciativa TIC SOPRA STERIA.pdf
 
Presentación de Tic en educación y sobre blogger
Presentación de Tic en educación y sobre bloggerPresentación de Tic en educación y sobre blogger
Presentación de Tic en educación y sobre blogger
 
Informació Projecte Iniciativa TIC HPE.pdf
Informació Projecte Iniciativa TIC HPE.pdfInformació Projecte Iniciativa TIC HPE.pdf
Informació Projecte Iniciativa TIC HPE.pdf
 
Tecnología 5G Presentación.pdf trabajo .
Tecnología 5G Presentación.pdf trabajo .Tecnología 5G Presentación.pdf trabajo .
Tecnología 5G Presentación.pdf trabajo .
 
Sitios web 3.0 funciones ventajas y desventajas
Sitios web 3.0 funciones ventajas y desventajasSitios web 3.0 funciones ventajas y desventajas
Sitios web 3.0 funciones ventajas y desventajas
 
Catalogo general tarifas 2024 Vaillant. Amado Salvador Distribuidor Oficial e...
Catalogo general tarifas 2024 Vaillant. Amado Salvador Distribuidor Oficial e...Catalogo general tarifas 2024 Vaillant. Amado Salvador Distribuidor Oficial e...
Catalogo general tarifas 2024 Vaillant. Amado Salvador Distribuidor Oficial e...
 
Gabinete, puertos y dispositivos que se conectan al case
Gabinete,  puertos y  dispositivos que se conectan al caseGabinete,  puertos y  dispositivos que se conectan al case
Gabinete, puertos y dispositivos que se conectan al case
 
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdfProjecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
 
Refrigeradores Samsung Modo Test y Forzado
Refrigeradores Samsung Modo Test y ForzadoRefrigeradores Samsung Modo Test y Forzado
Refrigeradores Samsung Modo Test y Forzado
 
MONOGRAFIA memoria RAM.docx trabajo DE TECNOLOGIA
MONOGRAFIA memoria RAM.docx trabajo DE TECNOLOGIAMONOGRAFIA memoria RAM.docx trabajo DE TECNOLOGIA
MONOGRAFIA memoria RAM.docx trabajo DE TECNOLOGIA
 
TODO SOBRE LA INFORMÁTICA, HISTORIA, ¿QUE ES?, IMPORTANCIA Y CARACTERISTICAS....
TODO SOBRE LA INFORMÁTICA, HISTORIA, ¿QUE ES?, IMPORTANCIA Y CARACTERISTICAS....TODO SOBRE LA INFORMÁTICA, HISTORIA, ¿QUE ES?, IMPORTANCIA Y CARACTERISTICAS....
TODO SOBRE LA INFORMÁTICA, HISTORIA, ¿QUE ES?, IMPORTANCIA Y CARACTERISTICAS....
 
Inteligencia Artificial
Inteligencia ArtificialInteligencia Artificial
Inteligencia Artificial
 
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador Valencia
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador ValenciaCatalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador Valencia
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador Valencia
 
Projecte Iniciativa TIC 2024 SOPRA STERIA. inCV.pdf
Projecte Iniciativa TIC 2024 SOPRA STERIA. inCV.pdfProjecte Iniciativa TIC 2024 SOPRA STERIA. inCV.pdf
Projecte Iniciativa TIC 2024 SOPRA STERIA. inCV.pdf
 
edublogs info.docx asdasfasfsawqrdqwfqwfqwfq
edublogs info.docx asdasfasfsawqrdqwfqwfqwfqedublogs info.docx asdasfasfsawqrdqwfqwfqwfq
edublogs info.docx asdasfasfsawqrdqwfqwfqwfq
 

Desarrollo de módulos para Drupal

  • 1. Desarrollo de Módulos Drupal (con examples.module) Alessandro Mascherpa (@ALMADEWEB) alessandro@almadeweb.es Asiciación Española de Drupal Alessandro Mascherpa (@ALMADEWEB) alessandro@almadeweb.es – Asociación Española de Drupal 1 /29
  • 2. Personal http://asociaciondrupal.es/ • Desarrollador web freelance. • Administrador del grupo de usuarios de Drupal de Castellón, #DrupalCS: http://groups.drupal.org/castellon Alessandro Mascherpa (@ALMADEWEB) alessandro@almadeweb.es – Asociación Española de Drupal 2 /29
  • 3. • Consideraciones previas • Arquitectura Drupal • Drupal como sistema de Hooks y su manera de entender la "Inversión de Control" • La documentación del desarrollador Drupal • La API de Drupal • Crear módulos a partir de "Examples module" • Referencias Alessandro Mascherpa (@ALMADEWEB) alessandro@almadeweb.es – Asociación Española de Drupal 3 /29
  • 4. Consideraciones previas • Entorno de desarrollo – Apache (u otro http_server) – MySQL (u otro sist. de gestión de bases de datos) – PHP (o PHP) – IDE o editor para hacer código (según gustos): • http://drupal.cocomore.com/blog/using-eclipse-pdt-drupal-deve – Instalación de Drupal Alessandro Mascherpa (@ALMADEWEB) alessandro@almadeweb.es – Asociación Española de Drupal 4 /29
  • 5. Consideraciones extras • Entorno de desarrollo II – Módulos auxiliares: coder, devel, devel_themer... – Drush: http://drupal.org/project/drush – GIT: http://drupal.org/node/711070 • Coding standards Drupal – http://drupal.org/coding-standards • Conocer la comunidad Drupal y el workflow de desarrollo (issue queues,etc.)... Comprobar que lo que vayas a hacer no esté ya hecho Alessandro Mascherpa (@ALMADEWEB) alessandro@almadeweb.es – Asociación Española de Drupal 5 /29
  • 6. Hooks: Inversión de control... Drupal-way El flujo habitual se da cuando es el código del usuario quien invoca a un procedimiento de una biblioteca. La inversión de control sucede cuando es la biblioteca la que invoca el código del usuario. Wikipedia http://martinfowler.com/bliki/InversionOfControl.html http://es.wikipedia.org/wiki/Inversi%C3%B3n_de_control • Drupal lo implementa mediate los patrones de diseño Observer y Visitor http://drupalwatchdog.com/1/1/design-patterns-of-drupal Alessandro Mascherpa (@ALMADEWEB) alessandro@almadeweb.es – Asociación Española de Drupal 6 /29
  • 7. Arquitectura http://lin-clark.com/sites/default/files/sequence-diagram_get-field-types.png Alessandro Mascherpa (@ALMADEWEB) alessandro@almadeweb.es – Asociación Española de Drupal 7 /29
  • 8. Documentación • Crear módulos para Drupal 7: http://drupal.org/node/1074360 • Libros: https://www.packtpub.com/drupal-7-module-development/book • drupal.org, groups.drupal.org, IRC Alessandro Mascherpa (@ALMADEWEB) alessandro@almadeweb.es – Asociación Española de Drupal 8 /29
  • 9. Drupal core API • User/Permissions/Node_access • DBTNG (PDO adaptado a Drupal) y SchemaAPI • MenuAPI • FormAPI • BlockAPI • Drupal Mail System Alessandro Mascherpa (@ALMADEWEB) alessandro@almadeweb.es – Asociación Española de Drupal 9 /29
  • 10. Drupal core API • Entities, FieldAPI y Content • FileAPI • Theme System • JavaScript, AJAX y LibraryAPI • Perfiles de instalación • SimpleTest • Search System... Alessandro Mascherpa (@ALMADEWEB) alessandro@almadeweb.es – Asociación Española de Drupal 10 /29
  • 11. Drupal contrib APIS • Views • EntityAPI • SearchAPI • Rules • Commerce • UserPoints, etc... • Drush Alessandro Mascherpa (@ALMADEWEB) alessandro@almadeweb.es – Asociación Española de Drupal 11 /29
  • 12. Documentación de la API • Core: – http://api.drupal.org/ – Comentarios Doxygen: http://drupal.org/node/1354 – Descripciones, ejemplos y comentarios (en ocasiones): http://api.drupal.org/api/drupal/includes%21menu.inc/group/menu/7 • Contrib: – http://drupalcontrib.org/api/drupal/7 – http://api.drush.org/api/functions – http://api.worldempire.ch/api/userpoints – http://api.drupalcommerce.org/ Alessandro Mascherpa (@ALMADEWEB) alessandro@almadeweb.es – Asociación Española de Drupal 12 /29
  • 13. Estructura de un módulo • sites/{all o misite}/modules/{custom/}mi_modulo • Tiene seguro – .info – .module • Muy probable que tenga también – .install – .tests • Podría tener varios .inc, .css, .js ... Alessandro Mascherpa (@ALMADEWEB) alessandro@almadeweb.es – Asociación Española de Drupal 13 /29
  • 14. User/Permissions/Node_access • Administración de usuarios, roles y permisos • Control de acceso • hook_permission Alessandro Mascherpa (@ALMADEWEB) alessandro@almadeweb.es – Asociación Española de Drupal 14 /29
  • 15. hook_permision function node_access_example_permission() { return array( 'access codemotion table' => array( 'title' => t('Access codemotion table'), 'description' => t('May view the table with de results of codemotion_example table.'), ), ); } Alessandro Mascherpa (@ALMADEWEB) alessandro@almadeweb.es – Asociación Española de Drupal 15 /29
  • 16. Menu System • Sistema de routing de Drupal (maneja la url) • Mantenimiento y consulta de datos relativos a los menús del sistema • Renderizado de menús • Diferentes tipos de menú según donde se muestre el enlace (si se muestra) • Control de acceso incluido • hook_menu() y hook_menu_alter Alessandro Mascherpa (@ALMADEWEB) alessandro@almadeweb.es – Asociación Española de Drupal 16 /29
  • 17. hook_menu (menu_example) function codemotion_menu() { $items['codemotion/table'] = array( 'title' => 'TableSort example', 'description' => 'Page with a sortable table', 'page callback' => 'codemotion_tablesort_example_page', 'access arguments' => array('access codemotion table'), 'type' => MENU_NORMAL_ITEM, 'menu_name' => 'main-menu', ); return $items; } Alessandro Mascherpa (@ALMADEWEB) alessandro@almadeweb.es – Asociación Española de Drupal 17 /29
  • 18. Renderizando una página (tablesort_example) function codemotion_tablesort_example_page() { $header = array( array('data' => t('Numbers'), 'field' => 't.numbers'), array('data' => t('Letters'), 'field' => 't.alpha'), array('data' => t('Mixture'), 'field' => 't.random'), ); $query = db_select('codemotion_example', 't')->extend('TableSort'); $query->fields('t'); $result = $query->orderByHeader($header)->execute(); $rows = array(); foreach ($result as $row) {$rows[] = array('data' => (array) $row);} $build['tablesort_table'] = array( '#theme' => 'table', '#header' => $header, '#rows' => $rows, ); return $build; } Alessandro Mascherpa (@ALMADEWEB) alessandro@almadeweb.es – Asociación Española de Drupal 18 /29
  • 19. SchemaAPI • Capa de abstracción de la base de datos basada en PDO • Muchos plugins • Definición del schema de datos • Hooks para definir operaciones durante instalación y desinstalación de módulos • Hooks para definir operaciones durante activación y desactivación de módulos Alessandro Mascherpa (@ALMADEWEB) alessandro@almadeweb.es – Asociación Española de Drupal 19 /29
  • 20. hook_schema (dbtng_example) function codemotion_schema() { $schema['codemotion_example'] = array( 'description' => 'Stores some values for sorting fun.', 'fields' => array( 'numbers' => array('description' => 'This column', 'type' => 'varchar','length' => 10,'not null' => TRUE, ), 'random' => array( 'description' => 'This column simply holds random', 'type' => 'varchar','length' => 128,'not null' => TRUE, ), ), 'primary key' => array('numbers'), ); return $schema; } Alessandro Mascherpa (@ALMADEWEB) alessandro@almadeweb.es – Asociación Española de Drupal 20 /29
  • 21. hook_install y hook_uninstall (dbtng_example) function codemotion_install() { $rows = array( array('numbers' => 1, 'alpha' => 'e', 'random' => '912cv21'), array('numbers' => 2, 'alpha' => 'a', 'random' => '0kuykuh'), array('numbers' => 4, 'alpha' => 'w', 'random' => '80jsv772'), array('numbers' => 6, 'alpha' => 's', 'random' => 'au832'), array('numbers' => 7, 'alpha' => 'e', 'random' => 't982hkv'), ); if (db_table_exists('codemotion_example')) { foreach ($rows as $row) { db_insert('codemotion_example')->fields($row)->execute(); } } } function codemotion_uninstall() { db_drop_table('codemotion_example'); } Alessandro Mascherpa (@ALMADEWEB) alessandro@almadeweb.es – Asociación Española de Drupal 21 /29
  • 22. FormAPI • Definir formularios a traves de arrays asociativos dentro de la función miform_form • Renderizar formularios: drupal_get_form() • Form validation: miform_form_validate • Form submision: miform_form_submit • hook_form_alter Alessandro Mascherpa (@ALMADEWEB) alessandro@almadeweb.es – Asociación Española de Drupal 22 /29
  • 23. _for (form_example) function form_codemotion_form($form, &$form_state) { $form['alpha'] = array( '#type' => 'select', '#title' => t('Other value'), '#options' => array('web' => t('Web'),'hello'=>t('Hello')), ); $form['random'] = array( '#type' => 'textarea', '#title' => t('What standardized tests did you take?'), '#default_value' => 'Un poco de random?', ); $form['submit'] = array( '#type' => 'submit', '#value' => 'Enviar', ); return $form; } Alessandro Mascherpa (@ALMADEWEB) alessandro@almadeweb.es – Asociación Española de Drupal 23 /29
  • 24. _form_validate y _form_submit function form_codemotion_form_validate($form, &$form_state) { if(!is_numeric($form_state['values']['numbers'])) { form_set_error('numbers', t('Numbers must be a number')); } } function form_codemotion_form_submit($form, &$form_state) { drupal_set_message(t('MyVal: @values', array('@values'=>$form_state['values']['myvalue']))); $row = array('numbers' => $form_state['values'] ['numbers'], ...); db_insert('codemotion_example')->fields($row)->execute(); codemotion_mail_send($form_state['values']); } Alessandro Mascherpa (@ALMADEWEB) alessandro@almadeweb.es – Asociación Española de Drupal 24 /29
  • 25. Blocks • Fragmentos de contenido. • Se pueden distribuir en cualquier región definida en el tema a traves de la UI • Definidos con hook_block_info • Renderizados con hook_block_view • Otros hooks para modificar el comportamiento de los existentes en otros módulos Alessandro Mascherpa (@ALMADEWEB) alessandro@almadeweb.es – Asociación Española de Drupal 25 /29
  • 26. hook_block_info (block_example) function codemotion_block_info() { $blocks['codemotion'] = array( 'info' => t('Codemotion Data'), 'status' => TRUE, 'region' => 'sidebar_first', 'visibility' => BLOCK_VISIBILITY_LISTED, 'pages' => 'node/*', ); $blocks['codemotiontext'] = array( 'info' => t('Codemotion Text'), ); return $blocks; } Alessandro Mascherpa (@ALMADEWEB) alessandro@almadeweb.es – Asociación Española de Drupal 26 /29
  • 27. hook_block_view (block_example) /** * Implements hook_block_view(). */ function codemotion_block_view($delta = '') { switch ($delta) { case 'codemotion': $block['subject'] = t('Codemotion Data Block'); $block['content'] = codemotion_tablesort_example_page(); break; case 'codemotiontext': $block['codemotiontext'] = 'codemotiontext'; break; } return $block; } Alessandro Mascherpa (@ALMADEWEB) alessandro@almadeweb.es – Asociación Española de Drupal 27 /29
  • 28. A partir de aquí... http://groups.drupal.org/madrid http://2012.drupalday.es Alessandro Mascherpa (@ALMADEWEB) alessandro@almadeweb.es – Asociación Española de Drupal 28 /29
  • 29. ¿Preguntas? ... … comentarios ... … críticas ... Gracias :) Alessandro Mascherpa @ALMADEWEB Alessandro Mascherpa (@ALMADEWEB) alessandro@almadeweb.es – Asociación Española de Drupal 29 /29