MADs about Drupal: Programación de entities para D7

21
Entities en D7 MADs about Drupal 07/02/2013

description

 

Transcript of MADs about Drupal: Programación de entities para D7

Page 1: MADs about Drupal: Programación de entities para D7

Entities en D7MADs about Drupal 07/02/2013

Page 2: MADs about Drupal: Programación de entities para D7

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Gracias