Programación en Drupal 7 y 8

Anuncio
Programación en Drupal 7 y 8
David Arroyo Menéndez
[2016-06-03 Wed]
David Arroyo Menéndez
Programación en Drupal 7 y 8
[2016-06-03 Wed]
1 / 37
Outline
1
Desde las últimas pinceladas
2
Desde el modelo de datos
3
Desde drupal-el
4
Filosofía de Drupal 8
5
Descubriendo un módulo drupal8: orgmode
David Arroyo Menéndez
Programación en Drupal 7 y 8
[2016-06-03 Wed]
2 / 37
Crear un sustrato dónde jugar: views php
$ drush en viewsphp
También podríamos crear un módulo, modicar plantillas, etc.
David Arroyo Menéndez
Programación en Drupal 7 y 8
[2016-06-03 Wed]
3 / 37
drupalsetmessage
<?php
drupal_set_message('Aprendiendo a usar drupal_set_message'
?>
David Arroyo Menéndez
Programación en Drupal 7 y 8
[2016-06-03 Wed]
4 / 37
t
<?php
print(t('Hello World'));
?>
David Arroyo Menéndez
Programación en Drupal 7 y 8
[2016-06-03 Wed]
5 / 37
watchdog
<?php
function node_save_action($node) {
node_save($node);
watchdog('action', 'Saved @type %title', array('@type' =
}
?>
David Arroyo Menéndez
Programación en Drupal 7 y 8
[2016-06-03 Wed]
6 / 37
userload, usersave
<?php
$account = user_load(1); // load node
user_save($account, array('name' => 'John Smith')); // sav
drupal_set_message('Updated');
?>
David Arroyo Menéndez
Programación en Drupal 7 y 8
[2016-06-03 Wed]
7 / 37
dbquery
<?php
// Drupal 7
// Notice the place holders are now done using the same sy
// Placeholders also don't need to be quoted anymore.
$uid = 1;
$result = db_query('SELECT n.nid, n.title, n.created
FROM {node} n WHERE n.uid = :uid', array(':uid' => $uid));
// Result is returned as a iterable object that returns a
foreach ($result as $record) {
// Perform operations on $record->title, etc. here.
// in this example the available data would be mapped to
// $record->nid, $record->title, $record->created
print($record->title);
}
David Arroyo Menéndez
Programación en Drupal 7 y 8
[2016-06-03 Wed]
8 / 37
nodeload, nodesave
<?php
$node = node_load(1); // load node
$node->title = 'nah, nah, nah, nah, boo, boo'; // Do some
node_save($node); // save your changes
drupal_set_message('Updated');
?>
David Arroyo Menéndez
Programación en Drupal 7 y 8
[2016-06-03 Wed]
9 / 37
dbinsert
Esta función permite insertar registros en la base de datos. Ahora se
verá un ejemplo:
<?php
$nid = db_insert('node') // Table name no longer needs {}
->fields(array(
'title' => 'Example','uid' => 1, 'created' => REQUEST_TIME
))->execute();
David Arroyo Menéndez
Programación en Drupal 7 y 8
[2016-06-03 Wed]
10 / 37
dbupdate
Actualiza registros de la base de datos. Ahora un ejemplo:
<?php
$num_updated = db_update('node') // Table name no longer n
->fields(array(
'uid'=>5,
'status'=>1,
))
->condition('created',REQUEST_TIME-3600,'>=')
->execute();
?>
David Arroyo Menéndez
Programación en Drupal 7 y 8
[2016-06-03 Wed]
11 / 37
dbdelete
Elimina registros de la base de datos. Ahora un ejemplo:
<?php
$nid=5;
$num_deleted=db_delete('node')->condition('nid',$nid)->exe
?>
David Arroyo Menéndez
Programación en Drupal 7 y 8
[2016-06-03 Wed]
12 / 37
dbtransaction
Devuelve una nueva transacción para la base de datos activa.
$transaction = db_transaction();
try {
// Query 1
db_update(...);
// Query 2
db_update(...);
}
catch (Exception $e) {
// Rollback the transaction
$transaction->rollback();
}
// Do something with the exception (inform user, etc)
David Arroyo Menéndez
Programación en Drupal 7 y 8
[2016-06-03 Wed]
13 / 37
Por qué mirar el modelo de datos
Para entender lo nuclear uno puede navegar o mirar el modelo de
datos.
David Arroyo Menéndez
Programación en Drupal 7 y 8
[2016-06-03 Wed]
14 / 37
Tablas node
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
node
node__body
node__comment
node__field_duracion
node__field_image
node__field_ponente
node__field_presentacion
node__field_tags
node_access
node_field_data
node_field_revision
node_revision
node_revision__body
node_revision__comment
node_revision__field_duracion
David Arroyo Menéndez
Programación en Drupal 7 y 8
node_revision__field_image
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[2016-06-03 Wed]
15 / 37
Tablas users
|
|
|
|
|
user__roles
user__user_picture
users
users_data
users_field_data
David Arroyo Menéndez
|
|
|
|
|
Programación en Drupal 7 y 8
[2016-06-03 Wed]
16 / 37
Tablas taxonomy
|
|
|
|
taxonomy_index
taxonomy_term_data
taxonomy_term_field_data
taxonomy_term_hierarchy
David Arroyo Menéndez
Programación en Drupal 7 y 8
|
|
|
|
[2016-06-03 Wed]
17 / 37
Tablas block
|
|
|
|
|
|
block_content
block_content__body
block_content_field_data
block_content_field_revision
block_content_revision
block_content_revision__body
David Arroyo Menéndez
Programación en Drupal 7 y 8
|
|
|
|
|
|
[2016-06-03 Wed]
18 / 37
Tabla watchdog: logs
mysql> desc watchdog;
+-----------+---------------------+------+-----+---------+
| Field
| Type
| Null | Key | Default |
+-----------+---------------------+------+-----+---------+
| wid
| int(11)
| NO | PRI | NULL
|
| uid
| int(10) unsigned
| NO | MUL | 0
|
| type
| varchar(64)
| NO
| MUL |
|
| message | longtext
| NO
|
| NULL
|
| variables | longblob
| NO
|
| NULL
|
| severity | tinyint(3) unsigned | NO
| MUL | 0
|
| link
| text
| YES |
| NULL
|
| location | text
| NO |
| NULL
|
| referer | text
| YES |
| NULL
|
| hostname | varchar(128)
| NO
|
|
|
| timestamp | int(11)
| NO |
| 0
|
David Arroyo Menéndez
Programación en Drupal 7 y 8
19 / 37
+-----------+---------------------+------+-----+---------+
[2016-06-03 Wed]
Tablas search
Estas son las tablas para el buscador estándar de Drupal
| search_dataset
| search_index
| search_total
|
|
|
Otras soluciones serían search api, o apache solr
David Arroyo Menéndez
Programación en Drupal 7 y 8
[2016-06-03 Wed]
20 / 37
Tablas menu
| menu_link_content
| menu_link_content_data
| menu_tree
David Arroyo Menéndez
Programación en Drupal 7 y 8
|
|
|
[2016-06-03 Wed]
21 / 37
Tablas de caché
Estas son las tablas de la caché estándar
| cache_bootstrap
|
| cache_config
|
| cache_container
|
| cache_data
|
| cache_default
|
| cache_discovery
|
| cache_dynamic_page_cache
|
| cache_entity
|
| cache_menu
|
| cache_render
|
| cachetags
|
Otras ideas son varnish o memcaché.
Varnish Cache salva datos en una memoria virtual del servidor y
delega la tarea de decidir que es lo que se salva en memoria o se
David Arroyo Menéndez
Programación en Drupal 7 y 8
[2016-06-03 Wed]
22 / 37
Desde drupal-el: bootstrap.el
M-x
M-x
M-x
M-x
M-x
M-x
M-x
drupal_set_message
drupal-arg
drupal_set_message
drupal_set_title
drupal-t
drupal-variable_set
drupal-watchdog
David Arroyo Menéndez
Programación en Drupal 7 y 8
[2016-06-03 Wed]
23 / 37
Desde drupal-el: common.el
M-x
M-x
M-x
M-x
M-x
M-x
M-x
M-x
drupal-l
drupal-l-extended
drupal_parse_url
drupal_json_decode
drupal_json_encode
drupal_clear_css_cache
drupal_add_js
drupal-base_path
David Arroyo Menéndez
Programación en Drupal 7 y 8
[2016-06-03 Wed]
24 / 37
Desde drupal-el: db.el
M-x drupal-db_query-foreach
M-x drupal-db_query
M-x drupal-db_select
David Arroyo Menéndez
Programación en Drupal 7 y 8
[2016-06-03 Wed]
25 / 37
Desde drupal-el: eld.el
M-x drupal-field_get_items
M-x drupal-field_has_data
David Arroyo Menéndez
Programación en Drupal 7 y 8
[2016-06-03 Wed]
26 / 37
Desde drupal-el: le
M-x
M-x
M-x
M-x
M-x
M-x
M-x
drupal_chmod
drupal_dirname
drupal_mkdir
drupal_realpath
drupal_rmdir
drupal_unlink
drupal-file_save
David Arroyo Menéndez
Programación en Drupal 7 y 8
[2016-06-03 Wed]
27 / 37
Desde drupal-el: globals
M-x
M-x
M-x
M-x
drupal-$base_path
drupal-$base_root
drupal-$base_url
drupal-$user
David Arroyo Menéndez
Programación en Drupal 7 y 8
[2016-06-03 Wed]
28 / 37
Desde drupal-el: hooks
M-x
M-x
M-x
M-x
M-x
M-x
drupal-hook_hook
drupal-hook_menu
drupal-hook_block_info
drupal-hook_block_save
drupal-hook_block_view
drupal-hook_entity_info
David Arroyo Menéndez
Programación en Drupal 7 y 8
[2016-06-03 Wed]
29 / 37
Desde drupal-el: menu
M-x
M-x
M-x
M-x
drupal-menu_cache_clear
drupal-menu_cache_clear_all
drupal-menu_get_active_breadcrumb
drupal-menu_get_active_trail
David Arroyo Menéndez
Programación en Drupal 7 y 8
[2016-06-03 Wed]
30 / 37
Extendiendo y alterando Drupal (Tipos de
extensiones)
Temas
Módulos
Perles de instalación
David Arroyo Menéndez
Programación en Drupal 7 y 8
[2016-06-03 Wed]
31 / 37
Extendiendo y alterando Drupal (Métodos de
alteración)
Hooks: funciones de módulos llamadas de forma especial para
redenir comportamientos del módulo
Plugins: proporciona funcionalidad de un módo orientado a
objetos
Entities: plugins especiales para almacenar tipos de contenido
drupal
Servicios: se dene por un nombre y una interfaz o clase qué
dicta los métodos que son llamados
Routing: qué urls responden a qué (controllers, forms, o
entityforms ).
Events: cuando un evento se lanza, se activa un método en cada
suscriptor registrado
David Arroyo Menéndez
Programación en Drupal 7 y 8
[2016-06-03 Wed]
32 / 37
Tipos de Hooks
hookhelp : dene la ayuda en el interfaz de admin de módulos
hookinstall : tareas cuando el módulo es instalado
hookmail : prepara un mensaje basado en parámetros
hooktheme : registra temas con sus variables, cheros, etc.
hookschema : se denen una o más tablas en un módulo y sus
claves relacionadas e índices.
hooktoolbar : añada ítems a la barra de toolbar
ETC
David Arroyo Menéndez
Programación en Drupal 7 y 8
[2016-06-03 Wed]
33 / 37
Tipos de Plugins
Bloques
Entidades
Views
Búsqueda
David Arroyo Menéndez
Programación en Drupal 7 y 8
[2016-06-03 Wed]
34 / 37
Tipos de Servicios
Enviar Mail
Acceder a la Base de Datos
Traducir texto por interfaz
Etc.
David Arroyo Menéndez
Programación en Drupal 7 y 8
[2016-06-03 Wed]
35 / 37
orgmode.routing.yml
orgmode.import:
path: 'orgmode'
defaults:
_form: '\Drupal\orgmode\Form\ImportForm'
_title: 'Import ORG file'
requirements:
_permission: 'import orgmode to node'
orgmode.export2org:
path: 'node/{node}/export2org'
defaults:
_controller: '\Drupal\orgmode\Controller\ExportControl
_title: 'Export node to orgmode'
requirements:
node: \d+
David
Arroyo Menéndez
Programación
en Drupal
y8
36 / 37
_permission:
'export
node
to 7orgmode'
[2016-06-03 Wed]
<?php
/**
* @file
* Contains \Drupal\orgmode\Form\ImportForm.
*/
namespace Drupal\orgmode\Form;
use
use
use
use
use
Drupal\Core\Form\FormBase;
Drupal\Core\Form\FormStateInterface;
Drupal\node\Entity\Node;
Drupal\orgmode\Utils\ParserPHPOrg;
Drupal;
/**David Arroyo Menéndez
Programación en Drupal 7 y 8
[2016-06-03 Wed]
37 / 37
Descargar