SlideShare a Scribd company logo
1 of 29
Download to read offline
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

More Related Content

Similar to Desarrollo de módulos para Drupal

Exposicion Akelos
Exposicion AkelosExposicion Akelos
Exposicion Akelosdokeosla
 
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 Airespeterpunk
 
Taller de Drupal - Sesión 4
Taller de Drupal - Sesión 4Taller de Drupal - Sesión 4
Taller de Drupal - Sesión 4SEAT, S.A.
 
Presentacion Ruby on Rails CTIC-Cusco2007
Presentacion Ruby on Rails CTIC-Cusco2007Presentacion Ruby on Rails CTIC-Cusco2007
Presentacion Ruby on Rails CTIC-Cusco2007JuancaPompilla
 
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 WebFacundo E. Goñi Perez
 
Presentación de zan php
Presentación de zan phpPresentación de zan php
Presentación de zan phpCarlos Zantana
 
Android DB por Cesar Cespedes
Android DB por Cesar CespedesAndroid DB por Cesar Cespedes
Android DB por Cesar CespedesLima GTUG
 
Drupal7 para desarrolladores
Drupal7 para desarrolladoresDrupal7 para desarrolladores
Drupal7 para desarrolladoresPedro 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 8Acquia
 

Similar to 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
 

More from Alessandro Mascherpa

More from 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
 

Recently uploaded

Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...FacuMeza2
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxJOSEFERNANDOARENASCA
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaarkananubis
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELmaryfer27m
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxpabonheidy28
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativaAdrianaMartnez618894
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024GiovanniJavierHidalg
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMidwarHenryLOZAFLORE
 

Recently uploaded (20)

Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptx
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en mina
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFEL
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docx
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativa
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptx
 

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