entityManager = $entity_manager; } /** * {@inheritdoc} */ public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) { return new static( $plugin_id, $plugin_definition, $configuration['field_definition'], $configuration['settings'], $configuration['label'], $configuration['view_mode'], $configuration['third_party_settings'], $container->get('entity.manager') ); } /** * {@inheritdoc} */ public static function defaultSettings() { $options = parent::defaultSettings(); $options['link_to_entity'] = FALSE; return $options; } /** * {@inheritdoc} */ public function settingsForm(array $form, FormStateInterface $form_state) { $form = parent::settingsForm($form, $form_state); $entity_type = $this->entityManager->getDefinition($this->fieldDefinition->getTargetEntityTypeId()); $form['link_to_entity'] = [ '#type' => 'checkbox', '#title' => $this->t('Link to the @entity_label', ['@entity_label' => $entity_type->getLabel()]), '#default_value' => $this->getSetting('link_to_entity'), ]; return $form; } /** * {@inheritdoc} */ public function settingsSummary() { $summary = []; if ($this->getSetting('link_to_entity')) { $entity_type = $this->entityManager->getDefinition($this->fieldDefinition->getTargetEntityTypeId()); $summary[] = $this->t('Linked to the @entity_label', ['@entity_label' => $entity_type->getLabel()]); } return $summary; } /** * {@inheritdoc} */ public function viewElements(FieldItemListInterface $items, $langcode) { $elements = []; $url = NULL; if ($this->getSetting('link_to_entity')) { // For the default revision this falls back to 'canonical'. $url = $this->getEntityUrl($items->getEntity()); } foreach ($items as $delta => $item) { $view_value = $this->viewValue($item); if ($url) { $elements[$delta] = [ '#type' => 'link', '#title' => $view_value, '#url' => $url, ]; } else { $elements[$delta] = $view_value; } } return $elements; } /** * Generate the output appropriate for one field item. * * @param \Drupal\Core\Field\FieldItemInterface $item * One field item. * * @return array * The textual output generated as a render array. */ 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 [ '#type' => 'inline_template', '#template' => '{{ value|nl2br }}', '#context' => ['value' => $item->value], ]; } /** * Gets the URI elements of the entity. * * @param \Drupal\Core\Entity\EntityInterface $entity * The entity object. * * @return \Drupal\Core\Url * The URI elements of the entity. */ protected function getEntityUrl(EntityInterface $entity) { // For the default revision this falls back to 'canonical'. return $entity->toUrl('revision'); } }