getSetting('link'); $current_langcode = \Drupal::languageManager()->getCurrentLanguage()->getId(); foreach ($this->getEntitiesToView($items, $langcode) as $delta => $entity) { if ($entity->hasTranslation($current_langcode)) { $entity = $entity->getTranslation($current_langcode); } $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(); $options = $uri->getOptions(); $options += array( 'attributes' => array( 'class' => ['ajax-link'], 'nid'=>$entity->id(), 'data-drupal-link-system-path' => $uri->getInternalPath() ) ); $uri->setOptions($options); } 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; } /** * Generate the output appropriate for one field item. * * @param \Drupal\Core\Field\FieldItemInterface $item * One field item. * * @return string * The textual output generated. */ protected function viewValue(FieldItemInterface $item) { // The text value has no text format assigned to it, so the user input // should equal the output, including newlines. return nl2br(Html::escape($item->value)); } }