TRUE, ] + parent::defaultSettings(); } /** * {@inheritdoc} */ public function settingsForm(array $form, FormStateInterface $form_state) { $elements['link'] = [ '#title' => t('Link label to the referenced entity'), '#type' => 'checkbox', '#default_value' => $this->getSetting('link'), ]; return $elements; } /** * {@inheritdoc} */ public function settingsSummary() { $summary = []; $summary[] = $this->getSetting('link') ? t('Link to the referenced entity') : t('No link'); return $summary; } /** * {@inheritdoc} */ public function viewElements(FieldItemListInterface $items, $langcode) { $elements = []; $output_as_link = $this->getSetting('link'); foreach ($this->getEntitiesToView($items, $langcode) as $delta => $entity) { $label = $entity->label(); // If the link is to be displayed and the entity has a uri, display a // link. if ($output_as_link && !$entity->isNew()) { try { $uri = $entity->urlInfo(); } catch (UndefinedLinkTemplateException $e) { // This exception is thrown by \Drupal\Core\Entity\Entity::urlInfo() // and it means that the entity type doesn't have a link template nor // a valid "uri_callback", so don't bother trying to output a link for // the rest of the referenced entities. $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'] += ['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; } /** * {@inheritdoc} */ protected function checkAccess(EntityInterface $entity) { return $entity->access('view label', NULL, TRUE); } }