# Entity Metadata Wrapper Die Funktion `entity_metadata_wrapper()` ist verdammt leistungsstark, wenn es darum geht, mit Entities (egal welchen) zu arbeiten. Egal ob es darum geht, bestimmte Daten/Felder zu laden oder Referenzierungen (z.B. Node -> Author [User]) zu laden. Diese Funktionalität wird vom contrib Modul [[https://www.drupal.org/project/entity|Entity API]] bereitgestellt, welches daher installiert sein muss, um die Funktion nutzen zu können. Der Gegenpart für Entity Metadata Wrapper ist [[property_info_fuer_entity_metadata_wrapper_definieren|hook_property_info()]]. Hier werden die Informationen definiert, die dann im Wrapper genutzt werden können. Eine kleine Dokumentation der Funktion gibt es auch auf drupal.org: [[https://www.drupal.org/documentation/entity-metadata-wrappers|Entity metadata wrappers]] Ebenfalls empfohlen ist eine Blick in die README.txt des Moduls: [[http://cgit.drupalcode.org/entity/tree/README.txt?id=refs/heads;id2=7.x-1.x|README.txt]] ## Wrapper laden/initialisieren Zuerst muss der Wrapper geladen werden. Um z.B. eine Node als Quelle zu nutzen, kann folgendes Snippet genutzt werden: // Load Wrapper for a node. $node_wrapper = entity_metadata_wrapper('node', $node); // Load Wrapper for a user. $user_wrapper = entity_metadata_wrapper('user', $user); Die Funktion `entity_metadata_wrapper($type, $data)` erwartet immer die beiden Argumente $type (Was für ein Entity Typ) und das entsprechende Entity Objekt selber (z.B. ein Node Objekt). ## Wrapper analysieren Da die Entities alle möglichen Properties (z.B. Felder) und Methoden haben können, ist es nicht so einfach herauszufinden, welche Möglichkeiten mir der Wrapper zur Verfüng steht. Deshalb gibt es die Methode `getPropertyInfo()`, die es bei jedem Wrapper gibt. // Print the skeleton of the current wrapper (devel module is needed). dsm($wrapper->getPropertyInfo()); Diese Funktion kann überall innerhalb des Wrapper genutzt werden. Also, beispielsweise auch auf einer Child-Methode: // Print the skeleton of the referenced user object (devel module is needed). dsm($node_wrapper->author->getPropertyInfo()); ## Über Properties iterieren Einige Properties auf einem Wrapper-Objekt können auch mehrere Values enthalten. Hier funktioniert die `value()` Methode natürlich nicht direkt. Entity Metadata Wrapper stellt hierfür deshalb eine Methode zum Iterieren zur Verfügung: `getIterator()`. foreach ($node_wrapper->field_tags->getIterator() as $tag) { // Print the skeleton of the Tag (Taxonomy Term) object. dsm($tag->getPropertyInfo()); // Print the name of the Tag (Taxonomy Term Title). dsm($tag->name->value(), 'Tag Name'); } ## Values ändern Mit dem Entity Metadata Wrapper können Daten nicht nur geladen werden, sondern auch geschrieben werden. Damit wird diese Funktion erst so richtig leistungsstark und eigentlich unverzichtbar bei der Arbeit mit Drupal. Beispiel: Wir ändern den Wert eines Nummern-Feldes ("field_number") einer Node. $node_wrapper->field_number->set(32); $node_wrapper->save(); ## Verschiedene Anwendungsszenarien ### Lade Informationen über den Autor (User) einer Node $node_wrapper = entity_metadata_wrapper('node', $node); $author_mail = $node_wrapper->author->mail->value(); {{tag>drupal7 entities snippets}}