![Page 1: MADs about Drupal: Programación de entities para D7](https://reader034.vdocumento.com/reader034/viewer/2022051313/54856643b4af9f640d8b4df2/html5/thumbnails/1.jpg)
Entities en D7MADs about Drupal 07/02/2013
![Page 2: MADs about Drupal: Programación de entities para D7](https://reader034.vdocumento.com/reader034/viewer/2022051313/54856643b4af9f640d8b4df2/html5/thumbnails/2.jpg)
Resumen
● ¿Qué es una entidad?
● ¿Cómo trabajar con entidades?
● ¿Cómo crear nuevas entidades?
![Page 3: MADs about Drupal: Programación de entities para D7](https://reader034.vdocumento.com/reader034/viewer/2022051313/54856643b4af9f640d8b4df2/html5/thumbnails/3.jpg)
Resumen
● ¿Qué es una entidad?
● ¿Cómo trabajar con entidades?
● ¿Cómo crear nuevas entidades?
Entity API
![Page 4: MADs about Drupal: Programación de entities para D7](https://reader034.vdocumento.com/reader034/viewer/2022051313/54856643b4af9f640d8b4df2/html5/thumbnails/4.jpg)
Entities
● Unidades de información
● Definidas en el core de Drupal
● Pueden permitir el uso de fields
● En el core:nodes, users, taxonomy terms, vocabularies, comments, files
![Page 5: MADs about Drupal: Programación de entities para D7](https://reader034.vdocumento.com/reader034/viewer/2022051313/54856643b4af9f640d8b4df2/html5/thumbnails/5.jpg)
Además...
● Ofrecen métodos básicosentity_load(), entity_label(), entity_uri()
● View modesDiferentes visualizaciones (full, teaser...)
● Varios hooks:hook_entity_load(), hook_entity_presave(),hook_entity_insert(), hook_entity_update(),hook_entity_delete(), hook_entity_prepare_view(),hook_entity_view().
![Page 6: MADs about Drupal: Programación de entities para D7](https://reader034.vdocumento.com/reader034/viewer/2022051313/54856643b4af9f640d8b4df2/html5/thumbnails/6.jpg)
Fields
● Entities pueden contener fields
● Es posible definir bundles y revisions
○ Default bundle == entity type○ Tipos de contenido para nodes, vocabularios para
terms● Un bundle define que fields contiene una
entity
![Page 7: MADs about Drupal: Programación de entities para D7](https://reader034.vdocumento.com/reader034/viewer/2022051313/54856643b4af9f640d8b4df2/html5/thumbnails/7.jpg)
EntityFieldQuery
● API para hacer queries sobre entities○ Acepta condiciones tanto a nivel de entity como a
nivel de field○ Acepta queries que afecten a distintos tipos de entity
entityCondition()propertyCondition()fieldCondition()fieldLanguageCondition()...
![Page 8: MADs about Drupal: Programación de entities para D7](https://reader034.vdocumento.com/reader034/viewer/2022051313/54856643b4af9f640d8b4df2/html5/thumbnails/8.jpg)
Entity API
● Módulo casi indispensable
● Añade nuevos hooks y funcionalidades○ Facilita el manejo de entities○ Facilita la creación de nuevos entity types
![Page 9: MADs about Drupal: Programación de entities para D7](https://reader034.vdocumento.com/reader034/viewer/2022051313/54856643b4af9f640d8b4df2/html5/thumbnails/9.jpg)
funciones
● entity_load(), entity_save(), entity_create(),entity_delete()
● entity_view(), entity_access(), entity_label(),entity_uri()
● entity_id(), entity_extract_ids()● entity_export(), entity_import()● entity_get_info(), entity_get_property_info()
core
![Page 10: MADs about Drupal: Programación de entities para D7](https://reader034.vdocumento.com/reader034/viewer/2022051313/54856643b4af9f640d8b4df2/html5/thumbnails/10.jpg)
funciones
● entity_load(), entity_save(), entity_create(),entity_delete()
● entity_view(), entity_access(), entity_label(),entity_uri()
● entity_id(), entity_extract_ids()● entity_export(), entity_import()● entity_get_info(), entity_get_property_info()
core Entity API
![Page 11: MADs about Drupal: Programación de entities para D7](https://reader034.vdocumento.com/reader034/viewer/2022051313/54856643b4af9f640d8b4df2/html5/thumbnails/11.jpg)
hook_entity_property_info
● Permite definir a los módulos propiedades de las entities
● Se utiliza para posteriormente utilizar los metadatos correspondientes
● Incluye métodos como setter, getter, o permisos de acceso
![Page 12: MADs about Drupal: Programación de entities para D7](https://reader034.vdocumento.com/reader034/viewer/2022051313/54856643b4af9f640d8b4df2/html5/thumbnails/12.jpg)
Entity metadata wrappers
● Clases realmente útiles que permiten un acceso sencillo y unificado a las entities y sus fields o properties$wrapper = entity_metadata_wrapper('node', $node);$wrapper = entity_metadata_wrapper('node', $nid);$wrapper->author->profile->field_name->value();$wrapper->author->profile->field_name->set('New name');$wrapper->language('de')->body->summary->value();$wrapper->author->mail->access('edit') ? TRUE : FALSE;$wrapper->author->roles->optionsList();$wrapper->field_files[0]->description = 'The first file';$wrapper->save();$node = $wrapper->value();
![Page 13: MADs about Drupal: Programación de entities para D7](https://reader034.vdocumento.com/reader034/viewer/2022051313/54856643b4af9f640d8b4df2/html5/thumbnails/13.jpg)
Crear nuevos entity types (Entity API)
● Implementar hook_entity_info()
● Especificar clase controller○ Usar EntityAPIController ahorra trabajo○ Definir schema mediante hook_schema()
● Buenas prácticas:○ Crear {entity_type}_load(), {entity_type}_create(),
{entity_type}_delete(), {entity_type}_save()
![Page 14: MADs about Drupal: Programación de entities para D7](https://reader034.vdocumento.com/reader034/viewer/2022051313/54856643b4af9f640d8b4df2/html5/thumbnails/14.jpg)
EntityAPIController
● Invoca los hooks CRUD de forma automática
● Soporta entities basadas en clases● Usar clases facilita las cosas:
○ Personalizando etiquetas, URLs, guardando...○ Resulta útil:
■ $entity->entityType();■ $entity->identifier();■ $entity->view();■ $entity->delete();■ $entity->save();■ ...
![Page 15: MADs about Drupal: Programación de entities para D7](https://reader034.vdocumento.com/reader034/viewer/2022051313/54856643b4af9f640d8b4df2/html5/thumbnails/15.jpg)
Entity API & Fields
● Sólo es necesario declarar la entity como "fieldable"● entity_view() ya incluye los fields● Facilita la gestión de bundles
○ Generear nuevo entity type para los bundles○ Indicar que la nueva entity es "bundle of" la principal○ Field API es invocada e incluida de forma
automática
Ej: Módulo Profile proporciona 2 tipos Profile y Profile type
![Page 16: MADs about Drupal: Programación de entities para D7](https://reader034.vdocumento.com/reader034/viewer/2022051313/54856643b4af9f640d8b4df2/html5/thumbnails/16.jpg)
Entity API & Export
● Especificar el entity type como exportable
● $export = entity_export($entity_type, $entity);
● $entity = entity_import($entity_type, $export);
● Por defecto exporta en formato JSON
![Page 17: MADs about Drupal: Programación de entities para D7](https://reader034.vdocumento.com/reader034/viewer/2022051313/54856643b4af9f640d8b4df2/html5/thumbnails/17.jpg)
Integración con otros módulos
● Entity API permite integrar con otros módulos○ Features gracias a los exportables
○ Integración básica con Views
○ Rules events
○ Token support mediante el módulo Entity tokens
![Page 18: MADs about Drupal: Programación de entities para D7](https://reader034.vdocumento.com/reader034/viewer/2022051313/54856643b4af9f640d8b4df2/html5/thumbnails/18.jpg)
Entity API Admin UI
● Se activa mediante hook_entity_info()
● Se puede personalizar sobreescribiendo el Controller
● Se adapta bien para gestionar bundle entities
![Page 19: MADs about Drupal: Programación de entities para D7](https://reader034.vdocumento.com/reader034/viewer/2022051313/54856643b4af9f640d8b4df2/html5/thumbnails/19.jpg)
Recursos
● Código fuente con los ejemplos○ https://github.com/plopesc/entity_workshop
● Código original del módulo example_task○ http://www.trellon.com/content/blog/creating-own-entities-entity-api
● Presentaciones relacionadas○ http://bxl2011.drupaldays.org/bxl2011.drupaldays.org/node/313.html○ http://www.slideshare.net/jdleonard/drupal-7-entities
● Documentación Drupal.org○ http://drupal.org/node/1260694○ http://drupal.org/node/1343708
![Page 20: MADs about Drupal: Programación de entities para D7](https://reader034.vdocumento.com/reader034/viewer/2022051313/54856643b4af9f640d8b4df2/html5/thumbnails/20.jpg)
Recursos
Módulos contrib comentados en la sesión● Entity API
○ http://drupal.org/project/entity
● Entity View Modes ○ http://drupal.org/project/entity_view_mode
● EntityFieldQuery Views Backend○ http://drupal.org/project/efq_views
● Entity Construction Kit○ http://drupal.org/project/eck
![Page 21: MADs about Drupal: Programación de entities para D7](https://reader034.vdocumento.com/reader034/viewer/2022051313/54856643b4af9f640d8b4df2/html5/thumbnails/21.jpg)
Gracias