Drupal 7:von Objektenzu EntitiesDrupal Meetup Stuttgart 3.11.2011 - bb
Drupal 6: Objekte mit proprietären APIsObjekte sind z.B.- Nodes- Terms- User- Blocks- FilesFelder -> CCK ! (nur für Nodes)
Drupal 6: Objekte mit proprietären APIsBeispiele:node_load( $param = array(), $revision = NULL, $reset = NULL)user_save($a...
Drupal 6: Objekte mit proprietären APIsBeispiele:node_load( $param = array(), $revision = NULL, $reset = NULL)user_save($a...
Ziel: Vereinheitlichung - Objekt & CRUD-APIEin Objekt kann- erzeugt werden     (Create)- gelesen werden     (Read)- veränd...
Ziel: Vereinheitlichung - Objekt & Field-APIZu JEDEM Objekt können beliebige Felder angelegtwerden- Text- Zahlen- Links- R...
Drupal 7: Voilá, Entities !Konzepte:                  Beispiele:- Entity Types             - node, user, vocabulary- Entit...
Codevergleich Drupal 6 <-> Drupal 7Drupal 6 (Database API + Node API)$query = "SELECT nid FROM {node}           WHERE (typ...
Abstraktionsebene: Entity Controller    Drupal 6:           Drupal 7:       Modul                Modul        API         ...
Bsp: Drupal Variablen als Entities/**                                                         class VariableController ext...
Bsp: Drupal Variablen als Entities/** * Implements hook_menu() */                                                 function...
Ausgabe des Variablen-Beispiels/variablelist:    /variable/user_picture_dimensions:
Drupal 7: Vieles ist schon da, aber...Beispiele aus dem D7 Core API:function node_load($nid = NULL, $vid = NULL, $reset = ...
Drupal 7: Vieles ist schon da, aber...Beispiele aus dem D7 Core API:function node_load($nid = NULL, $vid = NULL, $reset = ...
Drupal 7: Vieles ist schon da, aber...Vieles ist noch unvollständig:- Remember CRUD? Im Core gibt es nur das "R" !- Es gib...
Abhilfe: Contributed ModulesEntity API - Ergänzt das Core API, z.B. mit vollständigem CRUDhttp://drupal.org/project/entity...
Demo: ECK, Views, DB- Erzeugen von Entity Types, Bundles, Entities- Listen in Views- Repräsentation in der Datenbank
Fragen / DiskussionZum Weiterlesen:http://www.davetech.com/blog/introduction_drupal_7_entities_and_fieldshttp://www.istos....
Upcoming SlideShare
Loading in …5
×

Drupal Entities

3,392 views

Published on

Präsentation beim Drupal Meetup Stuttgart 3.11.2011

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
3,392
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
13
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Drupal Entities

  1. 1. Drupal 7:von Objektenzu EntitiesDrupal Meetup Stuttgart 3.11.2011 - bb
  2. 2. Drupal 6: Objekte mit proprietären APIsObjekte sind z.B.- Nodes- Terms- User- Blocks- FilesFelder -> CCK ! (nur für Nodes)
  3. 3. Drupal 6: Objekte mit proprietären APIsBeispiele:node_load( $param = array(), $revision = NULL, $reset = NULL)user_save($account, $array = array(), $category = account)file_delete( $path)taxonomy_get_term_by_name($name)
  4. 4. Drupal 6: Objekte mit proprietären APIsBeispiele:node_load( $param = array(), $revision = NULL, $reset = NULL)user_save($account, $array = array(), $category = account)file_delete( $path)taxonomy_get_term_by_name($name)Problem:- uneinheitliche Behandlung durch spezifische APIs- Felder nur über contributed modules (CCK, Content Profile, ...)
  5. 5. Ziel: Vereinheitlichung - Objekt & CRUD-APIEin Objekt kann- erzeugt werden (Create)- gelesen werden (Read)- verändert werden (Update)- gelöscht werden (Delete)
  6. 6. Ziel: Vereinheitlichung - Objekt & Field-APIZu JEDEM Objekt können beliebige Felder angelegtwerden- Text- Zahlen- Links- Referenzen- Dateien- ...Auch diese können gelesen, verändert, gelöscht werden.
  7. 7. Drupal 7: Voilá, Entities !Konzepte: Beispiele:- Entity Types - node, user, vocabulary- Entity Bundles - page, article, blog- Entity Properties - author, created, status- Fields - field_xyz& Entity API / Field API
  8. 8. Codevergleich Drupal 6 <-> Drupal 7Drupal 6 (Database API + Node API)$query = "SELECT nid FROM {node} WHERE (type = article AND status = 1) ORDER BY created DESC";$result = db_query($query);while ($nid = db_result($result)) { $articles[] = node_load($res);}Drupal 7 (Entity API):$query = new EntityFieldQuery();$result = $query->entityCondition (entity_type, node) ->entityCondition (bundle), article) ->propertyCondition (status, 1); ->propertyOrderBy (created, DESC); ->execute();$articles = entity_load (node, array_keys($result[node]);
  9. 9. Abstraktionsebene: Entity Controller Drupal 6: Drupal 7: Modul Modul API Entity Controller Daten API Daten
  10. 10. Bsp: Drupal Variablen als Entities/** class VariableController extends * Implements hook_entity_info() DrupalDefaultEntityController { */ }function variables_entity_info() { function variable_load($variable_id = NULL, $reset = FALSE) { $info[variable] = array( $variable_ids = (isset($variable_id) ? label => t(Drupal Variable), array($variable_id) : array()); $variable = variable_load_multiple($variable_ids, controller class => VariableController, $reset); base table => variable, return $variable ? reset($variable) : FALSE; uri callback => variable_uri, } fieldable => FALSE, function variable_load_multiple($variable_ids = array(), $conditions = array(), $reset = FALSE) { entity keys => array(id => name), return entity_load(variable, $variable_ids, static cache => TRUE, $conditions, $reset); } bundles => array( function variable_uri($variable) { Entity Controller variable => array(label => Variable), return array( ), path => variable/ . $variable->name, ); view modes => array( } full => array(label => t(Full), function variables_field_extra_fields() { custom settings => FALSE), $fields = array(); $fields[variable][value] = array( ) form => array( ); name => array( label => t(value), return $info; description => t(Variable Value),} ), ), ); return $fields; }
  11. 11. Bsp: Drupal Variablen als Entities/** * Implements hook_menu() */ function variable_list() {function mymodule_menu() { $query = new EntityFieldQuery(); $items[variable/%variable] = array( $result = $query->entityCondition title callback => variable_page_title, (entity_type, variable) title arguments => array(1), ->propertyOrderBy(name,DESC) page callback => variable_page_view, ->execute(); page arguments => array(1), $variables = entity_load(variable, type => MENU_CALLBACK, array_keys($result[variable])); access callback => TRUE, ); $output = ; $items[variablelist] = array( foreach($variables as $var){ Custom Module title => List of Variables, page callback => variable_list, $output .= l($var->name,variable/ . type => MENU_CALLBACK, $var->name) . <br />; access callback => TRUE, } ); return $output; } return $items;}function variable_page_title($variable) { return Variable: . $variable->name;}function variable_page_view($variable) { return &lt; . $variable->value . &gt;;}
  12. 12. Ausgabe des Variablen-Beispiels/variablelist: /variable/user_picture_dimensions:
  13. 13. Drupal 7: Vieles ist schon da, aber...Beispiele aus dem D7 Core API:function node_load($nid = NULL, $vid = NULL, $reset = FALSE) { $nids = (isset($nid) ? array($nid) : array()); $conditions = (isset($vid) ? array(vid => $vid) : array()); $node = node_load_multiple($nids, $conditions, $reset); return $node ? reset($node) : FALSE;}function node_load_multiple($nids = array(), $conditions = array(), $reset = FALSE) { return entity_load(node, $nids, $conditions, $reset);}
  14. 14. Drupal 7: Vieles ist schon da, aber...Beispiele aus dem D7 Core API:function node_load($nid = NULL, $vid = NULL, $reset = FALSE) { $nids = (isset($nid) ? array($nid) : array()); $conditions = (isset($vid) ? array(vid => $vid) : array()); $node = node_load_multiple($nids, $conditions, $reset); return $node ? reset($node) : FALSE;}function node_load_multiple($nids = array(), $conditions = array(), $reset = FALSE) { return entity_load(node, $nids, $conditions, $reset);}function taxonomy_get_term_by_name($name) { return taxonomy_term_load_multiple(array(), array(name => trim($name)));}function taxonomy_term_load_multiple($tids = array(), $conditions = array()) { return entity_load(taxonomy_term, $tids, $conditions);}
  15. 15. Drupal 7: Vieles ist schon da, aber...Vieles ist noch unvollständig:- Remember CRUD? Im Core gibt es nur das "R" !- Es gibt noch kein User Interface zu Entities- Integration z.B. in Views, Panels, Rules, Features, Pathauto, Display Suite, ...Manches ist nur vorläufig:function taxonomy_get_term_by_name($name) { return taxonomy_term_load_multiple(array(), array(name => trim($name)));}function taxonomy_term_load_multiple($tids = array(), $conditions = array()) { return entity_load(taxonomy_term, $tids, $conditions);}Die Verwendung von $conditions ist deprecated, und wird in D8 wahrscheinlichwieder verschwinden!
  16. 16. Abhilfe: Contributed ModulesEntity API - Ergänzt das Core API, z.B. mit vollständigem CRUDhttp://drupal.org/project/entityFile Entity - Macht Files fieldablehttp://drupal.org/project/file_entityEntity Construction Kit (ECK) - User Interface zur Verwaltung von Entitieshttp://drupal.org/project/eckEntity Reference - Referenzen auf Entities, ähnlich node / user referencehttp://drupal.org/project/entityreferenceManches wird mit D8 im Core landen, anderes in der Versenkungverschwinden - schwer zu beurteilen!
  17. 17. Demo: ECK, Views, DB- Erzeugen von Entity Types, Bundles, Entities- Listen in Views- Repräsentation in der Datenbank
  18. 18. Fragen / DiskussionZum Weiterlesen:http://www.davetech.com/blog/introduction_drupal_7_entities_and_fieldshttp://www.istos.it/category/blog-tags/drupal-entitieshttp://de.wetena.com/blog/2011/04/13/entities-in-drupal-7http://www.slideshare.net/alexshr/entity-apiDiese Folien als PDF:http://www.slideshare.net/drubb/drupal-entities

×