FieldFormatter.php in Twig Extender 8.4
File
modules/twig_extender_extras/src/Plugin/TwigPlugin/FieldFormatter.php
View source
<?php
namespace Drupal\twig_extender_extras\Plugin\TwigPlugin;
use Drupal\Core\Field\FieldItemList;
use Drupal\Component\Utility\NestedArray;
use Drupal\twig_extender\Plugin\Twig\TwigPluginBase;
class FieldFormatter extends TwigPluginBase {
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;
}
}
}