SlideShare a Scribd company logo
1 of 49
Download to read offline
CURSO DE ADMINISTRACIÓN AVANZADA E 
DESENVOLVEMENTO DE DRUPAL 
TEMA 4: API DRUPAL 
8 - 12 setembro 2014 – Santiago de Compostela
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
https://api.drupal.org
https://www.drupal.org/documentation/develop 
https://www.drupal.org/coding-standards 
https://www.drupal.org/project/examples
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
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
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
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
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 !!!!!
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 )
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
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
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
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);
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
Curso Drupal Avanzado - OSL 
19 
DRUPAL 7 API 
● Comprobamos sintaxis con módulo coder
5Exercicio 
cursos.cixug.es
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); 
}
Curso Drupal Avanzado - OSL 
22 
DRUPAL 7 API 
dpm($account) => hook_user_login
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); 
} 
}
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'); 
?>
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); 
} 
}
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);
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
Curso Drupal Avanzado - OSL 
28 
DRUPAL 7 API 
profile2 
user_readonly
6Exercicio 
cursos.cixug.es
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
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
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
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.
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
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
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
7Exercicio 
cursos.cixug.es
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”
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>
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.
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
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)
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; 
}
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; 
}
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))); 
}
hook_form_alter
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'; 
} 
}
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))); 
}
8Exercicio 
cursos.cixug.es

More Related Content

Similar to Curso CDA: Drupal API

Tutorial eXeLearning
Tutorial eXeLearningTutorial eXeLearning
Tutorial eXeLearningAna
 
PROGRAMACIÓN DE APLICACIÓNS CO FRAMEWORK CAKEPHP
PROGRAMACIÓN DE APLICACIÓNS CO FRAMEWORK CAKEPHPPROGRAMACIÓN DE APLICACIÓNS CO FRAMEWORK CAKEPHP
PROGRAMACIÓN DE APLICACIÓNS CO FRAMEWORK CAKEPHPousli07
 
Elaboración e emprego de materias didácticos dixitais: Emprego de eXe-Learnin...
Elaboración e emprego de materias didácticos dixitais: Emprego de eXe-Learnin...Elaboración e emprego de materias didácticos dixitais: Emprego de eXe-Learnin...
Elaboración e emprego de materias didácticos dixitais: Emprego de eXe-Learnin...Juan Marcos Filgueira
 
Como facer PHP fodidamente rápido
Como facer PHP fodidamente rápidoComo facer PHP fodidamente rápido
Como facer PHP fodidamente rápidoFran Diéguez
 
O servidor do_centro_e_a_aplicacion_de_recursos
O servidor do_centro_e_a_aplicacion_de_recursosO servidor do_centro_e_a_aplicacion_de_recursos
O servidor do_centro_e_a_aplicacion_de_recursosvigotic
 
Manual servidor centro
Manual servidor centroManual servidor centro
Manual servidor centrovigotic
 
Como facer apps fodidamente rápidas: con PHP
 Como facer apps fodidamente rápidas: con PHP Como facer apps fodidamente rápidas: con PHP
Como facer apps fodidamente rápidas: con PHPFran Diéguez
 
Conta de admin Drupal
Conta de admin DrupalConta de admin Drupal
Conta de admin DrupalIago Corral
 
Dev con Joomla componentes modulos plugins
Dev con Joomla componentes modulos pluginsDev con Joomla componentes modulos plugins
Dev con Joomla componentes modulos pluginsousli07
 
mLearning: Ferramentas de avaliación e e-Portfolios (#PLE) (Galego)
mLearning: Ferramentas de avaliación e e-Portfolios (#PLE) (Galego)mLearning: Ferramentas de avaliación e e-Portfolios (#PLE) (Galego)
mLearning: Ferramentas de avaliación e e-Portfolios (#PLE) (Galego)Juan Marcos Filgueira
 

Similar to Curso CDA: Drupal API (14)

Drupal
DrupalDrupal
Drupal
 
Tutorial eXeLearning
Tutorial eXeLearningTutorial eXeLearning
Tutorial eXeLearning
 
131119 almacenamento nube_owncloud
131119 almacenamento nube_owncloud131119 almacenamento nube_owncloud
131119 almacenamento nube_owncloud
 
PROGRAMACIÓN DE APLICACIÓNS CO FRAMEWORK CAKEPHP
PROGRAMACIÓN DE APLICACIÓNS CO FRAMEWORK CAKEPHPPROGRAMACIÓN DE APLICACIÓNS CO FRAMEWORK CAKEPHP
PROGRAMACIÓN DE APLICACIÓNS CO FRAMEWORK CAKEPHP
 
Elaboración e emprego de materias didácticos dixitais: Emprego de eXe-Learnin...
Elaboración e emprego de materias didácticos dixitais: Emprego de eXe-Learnin...Elaboración e emprego de materias didácticos dixitais: Emprego de eXe-Learnin...
Elaboración e emprego de materias didácticos dixitais: Emprego de eXe-Learnin...
 
Como facer PHP fodidamente rápido
Como facer PHP fodidamente rápidoComo facer PHP fodidamente rápido
Como facer PHP fodidamente rápido
 
Servidor centros
Servidor centrosServidor centros
Servidor centros
 
O servidor do_centro_e_a_aplicacion_de_recursos
O servidor do_centro_e_a_aplicacion_de_recursosO servidor do_centro_e_a_aplicacion_de_recursos
O servidor do_centro_e_a_aplicacion_de_recursos
 
Manual servidor centro
Manual servidor centroManual servidor centro
Manual servidor centro
 
Como facer apps fodidamente rápidas: con PHP
 Como facer apps fodidamente rápidas: con PHP Como facer apps fodidamente rápidas: con PHP
Como facer apps fodidamente rápidas: con PHP
 
Conta de admin Drupal
Conta de admin DrupalConta de admin Drupal
Conta de admin Drupal
 
Dev con Joomla componentes modulos plugins
Dev con Joomla componentes modulos pluginsDev con Joomla componentes modulos plugins
Dev con Joomla componentes modulos plugins
 
mLearning: Ferramentas de avaliación e e-Portfolios (#PLE) (Galego)
mLearning: Ferramentas de avaliación e e-Portfolios (#PLE) (Galego)mLearning: Ferramentas de avaliación e e-Portfolios (#PLE) (Galego)
mLearning: Ferramentas de avaliación e e-Portfolios (#PLE) (Galego)
 
Equipo profesor
Equipo profesorEquipo profesor
Equipo profesor
 

More from Alberto Permuy Leal

Patrimonio (in)visibel - CIRS Cervás - Ares - Coruña
Patrimonio (in)visibel - CIRS Cervás - Ares - CoruñaPatrimonio (in)visibel - CIRS Cervás - Ares - Coruña
Patrimonio (in)visibel - CIRS Cervás - Ares - CoruñaAlberto Permuy Leal
 
PATRIMONIO CULTURA Y DRUPAL - DRUPAL DAY ZARAGOZA 2019
PATRIMONIO CULTURA Y DRUPAL - DRUPAL DAY ZARAGOZA 2019PATRIMONIO CULTURA Y DRUPAL - DRUPAL DAY ZARAGOZA 2019
PATRIMONIO CULTURA Y DRUPAL - DRUPAL DAY ZARAGOZA 2019Alberto Permuy Leal
 
Presentación proxecto obaixoulla.gal | patromino + territorio + paisaxes
Presentación proxecto obaixoulla.gal | patromino + territorio + paisaxesPresentación proxecto obaixoulla.gal | patromino + territorio + paisaxes
Presentación proxecto obaixoulla.gal | patromino + territorio + paisaxesAlberto Permuy Leal
 
Cultural Heritage and Drupal - Drupal Day Aveiro 2017
Cultural Heritage and Drupal - Drupal Day Aveiro 2017Cultural Heritage and Drupal - Drupal Day Aveiro 2017
Cultural Heritage and Drupal - Drupal Day Aveiro 2017Alberto Permuy Leal
 
Drupal8 : novedades y nuevas funcionalidades
Drupal8 : novedades y nuevas funcionalidadesDrupal8 : novedades y nuevas funcionalidades
Drupal8 : novedades y nuevas funcionalidadesAlberto Permuy Leal
 
A Cultura da Auga no proxecto Abeancos.gal
A Cultura da Auga no proxecto Abeancos.galA Cultura da Auga no proxecto Abeancos.gal
A Cultura da Auga no proxecto Abeancos.galAlberto Permuy Leal
 
Curso CDA: Seguridade e rendemento en Drupal
Curso CDA: Seguridade e rendemento en DrupalCurso CDA: Seguridade e rendemento en Drupal
Curso CDA: Seguridade e rendemento en DrupalAlberto Permuy Leal
 
Introdución ao software libre - O Grove 2011
Introdución ao software libre - O Grove 2011Introdución ao software libre - O Grove 2011
Introdución ao software libre - O Grove 2011Alberto Permuy Leal
 
Presentacion I Noite Drupal GNU Linux
Presentacion I Noite Drupal GNU LinuxPresentacion I Noite Drupal GNU Linux
Presentacion I Noite Drupal GNU LinuxAlberto Permuy Leal
 
Servidores Linux Compostela 2010
Servidores Linux Compostela 2010Servidores Linux Compostela 2010
Servidores Linux Compostela 2010Alberto Permuy Leal
 
Construccion sitios web Drupal - Parte 12
Construccion sitios web Drupal - Parte 12Construccion sitios web Drupal - Parte 12
Construccion sitios web Drupal - Parte 12Alberto Permuy Leal
 
Construccion sitios web Drupal - Parte 1
Construccion sitios web Drupal - Parte 1 Construccion sitios web Drupal - Parte 1
Construccion sitios web Drupal - Parte 1 Alberto Permuy Leal
 
VII Xornadas Sw Libre 2010 - Drupal
VII Xornadas Sw Libre 2010 - DrupalVII Xornadas Sw Libre 2010 - Drupal
VII Xornadas Sw Libre 2010 - DrupalAlberto Permuy Leal
 
Xornadas 09 Servidores Caseros Apermuy
Xornadas 09 Servidores Caseros ApermuyXornadas 09 Servidores Caseros Apermuy
Xornadas 09 Servidores Caseros ApermuyAlberto Permuy Leal
 

More from Alberto Permuy Leal (20)

Patrimonio (in)visibel - CIRS Cervás - Ares - Coruña
Patrimonio (in)visibel - CIRS Cervás - Ares - CoruñaPatrimonio (in)visibel - CIRS Cervás - Ares - Coruña
Patrimonio (in)visibel - CIRS Cervás - Ares - Coruña
 
Rest en tiempos de Drupal
Rest en tiempos de DrupalRest en tiempos de Drupal
Rest en tiempos de Drupal
 
PATRIMONIO CULTURA Y DRUPAL - DRUPAL DAY ZARAGOZA 2019
PATRIMONIO CULTURA Y DRUPAL - DRUPAL DAY ZARAGOZA 2019PATRIMONIO CULTURA Y DRUPAL - DRUPAL DAY ZARAGOZA 2019
PATRIMONIO CULTURA Y DRUPAL - DRUPAL DAY ZARAGOZA 2019
 
Presentación proxecto obaixoulla.gal | patromino + territorio + paisaxes
Presentación proxecto obaixoulla.gal | patromino + territorio + paisaxesPresentación proxecto obaixoulla.gal | patromino + territorio + paisaxes
Presentación proxecto obaixoulla.gal | patromino + territorio + paisaxes
 
Introducción a redes TOR
Introducción a redes TORIntroducción a redes TOR
Introducción a redes TOR
 
Cultural Heritage and Drupal - Drupal Day Aveiro 2017
Cultural Heritage and Drupal - Drupal Day Aveiro 2017Cultural Heritage and Drupal - Drupal Day Aveiro 2017
Cultural Heritage and Drupal - Drupal Day Aveiro 2017
 
Drupal8 : novedades y nuevas funcionalidades
Drupal8 : novedades y nuevas funcionalidadesDrupal8 : novedades y nuevas funcionalidades
Drupal8 : novedades y nuevas funcionalidades
 
A Cultura da Auga no proxecto Abeancos.gal
A Cultura da Auga no proxecto Abeancos.galA Cultura da Auga no proxecto Abeancos.gal
A Cultura da Auga no proxecto Abeancos.gal
 
Curso CDA: Seguridade e rendemento en Drupal
Curso CDA: Seguridade e rendemento en DrupalCurso CDA: Seguridade e rendemento en Drupal
Curso CDA: Seguridade e rendemento en Drupal
 
Curso CDA: Drush CLI Drupal
Curso CDA: Drush CLI DrupalCurso CDA: Drush CLI Drupal
Curso CDA: Drush CLI Drupal
 
Mellorando o sitio web
Mellorando o sitio webMellorando o sitio web
Mellorando o sitio web
 
Nodos e taxonomia en Drupal
Nodos e taxonomia en DrupalNodos e taxonomia en Drupal
Nodos e taxonomia en Drupal
 
Introdución ao software libre - O Grove 2011
Introdución ao software libre - O Grove 2011Introdución ao software libre - O Grove 2011
Introdución ao software libre - O Grove 2011
 
Obradoiro Drupal
Obradoiro DrupalObradoiro Drupal
Obradoiro Drupal
 
Presentacion I Noite Drupal GNU Linux
Presentacion I Noite Drupal GNU LinuxPresentacion I Noite Drupal GNU Linux
Presentacion I Noite Drupal GNU Linux
 
Servidores Linux Compostela 2010
Servidores Linux Compostela 2010Servidores Linux Compostela 2010
Servidores Linux Compostela 2010
 
Construccion sitios web Drupal - Parte 12
Construccion sitios web Drupal - Parte 12Construccion sitios web Drupal - Parte 12
Construccion sitios web Drupal - Parte 12
 
Construccion sitios web Drupal - Parte 1
Construccion sitios web Drupal - Parte 1 Construccion sitios web Drupal - Parte 1
Construccion sitios web Drupal - Parte 1
 
VII Xornadas Sw Libre 2010 - Drupal
VII Xornadas Sw Libre 2010 - DrupalVII Xornadas Sw Libre 2010 - Drupal
VII Xornadas Sw Libre 2010 - Drupal
 
Xornadas 09 Servidores Caseros Apermuy
Xornadas 09 Servidores Caseros ApermuyXornadas 09 Servidores Caseros Apermuy
Xornadas 09 Servidores Caseros Apermuy
 

Curso CDA: Drupal API

  • 1. CURSO DE ADMINISTRACIÓN AVANZADA E DESENVOLVEMENTO DE DRUPAL TEMA 4: API DRUPAL 8 - 12 setembro 2014 – Santiago de Compostela
  • 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
  • 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. 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. 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. 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
  • 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. 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. 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. 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. 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
  • 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. 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
  • 19. Curso Drupal Avanzado - OSL 19 DRUPAL 7 API ● Comprobamos sintaxis con módulo coder
  • 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. Curso Drupal Avanzado - OSL 22 DRUPAL 7 API dpm($account) => hook_user_login
  • 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. 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. 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. 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. 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. Curso Drupal Avanzado - OSL 28 DRUPAL 7 API profile2 user_readonly
  • 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. 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. 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. 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. 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. 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. 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
  • 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. 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. 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. 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. 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. 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. 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. 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))); }
  • 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. 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))); }