Same name and namespace in other branches
- 1.1.x src/Plugin/Field/FieldFormatter/EntityReferenceFilteredLinkFormatter.php \Drupal\entity_ref_filtering_link\Plugin\Field\FieldFormatter\EntityReferenceFilteredLinkFormatter::viewElements() 1 comment
File
-
src/
Plugin/ Field/ FieldFormatter/ EntityReferenceFilteredLinkFormatter.php, line 135
Class
- EntityReferenceFilteredLinkFormatter
- Plugin implementation of the 'entity_reference_filtered_link' formatter.
Namespace
Drupal\entity_ref_filtering_link\Plugin\Field\FieldFormatterCode
public function viewElements(FieldItemListInterface $items, $langcode) {
$elements = [];
$view_url = $this->getSetting('view_url');
$skip_access = $this->getSetting('skip_access_check');
$mode = $this->getSetting('mode');
$argument = $this->getSetting('argument');
$disable = $this->getSetting('disable');
$disable = !empty($disable) ? explode(",", $disable) : [];
foreach ($this->getEntitiesToView($items, $langcode) as $delta => $entity) {
$label = $entity->label();
if (in_array($label, $disable)) {
$elements[$delta] = [
'#plain_text' => $label,
];
continue;
}
if ($id = $entity->id()) {
if ($skip_access) {
$url = $this->pathValidator
->getUrlIfValidWithoutAccessCheck($view_url);
}
else {
$url = $this->pathValidator
->getUrlIfValid($view_url);
}
if (!$url) {
$elements[$delta] = [
'#plain_text' => $label,
];
continue;
}
$options = $url->getOptions();
switch ($mode) {
case 'id':
$options['query'][$argument] = $id;
break;
case 'id_multiple':
$options['query']["{$argument}[]"] = $id;
break;
case 'id_multiple_d9':
$options['query']["{$argument}[{$id}]"] = $id;
break;
case 'autocomplete':
$options['query'][$argument] = "{$entity->label()} ({$id})";
break;
case 'facet':
$options['query']['f[0]'] = "{$argument}:{$id}";
break;
case 'label':
$options['query']['f[0]'] = "{$argument}:{$entity->label()}";
break;
case 'label_no_facet':
$options['query'][$argument] = $entity->label();
break;
}
$url->setOptions($options);
$elements[$delta] = [
'#type' => 'link',
'#title' => $label,
'#url' => $url,
'#options' => $options,
];
if (!empty($items[$delta]->_attributes)) {
$elements[$delta]['#options'] += [
'attributes' => [],
];
$elements[$delta]['#options']['attributes'] += $items[$delta]->_attributes;
// Unset field item attributes since they have been included in the
// formatter output and shouldn't be rendered in the field template.
unset($items[$delta]->_attributes);
}
}
else {
$elements[$delta] = [
'#plain_text' => $label,
];
}
$elements[$delta]['#cache']['tags'] = $entity->getCacheTags();
}
return $elements;
}