Understanding the Entity API Module


Published on

The project Entity API extends the entity API of Drupal core in order to provide an unified way to deal with entities and their properties.

Published in: Technology, Education
  • Be the first to comment

No Downloads
Total views
On SlideShare
From Embeds
Number of Embeds
Embeds 0
No embeds

No notes for slide

Understanding the Entity API Module

  1. 1. Entity APIUnderstanding the Entity API ModuleSergiu SavvaDrupal developerwearepropeople.com
  2. 2. Summary1. An introduction to entities2. Entity types3. Bundles4. Fields5. Entity6. Entity API7. Entity metadata wrapper8. Getters ,Setters, Multilingual9. Entity + From API + Field API
  3. 3. An Introduction to EntitiesWe can build Entity types, which can makeBundles, to which we can add Fields andthen create Entities.Entity types > Bundles > Fields > Entities
  4. 4. Entity typesFieldable entities make Drupal eminentlyflexible. An entity type is a useful abstractionto group together fields.
  5. 5. Entity types● Nodes (content)● User profiles● Taxonomy terms● CommentsSome examples of entity types:
  6. 6. Entity types● label - The human-readable name of the type.● controller class - The name of the class that is used to load theobjects.● fieldable - Set to TRUE if you want your entity type to accept fieldsbeing attached to it.● bundles - An array describing all bundles for this object type.● view modes - An array describing the view modes for the entitytype.You can also build new kinds of entity types if theoptions above dont suit your needs.Read further about using the hook_entity_info()
  7. 7. BundlesBundles are an implementation of an entity typeto which fields can be attached. You can considerbundles as subtypes of an entity type.Bundles for entity type node:
  8. 8. FieldsFields can be added to any of the bundles orentity types to help organize their data.
  9. 9. EntityAn entity would be one instance of a particularentity type such as a comment, taxonomy term,user profile or a bundle such as a blog post, articleor product.● An entity type is a base class● A bundle is an extended class● A field is a class member, property, variable or fieldinstance (depending on your naming preference)● An entity is an object or instance of a base or extendedclass
  10. 10. Relation Entity - FieldEntity Fieldstitlebodytaxonomysome textnumberBundlesNode PageNews titlebodytaxonomysome textnumber
  11. 11. EntityEntity functions from core:entity_get_controller Get the entity controller class for an entity type.entity_get_info Get the entity info array of an entity type.entity_label Returns the label of an entity.entity_language Returns the language of an entity.entity_load Load entities from the database.entity_load_unchanged Loads the unchanged, i.e. not modified, entity from thedatabase.entity_prepare_view Invoke hook_entity_prepare_view().entity_uri Returns the URI elements of an entity.
  12. 12. Core entitiesentity_get_info($entity_type = NULL)File : common.incGet the entity info array of an entity type.
  13. 13. Entity vs. Entity API
  14. 14. Entity API (contrib)The project Entity API extends the entity API of Drupalcore in order to provide an unified way to deal withentities and their properties.Additionally, it provides an entity CRUD* controller, whichhelps with simplifying the creation of new entity types.[ CRUD - Create, read, update and delete ]
  15. 15. Entity API (contrib)Name Descriptionentity_access Determines whether the given user has access to an entity.entity_create Create a new entity object.entity_delete Permanently delete the given entity.entity_delete_multiple Permanently delete multiple entities.entity_export Exports an entity.entity_import Imports an entity.entity_load_single A wrapper around entity_load() to load a single entity by name or numeric id.entity_metadata_wrapper Returns a property wrapper for the given data.entity_revision_delete Deletes an entity revision.entity_revision_load Loads an entity revision.entity_save Permanently save an entity.entity_theme Implements hook_theme().entity_type_is_fieldable Checks whether an entity type is fieldable.entity_view Generate an array for rendering the given entities.entity_get_property_info Get the entity property info array of an entity type.
  16. 16. Entity API hooks● hook_entity_view● hook_entity_insert● hook_entity_update● hook_entity_presave● hook_entity_delete● hook_entity_load
  17. 17. Entity metadata wrapper
  18. 18. Why use entity metadata wrappers?● Makes your code more readable● Provides a standardised way of accessing field values and entitiesthrough an API● Stops you hard coding the language key into the array lookups● Stops those nasty PHP warnings when you are trying to accessproperties that do not exist● The wrapper autoloads entities (when used in conjunction withthe ->value() accessor), which allow you to chain the callbacks
  19. 19. Entity metadata wrapper$wrapper = entity_metadata_wrapper(node, $nid);$mail = $wrapper-->author---->mail-->value();$wrapper-->author-->mail-->set(fago@example.com);$text = $wrapper-->field_text-->value();$wrapper-->language(de)-->field_text-->value();$terms = $wrapper-->field_tags-->value();$wrapper-->field_tags[] = $term;$options = $wrapper-->field_tags-->optionsList();$label = $wrapper-->field_tags[0]-->label();$access = $wrapper-->field_tags-->access(edit);
  20. 20. Entity metadata wrapper$node = entity_load_single(node,$nid);$entity_wrapper = entity_metadata_wrapper(node, $node);$entity_wrapper = entity_metadata_wrapper(node, $nid);Loador
  21. 21. Entity metadata wrapperGetters$entity_wrapper = entity_metadata_wrapper(node, 1);dpm($entity_wrapper->field_product->raw());dpm($entity_wrapper->field_product->value());
  22. 22. Entity metadata wrapperGetters$entity_wrapper = entity_metadata_wrapper(node, 1);dpm($entity_wrapper->value());
  23. 23. Entity metadata wrapper$wrapper = entity_metadata_wrapper(node, 1);$mail = $wrapper->author->mail->value();$wrapper->author->mail->set(foo@mail.com);$wrapper->author->mail = foo@mail.com;$wrapper->author->save();Setters
  24. 24. Entity metadata wrapperMultilingual$wrapper = entity_metadata_wrapper(node,1);dpm($wrapper->title_field->value());dpm($wrapper->language(ro)->title_field->value());dpm($wrapper->language(ru)->title_field->value());
  25. 25. Entity metadata wrapper in life// add the items from the show_features taxonomy$show_features = array();$features = $series->field_features;if (is_array($features[LANGUAGE_NONE])) {foreach($features[LANGUAGE_NONE] as $tids) {$tid = $tids[tid];$term = taxonomy_term_load($tid);$featureList[] = $term->name;}}Old approach
  26. 26. Entity metadata wrapper in life// add the items from the show_features taxonomy$show_features = array();foreach ($wrapper->field_features->value() => $feature) {$show_features[] = $feature->name;}Entity metadata wrapper approach
  27. 27. Entity + From API + Field API
  28. 28. Entity + Form API + Field APIfunction myForm($form, $form_state){if (empty($id)){$entity = entity_create($entityType, array(type => $bundleName));} else {$entity = entity_load_single($entityType, $id);}field_attach_form($entityType, $entity, $form, $form_state);$from[#submit][] = myCustomSubmit;return $form;}function myCustomSubmit($form, $form_state){$entity = $form_state[values][myEntity];field_attach_submit($entity_type, $entity, $form, $form_state);}
  29. 29. Entity + Form API + Field APIfunction myForm($form, $form_state){$from[my_data] = array(#type => container,#parents => array(my_data),#tree => TRUE,);field_attach_form($entityType, $entity, $form[my_data], $form_state);$from[#submit][] = myCustomSubmit;return $form;}function myCustomSubmit($form, $form_state){$entity = $form_state[values][my_data][myEntity];field_attach_submit($entity_type, $entity, $form[my_data], $form_state);}
  30. 30. Thank you!