Walter Jenner, Web Entwickler bei Form & Code.
<?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
(mit Entity Formatter nicht mehr nötig :)
Einstellungsmöglichkeiten
decken nie alle Fälle ab!
Die Highlights
EntityFormatter Klassen werden speziell per Drush generiert und stellen Methoden für jedes Feld zur Verfügung.
drush efm node --bundles=page,article --module=entity_formatter_custom
Es werden Klassen generiert für:
PageNodeFormatter.php - {BundleName}{EntityType}Formatter.php
// 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
// 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.
$page->setLanguage('en');
Standardmäßig wird die aktuelle Content Language verwendet.
Kann aber gezielt eingestellt werden.
/**
* 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';
}
Fragen?