Commit 06b28210 authored by matsbla's avatar matsbla Committed by Mats Blakstad
Browse files

Issue #3317125 by matsbla: Make the formatter work for views

parent 332e1c08
Loading
Loading
Loading
Loading
+36 −16
Original line number Diff line number Diff line
@@ -2,6 +2,7 @@

namespace Drupal\custom_twig_formatter\Plugin\Field\FieldFormatter;

use Drupal\Core\Field\FieldDefinitionInterface;
use Drupal\Core\Field\FormatterBase;
use Drupal\Core\Field\FieldItemListInterface;
use Drupal\Core\Form\FormStateInterface;
@@ -118,21 +119,38 @@ class CustomTwigFormatter extends FormatterBase {
    ];

    // Generate help text for replacement patterns.
    $configTarget = $this->fieldDefinition->getConfigTarget();
    $configTarget = explode('.', $configTarget);
    $entity_type = $configTarget[0];
    $bundle = $configTarget[1];
    $entity = $this->entityTypeManager->getStorage($entity_type)->create(['type' => $bundle]);
    $fieldDefinitions = [
      $this->fieldDefinition->getName() => $this->fieldDefinition,
    ];

    $fieldsDoc = [];
    // Default - current field.
    $fields = [
      $this->fieldDefinition->getName() => $this->fieldDefinition,
    ];

    $entity_type = $this->fieldDefinition->getTargetEntityTypeId();
    $bundle = $this->fieldDefinition->getTargetBundle();

    if ($bundle) {
      $storage = $this->entityTypeManager->getStorage($entity_type);
      $entity = $storage
        ->create([$storage->getEntityType()->getKey('bundle') => $bundle]);
      $fieldDefinitions = $this->entityFieldManager->getFieldDefinitions($entity_type, $bundle);
      $fields = $entity->getFields();
    }

    $fieldsDoc = [];
    foreach ($fieldDefinitions as $field_id => $value) {
      $type = $value->getType();
      $fieldsDoc[$field_id]['type'] = $type;
    }
    foreach ($entity->getFields() as $field_id => $value) {
      $class_name = get_class($value);
      $fieldsDoc[$field_id]['class'] = $class_name;

    foreach ($fields as $field_id => $value) {
      if ($value instanceof FieldDefinitionInterface) {
        $fieldsDoc[$field_id]['class'] = $value->getClass();
        continue;
      }
      $fieldsDoc[$field_id]['class'] = $value->getFieldDefinition()->getClass();
    }
    $tokensDoc = [
      'label'             => 'string',
@@ -168,12 +186,14 @@ class CustomTwigFormatter extends FormatterBase {
      '#markup' => $tokens_current_field,
    ];

    if ($bundle) {
      $form['tokens_all'] = [
        '#type' => 'details',
        '#title' => $this->t('Replacement patterns for other fields'),
        '#open' => FALSE,
        '#markup' => $tokens_all,
      ];
    }

    return $form;
  }
@@ -268,7 +288,7 @@ class CustomTwigFormatter extends FormatterBase {
      $elements['#attached']['library'][] = "file/drupal.file";
    }

    return $elements;
    return [$elements];
  }

}