EntityReferenceLabelFormatter.php in Zircon Profile 8
File
core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/EntityReferenceLabelFormatter.php
View source
<?php
namespace Drupal\Core\Field\Plugin\Field\FieldFormatter;
use Drupal\Core\Entity\Exception\UndefinedLinkTemplateException;
use Drupal\Core\Field\FieldItemListInterface;
use Drupal\Core\Form\FormStateInterface;
class EntityReferenceLabelFormatter extends EntityReferenceFormatterBase {
public static function defaultSettings() {
return array(
'link' => TRUE,
) + parent::defaultSettings();
}
public function settingsForm(array $form, FormStateInterface $form_state) {
$elements['link'] = array(
'#title' => t('Link label to the referenced entity'),
'#type' => 'checkbox',
'#default_value' => $this
->getSetting('link'),
);
return $elements;
}
public function settingsSummary() {
$summary = array();
$summary[] = $this
->getSetting('link') ? t('Link to the referenced entity') : t('No link');
return $summary;
}
public function viewElements(FieldItemListInterface $items, $langcode) {
$elements = array();
$output_as_link = $this
->getSetting('link');
foreach ($this
->getEntitiesToView($items, $langcode) as $delta => $entity) {
$label = $entity
->label();
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' => $label,
'#url' => $uri,
'#options' => $uri
->getOptions(),
];
if (!empty($items[$delta]->_attributes)) {
$elements[$delta]['#options'] += array(
'attributes' => array(),
);
$elements[$delta]['#options']['attributes'] += $items[$delta]->_attributes;
unset($items[$delta]->_attributes);
}
}
else {
$elements[$delta] = array(
'#plain_text' => $label,
);
}
$elements[$delta]['#cache']['tags'] = $entity
->getCacheTags();
}
return $elements;
}
}