Entity Formatter
"Template driven formatting"
Walter Jenner, Web Entwickler bei Form & Code.
Überblick
- Theming vereinfachen
- Für Felder die an Entities hängen
- Output im Template definieren
Beispiel
<?php
// Create the entity formatter object.
$page = new PageNodeFormatter($node);
?>
<article class="page">
<?php
// Print a summary of the body trimmed to 250 chars.
print $page->getBody()->summary(250);
?>
<?php
// Print all images in "field_images" using the "thumbnail" image style.
foreach ($page->getImages() as $image) {
print $image->setImageStyle('thumbnail')->img();
}
?>
</article>
node--page.tpl.php
Output im Template definieren
- Umgehen der Display settings
- Einstellungsmöglichkeiten decken nie alle Fälle ab
- Per Code ist alles einfach
Display Settings
Module für Formatierungslogik
- Image delta formatter (13,829 installs)
- Image link formatter (8,879)
- Linked field (3,625)
- Field Formatter Class (6,808)
- Field Delimiter (835)
- Field Multiple Limit (4,093)
- Field Formatter conditions (1,643)
- Field Extractor (7751)
(mit Entity Formatter nicht mehr nötig :)
Beispiel: Image Link Formatter
Einstellungsmöglichkeiten
decken nie alle Fälle ab!
LESSON LEARNED
Entity Formatter
Die Highlights
IDE Code Completion
EntityFormatter Klassen werden speziell per Drush generiert und stellen Methoden für jedes Feld zur Verfügung.
Klassen generieren mit Drush
drush efm node --bundles=page,article --module=entity_formatter_custom
Es werden Klassen generiert für:
- Entities vom Type "Node"
- nur für die Bundles "Page" und "Article".
- Und alles kommt in das Modul "entity_formatter_custom"
PageNodeFormatter.php - {BundleName}{EntityType}Formatter.php
Feld-WErte Auslesen
// Text (text, text_long und text_summary)
$page->getBody()->text();
$page->getBody()->summary();
// Image
$page->getImages()->img();
$page->getImages()->src();
// Generell (auch für noch nicht unterstützte Felder)
$page->getGeofield()->value();
Für jedes Feld eine get-Methode mit dem Feldnamen (ohne field_ prefix).
field_images > getImages()
field_foobar > getFoobar()
Unterstützte Feldtypen
Alle Core Felder + Entity Reference, Link, Date, Addressfield
Single / Multi Value
// Standardmäßig wird auf den ersten Wert zugegriffen.
$page->getImages()->img();
// Es kann gezielt auf einen bestimmten Wert zugegriffen werden.
$page->getImages()->setDelta(2)->img();
// Oder über alle Werte geloopt werden
foreach ($page->getImages() as $image) {
$image->img();
}
field_images ist ein Multivalue Feld.
MEHRSPRACHIGKEIT
$page->setLanguage('en');
Standardmäßig wird die aktuelle Content Language verwendet.
Kann aber gezielt eingestellt werden.
Eigene Formatter Klassen verwenden
/**
* Allows modules to use custom formatter classes for specific field-types.
* Custom classes should subclass EfFieldFormatter or a subclass of it.
*
* NOTE: You need to re-generate your classes, after you implemented this hook.
*
* To use specific classes for individual fields, you can consider manually
* modifying the generated EfEntityFormatter class because existent methods are
* not overwritten the next time the class is generated.
*/
function hook_entity_formatter_field_type_mapping_alter(&$field_type_mapping) {
// Use "EfBetterLinkFieldFormatter" class for fields of type "link_field".
$field_type_mapping['link_field'] = 'EfBetterLinkFieldFormatter';
}
DEMO-Time!
Fragen?
- Responsive Images
- Field Collections
- Wünsche?
Links
- Entity Formatter: https://www.drupal.org/project/entity_formatter
- EF Doku: http://entity_formatter.valderama.net/
- Meine Seite: http://valderama.net/
- Form & Code http://www.formundcode.de/