Ce diaporama a bien été signalé.
Le téléchargement de votre SlideShare est en cours. ×

Curso CDA: Drupal API

Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Prochain SlideShare
CDIETS  - 01
CDIETS - 01
Chargement dans…3
×

Consultez-les par la suite

1 sur 49 Publicité

Plus De Contenu Connexe

Plus par Alberto Permuy Leal (19)

Publicité

Plus récents (20)

Curso CDA: Drupal API

  1. 1. CURSO DE ADMINISTRACIÓN AVANZADA E DESENVOLVEMENTO DE DRUPAL TEMA 4: API DRUPAL 8 - 12 setembro 2014 – Santiago de Compostela
  2. 2. Usted es libre de: Copiar, distribuir y comunicar públicamente la obra Hacer obras derivadas Bajo las condiciones siguientes: Reconocimiento - Debe reconocer los créditos de la obra de la manera especificada por el autor o licenciador (pero no de una manera que sugiera que tiene su apoyo o apoyan el uso que hace de su obra). Compartir bajo la misma licencia - Si altera o transforma esta obra, o genera una obra derivada, sólo puede distribuir la obra generada bajo una licencia idéntica a ésta. © 2014 - CIXUG Esta obra fue creada por Alberto Permuy Leal, y está disponible bajo una licencia Reconocimiento-CompartirIgual 3.0 http://creativecommons.org/licenses/by-sa/3.0/deed.es_ES
  3. 3. https://api.drupal.org
  4. 4. https://www.drupal.org/documentation/develop https://www.drupal.org/coding-standards https://www.drupal.org/project/examples
  5. 5. Curso Drupal Avanzado - OSL 2014 5 DRUPAL 7 API I ● Sistema de módulos . Drupal Hooks ● Capa abstración de base de datos ● Sistema de menús ● Form API ● Sistema de subida de arquivos ● Sistema de búsqueda ● Sistema de acceso a nodos ● Sistema de temas ● Constantes e variables
  6. 6. Curso Drupal Avanzado - OSL 2014 6 DRUPAL 7 API II ● Sistema de módulos . Drupal Hooks ● Desenvolvemento de módulos ● Sistema de menús ● Form API ● Capa abstración de base de datos
  7. 7. Curso Drupal Avanzado - OSL 2014 7 DRUPAL 7 API hooks ● A base de Drupal é un sistema de conectores (hooks) ● Drupal consulta a cada módulo se desexan executar algunha acción ● Exemplo: hook_cron . Execución de tarefas programadas ● Os hooks engaden funcionalidades e permiten interactuar co core de Drupal ● Deste xeito podemos alterar o funcionamento de Drupal https://api.drupal.org/api/drupal/includes!module.inc/group/hooks/7
  8. 8. Curso Drupal Avanzado - OSL 2014 8 DRUPAL 7 API hooks II Exemplo :hook_form_alter() ● Permite alterar o comportamento dos formularios que usamos en Drupal ● Permite engadir e eliminar elementos ● Permite engadir e eliminar funcións de validación ● Permite engadir e eliminar funcións de submit form ● O xeito habitual de empregar hooks e creando un módulo https://api.drupal.org/api/drupal/modules!system!system.api.php/function/hook_form_alter/7
  9. 9. 9
  10. 10. Curso Drupal Avanzado - OSL 2014 10 DRUPAL DEVELOPER TOOLBOX básico Extensións para Firefox ● Web developer ● Firebug ● DrupalforFirebug ● LiveHTTPHeaders ● UserAgentSwitcher ● Awesome Screenshot Módulos Drupal ● devel ● forminspect ● coder ● potx Editores de texto ● vi vim nano ● atom Aplicacións ● ssh / scp ● git ● filezilla ● virtaal Recursos web ● pastebin ● evernote Drush !!!!!
  11. 11. Curso Drupal Avanzado - OSL 2014 11 DRUPAL 7 API Creando un módulo ● Crear arquivos ● Implementar os hooks ● Activar módulo ● Limpar a caché ( KEEP CALM AND CLEAR CACHE )
  12. 12. Curso Drupal Avanzado - OSL 2014 12 DRUPAL 7 API Creando un módulo : arquivos ● Crear directorio co nome do módulo /sites/all/modules/exemplo01 ● Recomendado mudar tódolos módulos ao directorio custom ● O primeiro arquivo que crearemos dentro de exemplo01 será exemplo01.info ● A estrutura dos arquivos .info é estándar para tódolos módulos de Drupal Elementos Obrigatorios name = Nome a mostrar na páxina de configuración de módulos description = Descrición a mostrar na páxina de configuración de módulos package = Paquete/grupo ao que asociamos o módulo core = Versión de Drupal para a que escribimos o módulo Opcionais php = Versión mínima de PHP necesaria para executar o módulo files = Matriz de nomes de arquivos asociados ao módulo version = Indica a versión do módulo
  13. 13. Curso Drupal Avanzado - OSL 2014 ● Estilo de comentario /** respecta o extractor de documentación automatizado de Drupal ● @file indica que a seguinte liña é unha descrición da función do arquivo ● Gardar cambios ● Limpar cache vía drush cc all ou /admin/config/development/performance ● Comprobar disponibilidade do módulo vía drush pm-list ou ben dende /admin/modules 13 DRUPAL 7 API Creando un módulo : arquivo .module https://github.com/apermuy/modules-osl/tree/master/exemplo01
  14. 14. Curso Drupal Avanzado - OSL 2014 14 DRUPAL 7 API Creando un módulo : implementar hook ● Crear arquivo exemplo01.module ● Asignar nome ao hook, neste caso para implementar hook_user_login usamos exemplo01_user_login ● Sustituimos hook polo nome do módulo ● So etiqueta de inicio de arquivo PHP <?php /** * Implementa hook_user_login() * */ function exemplo01_user_login(&$edit, &account) { }
  15. 15. 15
  16. 16. Curso Drupal Avanzado - OSL 2014 16 DDRRUUPPAALL 77 AAPPII function watchdog https://api.drupal.org/api/drupal/includes!bootstrap.inc/function/watchdog/7 Escribe unha mesaxe na “bitácora” Drupal admin/reports/dblog => Interface administrativa drush wd-list => drush $type = Categoria, nome do módulo $message = Mensaxe a escribir na “bitácora” Drupal $variables = Array con variables a reemplazar na mensaxe. NULL se a mensaxe xa está traducida ou non se pode traducir $severity = “Severidade” , definido no RFC 3164 BSD Syslog $link = Ligazón asociado á mensaxe watchdog('exemplo01', 'Login ok', $variables = NULL, WATCHDOG_INFO, $link = NULL);
  17. 17. Curso Drupal Avanzado - OSL 2014 17 DDRRUUPPAALL 77 AAPPII function drupal_set_message https://api.drupal.org/api/drupal/includes!bootstrap.inc/function/drupal_set_message/7 “Mostra unha mensaxe por pantalla ao usuario” $message = Mensaxe a mostrar $type = 'status', 'warning' ou 'error' drupal_set_message('Hello from OSL', 'warning')
  18. 18. 18
  19. 19. Curso Drupal Avanzado - OSL 19 DRUPAL 7 API ● Comprobamos sintaxis con módulo coder
  20. 20. 5Exercicio cursos.cixug.es
  21. 21. Curso Drupal Avanzado - OSL 2014 21 DRUPAL 7 API function dpm https://api.drupal.org/api/devel/devel.module/function/dpm “Imprime unha variable no área de mensaxe do sistema” <?php /** * Implementa hook_user_login() * */ function exemplo01_user_login(&$edit, &account) { dpm($account); }
  22. 22. Curso Drupal Avanzado - OSL 22 DRUPAL 7 API dpm($account) => hook_user_login
  23. 23. Curso Drupal Avanzado - OSL 2014 23 DRUPAL 7 API function module_exists https://api.drupal.org/api/drupal/includes%21module.inc/function/module_exists/7 “TRUE se existe o módulo” <?php /** * Implementa hook_user_login() * */ function exemplo01_user_login(&$edit, &account) { if ( module_exists('exemplo02') { $list = module_list(); dpm($list); } }
  24. 24. Curso Drupal Avanzado - OSL 2014 24 DRUPAL 7 API function drupal_get_path https://api.drupal.org/api/drupal/includes!common.inc/function/drupal_get_path/7 “Retorna o path dun item do sistema” <?php $tema = drupal_get_path('theme', 'bartik'); ?>
  25. 25. Curso Drupal Avanzado - OSL 2014 25 DRUPAL 7 API function drupal_add_css https://api.drupal.org/api/drupal/includes%21common.inc/function/drupal_add_css/7 “Engade arquivos CSS ”* <?php drupal_add_css(drupal_get_path('module', 'exemplo2') . '/css/custom.css'), /** * Implementa hook_user_login() * */ function exemplo01_user_login(&$edit, &account) { if ( module_exists('exemplo02') { $list = module_list(); dpm($list); } }
  26. 26. Curso Drupal Avanzado - OSL 26 DRUPAL 7 API Obxecto $user https://api.drupal.org/api/drupal/globals ● Drupal crea un obxecto $user que representa a entidade do usuario actual ● Se o usuario non inicia sesión, será considerado como anónimo. ● Podemos “inspeccionar” o obxecto $user : <?php global $user; dpm($user);
  27. 27. Curso Drupal Avanzado - OSL 27 DRUPAL 7 API Compoñentes do obxecto $user Táboa users ● uid ID de usuario. Clave principal táboa users ● name Nome de usuario ● pass hash sha512 da contrasinal de usuario ● mail email actual usuario ● theme Campo ignorado, mantido por compatibilidade ● signature Firma do usuario ● signature format Formato da firma do usuario ● created Marca de tempo Unix da creación da conta ● access Marca de tempo Unix que indica último acceso ● login Marca de tempo Unix que indica último inicio sesión satisfactorio. ● status 1 se usuario está activo e 0 se inactivo ● timezone Segundos de desprazamento da zona horaria ● language Idioma predeterminado do usuario ● picture Ruta ao arquivo de imaxe de usuario. ● init Email inicial proporcionado polo usuario ao rexistrarse ● data Datos arbitrario almacenados por módulos
  28. 28. Curso Drupal Avanzado - OSL 28 DRUPAL 7 API profile2 user_readonly
  29. 29. 6Exercicio cursos.cixug.es
  30. 30. Curso Drupal Avanzado - OSL 30 DRUPAL 7 API Sistema de menús ● Sistema complexo pero moi potente. ● Tres funcións principais: ● Asignación de retrochamadas(CALLBACKS) ● Control de acceso ● Personalización de menús ● O código fonte básico podemos atopalo en includes/menu.inc
  31. 31. Curso Drupal Avanzado - OSL 31 DRUPAL 7 API Sistema de menús II ● Enrutamento(ou entrega) en Drupal: proceso executado polo core de Drupal que debe determinar qué código executar e como procesar a solicitude. ● Drupal recorta a base da URL e utiliza a parte posterior : https://osl.drupal/?q=node/3 Ruta: node/3 ● Se activamos URL limpas visualizaríamos a URL https://osl.drupal/node/3
  32. 32. Curso Drupal Avanzado - OSL 32 DRUPAL 7 API Sistema de menús III Asinar URLs a funcións ● Drupal pide a tódolos módulos activados que devolvan unha matriz con elementos de menú. ● Matriz con clave de ruta + información sobre o recurso. ● Un dos elementos que deben proporcionar é a retrochamada(CALLBACK) ● CALLBACK = función PHP que se executa cando o navegador solicita unha ruta
  33. 33. Curso Drupal Avanzado - OSL 33 DRUPAL 7 API Sistema de menús III Análise solicitude Drupal 1) Establecemento de ruta. 2) Controlar qué rutas asignar a cada CALLBACK na táboa menu_router e o elementos de menú, vinculados na táboa menu_links. Drupal comproba se é necesario actualizar ou rexenerar a táboa(pouco habitual) 3) Determinar qué entrada da táboa menu_router ten correspondencia coa ruta d Drupal e xenerar un elemento que describa o CALLBACK 4)Abrir os obxectos necesarios para pasar ao CALLBACK 5)Comprobar se o usuario ten permisos para acceder ao CALLBACK 6)Localizar o título e a descripción do elemento de menú para o idioma actual 7) Abrir os includes necesarios 8)Invocar o CALLBACK e devolver o resultado que index.php pasa por theme_page() , o que xenera unha páxina web determinada.
  34. 34. Curso Drupal Avanzado - OSL ● Matriz de elementos na que cada un é unha matriz de pares nome e valor que definen os seus atributos 34 DRUPAL 7 API Sistema de menús III Crear elemento de menu con hook_menu Atributos clave valor de hook_menu CLAVE VALOR title Campo obrigatorio que respresenta o título sen traducir do elemento do menú title callback Función que se usa para xenerar o título. De xeito predeterminado é t(). FALSE se non queremos traducir title arguments Argumentos que se envían á función t() description Descrición sen traducir do elemento do menú page callback Función a invocar para mostrar unha páxina web(HTML) cando o usuario visita a ruta page arguments Matriz de argumentos a pasar ao CALLBACK, os valores enteiros pásanse na URL access callback Función que devolve valor BOOLEANO que determina se o usuario ten dereitos de acceso ao recurso. user_access() é o valor predeterminado. access arguments Matriz de argumentos a pasar á función de CALLBACK de acceso file Arquivo que se inclúe antes de acceder aos CALLBACK. Permite que as funcións residan en arquivos independentes. Debe ser relativo ao directorio do módulo implementado. file path Ruta do directorio indicado en file weight Enteiro que determina a posición relativa dos elementos do menú. Maior peso descenden. menu_name [Opcional] Podemos establecer un menú personalizado se non queremos establecer o elemento no menú navegación
  35. 35. Curso Drupal Avanzado - OSL 35 DRUPAL 7 API Sistema de menús III Crear elemento de menu con hook_menu II CLAVE VALOR type Indicadores que describen as propiedades do elemento do menú MENU_NORMAL_ITEM : Os elementos móstranse na árbore de menús e o administrador pode movelos e ocultalos. MENU_CALLBACK : Retrochamada que rexistra unha ruta para o acceso á función correcta para acceder á URL MENU_SUGGETED_ITEM : Os módulos poden suxerir elementos que o administrador pode habilitar MENU_LOCAL_TASK : As tarefas locais represéntase como fichas de xeito predeterminado. MENU_DEFAULT_LOCAL_TASK : Tódolos conxuntos de tarefas locais deben proporcionar unha tarefa predeterminada, que se vincula á mesma ruta ao facer clic na súa tarefa principal
  36. 36. Curso Drupal Avanzado - OSL 36 DRUPAL 7 API Sistema de menús III Crear elemento de menu con hook_menu III <?php /** * @file * Engade ruta exemplo02 ao sitio web de exemplo */ /** * Implements hook_menu(). */ function exemplo02_menu() { $items['exemplo02'] = array( 'title' => 'Exemplo02', 'page callback' => 'exemplo02_callback', 'access callback' => TRUE, 'type' => MENU_CALLBACK, ); return $items; }/ ** * Callback de páxina exemplo02. */ function exemplo02_callback() { return t('Hello from example02'); } Tipo de “retrochamada”. Xenera URL tipo http://osl.drupal/exemplo02 Ao usar t(), permite traducir a cadea
  37. 37. 7Exercicio cursos.cixug.es
  38. 38. Curso Drupal Avanzado - OSL 38 DRUPAL 7 API Formularios Formulario clásico HTML ● Sección documento HTML que contén: ● contido ● control ● Control ● Permiten aos usuarios a interación con formularios ● O “nome” do control defínese polo atributo name ● O “campo de acción” ou “alcance” dun control defínese nun elemento FORM ● Tipo de controis nun formulario HTML ● “button” ● “checkboxes” ● “radiobuttons” ● “textarea”
  39. 39. Curso Drupal Avanzado - OSL 39 DRUPAL 7 API Formularios Formulario clásico HTML II <form action="http://osl.cixug.es" method="post"> <p> <label for="nombre">Nombre: </label><input type="text" id="nombre"> <input type="submit" value="Enviar"> </p> </form>
  40. 40. Curso Drupal Avanzado - OSL 40 DRUPAL 7 API Formularios API formularios Drupal ● API Drupal abstrae os formulario nunha matriz anidada de propiedades e valores ● Representación dun “formulario Drupal” ● En lugar de xenerar HTML, creamos unha matriz e “deixamos” que Drupal faga o seu traballo. ● A representación dos datos do formulario preséntase de xeito estructurado, polo tanto é moi sinxelo engadir, eliminar, modificar e ordenar elementos de xeito limpo. ● A calquer elemento de formulario podemos asignar unha función dun “tema” ● Podemos engadir validacións ou elementos adicionais a calquer formulario.
  41. 41. Curso Drupal Avanzado - OSL 41 DRUPAL 7 API Formularios API formularios Drupal II ● As operacións de formularios están protexidas contra ataques de inxección. ● Vantaxes de usar FORM API é que tenta garantizar que realmente o formulario creouse dende a instalación de Drupal. ● Drupal define unha clave privada para cada instalación, xenerada de xeito aleatorio. ● settings.php + fix_permissions!!!!! ● Cando enviamos o formulario envíase unha cadea baseada na clave privada e un campo oculto no formulario(form_token) que se comproba cando enviamos o formulario. ● O ID do formulario envíase como parte do conxunto $form http://www.samadhicsecurity.com/p/drupal-7-security.html
  42. 42. Curso Drupal Avanzado - OSL 42 DRUPAL 7 API Formularios API formularios Drupal III ● 3 variables esenciais para traballar con formularios ● $form_id : cadea que identifica o formulario ● $form : matriz que conten elementos do formulario ● $form_state: información sobre o formulario, p.e os valores. dpm($form_state)
  43. 43. Curso Drupal Avanzado - OSL 43 DRUPAL 7 API Formularios API formularios Drupal IV /** * Implementación de hook_menu() * */ function exemplo05_menu() { $items['exemplo05_form'] = array( 'title' => 'Formulario de exemplo', 'page callback' => 'drupal_get_form', 'page arguments' => array('exemplo05_form'), 'access callback' => TRUE, 'type' => MENU_NORMAL_ITEM ); return $items; }
  44. 44. Curso Drupal Avanzado - OSL 44 DRUPAL 7 API Formularios API formularios Drupal V /* * Definición do formulario */ function exemplo05_form() { $form['nome'] = array( '#title' => t('Nome'), '#type' => 'textfield', '#description' => t('Indícanos o teu nome'), ); $form['submit'] = array( '#type' => 'submit', '#value' => t('Enviar'), ); return $form; }
  45. 45. Curso Drupal Avanzado - OSL 45 DRUPAL 7 API Formularios API formularios Drupal VI /** * Validación do formulario */ function exemplo05_form_validate($form, &$form_state) { if ( $form_state['values']['nome'] == 'pepe') { //Indicamos ao API de formularios que o campo non superou a validación form_set_error('nome', t('Pepe non é benvido neste formulario')); } } /** * Procesar o envio do formulario despois da validación */ function exemplo05_form_submit($form, &$form_state) { $nome = $form_state['values']['nome']; drupal_set_message( t('Grazas %nome por enviar o formulario', array('%nome' => $nome))); }
  46. 46. hook_form_alter
  47. 47. Curso Drupal Avanzado - OSL 2014 47 DRUPAL 7 API hook_form_alter https://api.drupal.org/api/drupal/modules!system!system.api.php/function/hook_form_alter/7 “Permite realizar alteración nos formularios antes de renderizalos” function example_form_alter(&$form, &$form_state, $form_id) { dpm($form); // print form ID to messages } function avpc_form_alter(&$form, &$form_state, $form_id) { if ($form_id == 'operativo_node_form'){ $form['field_provincia_operativo']['#access'] = FALSE; $form['field_platerga_operativo']['#access'] = FALSE; $form['#validate'][] = 'avpc_validar_operativo'; } }
  48. 48. Curso Drupal Avanzado - OSL 48 DRUPAL 7 API Formularios API formularios Drupal VI /** * Validación do formulario */ function exemplo05_form_validate($form, &$form_state) { if ( $form_state['values']['nome'] == 'pepe') { //Indicamos ao API de formularios que o campo non superou a validación form_set_error('nome', t('Pepe non é benvido neste formulario')); } } /** * Procesar o envio do formulario despois da validación */ function exemplo05_form_submit($form, &$form_state) { $nome = $form_state['values']['nome']; drupal_set_message( t('Grazas %nome por enviar o formulario', array('%nome' => $nome))); }
  49. 49. 8Exercicio cursos.cixug.es

×