public function FieldFormatter::getField in Twig Extender 8.2
Same name and namespace in other branches
- 8.4 modules/twig_extender_extras/src/Plugin/TwigPlugin/FieldFormatter.php \Drupal\twig_extender_extras\Plugin\TwigPlugin\FieldFormatter::getField()
- 8.3 modules/twig_extender_extras/src/Plugin/TwigPlugin/FieldFormatter.php \Drupal\twig_extender_extras\Plugin\TwigPlugin\FieldFormatter::getField()
- 4.x modules/twig_extender_extras/src/Plugin/TwigPlugin/FieldFormatter.php \Drupal\twig_extender_extras\Plugin\TwigPlugin\FieldFormatter::getField()
Implementation for render field formatter.
Parameters
\Drupal\Core\Field\FieldItemList $field: FieldItemList to display with formatter.
string $formatter: Formatter plugin id to use.
string $label: Label option for formatter, could be hidden|above|inside.
array $settings: Settings for formatter plugin.
int $maxItems: How many items to display.
int $offset: Offset to start from.
Return value
array Array for rendering.
File
- modules/
twig_extender_extras/ src/ Plugin/ TwigPlugin/ FieldFormatter.php, line 41
Class
- FieldFormatter
- The plugin to render a field with a specific formatter.
Namespace
Drupal\twig_extender_extras\Plugin\TwigPluginCode
public function getField(FieldItemList $field, $formatter, $label = 'hidden', array $settings = [], $maxItems = -1, $offset = 0) {
$formatterService = \Drupal::service('plugin.manager.field.formatter');
try {
$plugin = $formatterService
->getDefinition($formatter);
$field_type = $field
->getFieldDefinition()
->getType();
$field_options = $formatterService
->getOptions();
$default_settings = $formatterService
->getDefaultsettings($formatter);
$settings = NestedArray::mergeDeep($default_settings, $settings);
$renderer = \Drupal::service('renderer');
if ($offset > 0) {
if (!$field
->offsetExists($offset)) {
$build = [];
$renderer
->addCacheableDependency($build, $field
->getEntity());
return $build;
}
for ($i = 0; $i < $offset; $i++) {
$field
->removeItem(0);
}
}
if ($maxItems > 0 && $maxItems != $field
->count()) {
$remove = $field
->count() - $maxItems;
for ($i = 0; $i < $remove; $i++) {
$field
->removeItem(1);
}
}
$field_to_view = $field
->view([
'type' => $formatter,
'settings' => $settings,
'label' => $label,
]);
return $field_to_view;
} catch (\Exception $e) {
\Drupal::logger('twig_extender_extras')
->error($e
->getMessage());
throw $e;
}
}