2. Resumen
● ¿Qué es una entidad?
● ¿Cómo trabajar con entidades?
● ¿Cómo crear nuevas entidades?
3. Resumen
● ¿Qué es una entidad?
● ¿Cómo trabajar con entidades?
● ¿Cómo crear nuevas entidades?
Entity API
4. 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
6. 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
7. 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()
...
8. 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
11. 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
12. 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();
14. 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();
■ ...
15. 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
16. 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
17. 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
18. Entity API Admin UI
● Se activa mediante hook_entity_info()
● Se puede personalizar sobreescribiendo el
Controller
● Se adapta bien para gestionar bundle
entities
19. 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
20. 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