Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
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....
Nächste SlideShare
Wird geladen in …5
×

Drupal Entities

Präsentation beim Drupal Meetup Stuttgart 3.11.2011

  • Loggen Sie sich ein, um Kommentare anzuzeigen.

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

×