MADs about Drupal: Programación de entities para D7
-
Upload
pablo-lopez -
Category
Technology
-
view
1.423 -
download
0
description
Transcript of MADs about Drupal: Programación de entities para D7
Entities en D7MADs about Drupal 07/02/2013
Resumen
● ¿Qué es una entidad?
● ¿Cómo trabajar con entidades?
● ¿Cómo crear nuevas entidades?
Resumen
● ¿Qué es una entidad?
● ¿Cómo trabajar con entidades?
● ¿Cómo crear nuevas entidades?
Entity API
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
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().
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
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()...
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
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
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
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
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();
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()
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();■ ...
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
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
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
Entity API Admin UI
● Se activa mediante hook_entity_info()
● Se puede personalizar sobreescribiendo el Controller
● Se adapta bien para gestionar bundle entities
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
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
Gracias