EntityReferenceMiconFormatter.php in Micon 8
File
src/Plugin/Field/FieldFormatter/EntityReferenceMiconFormatter.php
View source
<?php
namespace Drupal\micon\Plugin\Field\FieldFormatter;
use Drupal\Core\Field\Plugin\Field\FieldFormatter\EntityReferenceLabelFormatter;
use Drupal\Core\Field\FieldItemListInterface;
use Drupal\micon\MiconIconize;
class EntityReferenceMiconFormatter extends EntityReferenceLabelFormatter {
public function viewElements(FieldItemListInterface $items, $langcode) {
$elements = [];
$output_as_link = $this
->getSetting('link');
foreach ($this
->getEntitiesToView($items, $langcode) as $delta => $entity) {
$icon = new MiconIconize($entity
->label());
if ($icon) {
$bundle = $entity
->bundle() == 'node_type' ? 'content_type' : $entity
->bundle();
$icon
->addMatchPrefix($bundle)
->setIconOnly();
if ($output_as_link && !$entity
->isNew()) {
try {
$uri = $entity
->urlInfo();
} catch (UndefinedLinkTemplateException $e) {
$output_as_link = FALSE;
}
}
if ($output_as_link && isset($uri) && !$entity
->isNew()) {
$elements[$delta] = [
'#type' => 'link',
'#title' => $icon,
'#url' => $uri,
'#options' => $uri
->getOptions(),
];
if (!empty($items[$delta]->_attributes)) {
$elements[$delta]['#options'] += [
'attributes' => [],
];
$elements[$delta]['#options']['attributes'] += $items[$delta]->_attributes;
unset($items[$delta]->_attributes);
}
}
else {
$elements[$delta]['#markup'] = $icon
->render();
}
}
$elements[$delta]['#cache']['tags'] = $entity
->getCacheTags();
}
return $elements;
}
}