ds-8.x-3.9/src/Plugin/DsField/DynamicTwigField.php

src/Plugin/DsField/DynamicTwigField.php
<?php

namespace Drupal\ds\Plugin\DsField;

use Drupal\ds\Attribute\DsField;
use Drupal\ds\Plugin\Derivative\DynamicTwigField as DynamicTwigFieldDerivative;
use Drupal\filter\Render\FilteredMarkup;

/**
 * Defines a generic dynamic twig field.
 */
#[DsField(
  id: 'dynamic_twig_field',
  deriver: DynamicTwigFieldDerivative::class
)]
class DynamicTwigField extends TokenBase {

  /**
   * {@inheritdoc}
   */
  public function build() {
    $output = '';
    $content = $this->content();

    $render = [
      '#type' => 'inline_template',
      '#template' => $content,
      '#context' => [
        $this->getEntityTypeId() => $this->entity(),
        'entity' => $this->entity(),
      ]
    ];

    try {
      $output = \Drupal::service('renderer')->render($render);
    }
    catch (\Exception $e) {
      \Drupal::logger('ds_twig_field')->error('Error rendering @field: @message', ['@field' => $this->getDerivativeId(), '@message' => $e->getMessage()]);
    }

    if ($output) {
      return ['#markup' => FilteredMarkup::create($output)];
    }

    return [];
  }

  /**
   * {@inheritdoc}
   */
  public function content() {
    $definition = $this->getPluginDefinition();
    return $definition['properties']['content'];
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc