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