public function ViewsFieldFormatter::viewElements in Views field formatter 8.2
Same name and namespace in other branches
- 8 src/Plugin/Field/FieldFormatter/ViewsFieldFormatter.php \Drupal\views_field_formatter\Plugin\Field\FieldFormatter\ViewsFieldFormatter::viewElements()
Builds a renderable array for a field value.
Parameters
\Drupal\Core\Field\FieldItemListInterface $items: The field values to be rendered.
string $langcode: The language that should be used to render the field.
Return value
array A renderable array for $items, as an array of child elements keyed by consecutive numeric indexes starting from 0.
Overrides FormatterInterface::viewElements
File
- src/
Plugin/ Field/ FieldFormatter/ ViewsFieldFormatter.php, line 376
Class
- ViewsFieldFormatter
- Class ViewsFieldFormatter.
Namespace
Drupal\views_field_formatter\Plugin\Field\FieldFormatterCode
public function viewElements(FieldItemListInterface $items, $langcode) {
$elements = [];
$settings = $this
->getSettings();
if (isset($settings['view']) && !empty($settings['view']) && \strpos($settings['view'], '::') !== FALSE) {
list($view_id, $view_display) = \explode('::', $settings['view'], 2);
}
else {
return $elements;
}
// First check the availability of the view.
$view = Views::getView($view_id);
if (!$view || !$view
->access($view_display)) {
return $elements;
}
$user_arguments = \array_filter((array) $this
->getSetting('arguments'), function ($argument) {
return $argument['checked'];
});
/** @var \Drupal\Core\Entity\EntityInterface $entity */
$entity = $items
->getParent()
->getValue();
$token = \Drupal::token();
$arguments = [];
foreach ($user_arguments as $delta_argument => $item_argument) {
foreach ($items as $delta_item => $item) {
// This is temporary until we find a solution to get that same value
// using a tokens.
if ($item_argument['token'] === '%value%') {
$columns = array_keys($items
->getFieldDefinition()
->getFieldStorageDefinition()
->getSchema()['columns']);
$column = array_shift($columns);
$arguments[$delta_argument][] = !empty($column) && isset($item
->getValue()[$column]) ? $item
->getValue()[$column] : NULL;
continue;
}
$replacements = [
$entity
->getEntityTypeId() => $entity,
'entity' => $entity,
'views_field_formatter' => [
'delta' => $delta_item,
'item' => $item,
'items' => $items,
],
];
switch ($this->fieldDefinition
->getTargetEntityTypeId()) {
case 'taxonomy_term':
$replacements['term'] = $entity;
$replacements['vocabulary'] = Vocabulary::load($entity
->getVocabularyId());
break;
}
$arguments[$delta_argument][] = $token
->replace($item_argument['token'], $replacements);
}
}
if ((bool) $settings['multiple'] === TRUE) {
foreach ($items as $delta => $item) {
$viewArray = $this
->getViewArray($view, $view_display, \array_column($arguments, $delta), $settings);
if ([] !== $viewArray) {
$elements[$delta] = $viewArray;
}
}
}
else {
foreach ($arguments as $delta_argument => $item_argument) {
$arguments[$delta_argument] = \implode($settings['implode_character'], $arguments[$delta_argument]);
}
$viewArray = $this
->getViewArray($view, $view_display, $arguments, $settings);
if ([] !== $viewArray) {
$elements[0] = $viewArray;
}
}
return $elements;
}