123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- <?php
- namespace Drupal\Core\Field\Plugin\Field\FieldFormatter;
- use Drupal\Core\Entity\EntityInterface;
- use Drupal\Core\Entity\EntityTypeManagerInterface;
- use Drupal\Core\Field\FieldDefinitionInterface;
- use Drupal\Core\Field\FieldItemInterface;
- use Drupal\Core\Field\FormatterBase;
- use Drupal\Core\Field\FieldItemListInterface;
- use Drupal\Core\Form\FormStateInterface;
- use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
- use Symfony\Component\DependencyInjection\ContainerInterface;
- /**
- * Plugin implementation of the 'string' formatter.
- *
- * @FieldFormatter(
- * id = "string",
- * label = @Translation("Plain text"),
- * field_types = {
- * "string",
- * "uri",
- * },
- * quickedit = {
- * "editor" = "plain_text"
- * }
- * )
- */
- class StringFormatter extends FormatterBase implements ContainerFactoryPluginInterface {
- /**
- * The entity type manager.
- *
- * @var \Drupal\Core\Entity\EntityTypeManagerInterface
- */
- protected $entityTypeManager;
- /**
- * Constructs a StringFormatter instance.
- *
- * @param string $plugin_id
- * The plugin_id for the formatter.
- * @param mixed $plugin_definition
- * The plugin implementation definition.
- * @param \Drupal\Core\Field\FieldDefinitionInterface $field_definition
- * The definition of the field to which the formatter is associated.
- * @param array $settings
- * The formatter settings.
- * @param string $label
- * The formatter label display setting.
- * @param string $view_mode
- * The view mode.
- * @param array $third_party_settings
- * Any third party settings settings.
- * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
- * The entity type manager.
- */
- public function __construct($plugin_id, $plugin_definition, FieldDefinitionInterface $field_definition, array $settings, $label, $view_mode, array $third_party_settings, EntityTypeManagerInterface $entity_type_manager) {
- parent::__construct($plugin_id, $plugin_definition, $field_definition, $settings, $label, $view_mode, $third_party_settings);
- $this->entityTypeManager = $entity_type_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_type.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->entityTypeManager->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->entityTypeManager->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');
- }
- }
|