entity_to_text-1.0.x-dev/src/Extractor/NodeToText.php

src/Extractor/NodeToText.php
<?php

namespace Drupal\entity_to_text\Extractor;

use Drupal\Core\Field\FieldTypePluginManagerInterface;
use Drupal\Core\Render\Markup;
use Drupal\Core\Render\RendererInterface;
use Drupal\entity_to_text\HtmlPurifier;
use Drupal\node\NodeInterface;

/**
 * Provide Capabilities to transform a Node content to plain-text strings.
 */
class NodeToText {

  /**
   * The HTML Purifier service.
   *
   * @var \Drupal\entity_to_text\HtmlPurifier
   */
  protected $htmlPurifier;

  /**
   * The renderer service.
   *
   * @var \Drupal\Core\Render\RendererInterface
   */
  protected $renderer;

  /**
   * The field type manager to define field.
   *
   * @var \Drupal\Core\Field\FieldTypePluginManagerInterface
   */
  protected $fieldTypeManager;

  /**
   * Construct a new NodeToText object.
   */
  public function __construct(HtmlPurifier $html_purifier, RendererInterface $renderer, FieldTypePluginManagerInterface $field_type_manager) {
    $this->htmlPurifier = $html_purifier;
    $this->renderer = $renderer;
    $this->fieldTypeManager = $field_type_manager;
  }

  /**
   * Transform a Field into plain text value.
   *
   * @param string $field_name
   *   The field name to fetch from the given node.
   * @param \Drupal\node\NodeInterface $node
   *   The node with the according field to transform.
   *
   * @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException
   *
   * @return string
   *   The transformed field into a plain text value.
   */
  public function fromFieldtoText(string $field_name, NodeInterface $node): string {
    $field_definition = $node->getFieldDefinition($field_name);
    $field_type_definition = $field_definition ? $this->fieldTypeManager->getDefinition($field_definition->getType()) : NULL;

    if (!$field_type_definition) {
      return '';
    }

    $display_options = ['label' => 'hidden'];
    $display_options['type'] = $field_type_definition['default_formatter'];

    $field = $node->get($field_name);

    if ($field->isEmpty()) {
      return '';
    }

    $view = $field->view($display_options);

    /** @var \Drupal\Core\Render\Markup|string $markup */
    $markup = $this->renderer->renderRoot($view);

    $purifier = $this->htmlPurifier->init();

    if ($markup instanceof Markup) {
      $clean_html = $purifier->purify($markup->__toString());
    }
    else {
      $clean_html = $purifier->purify($markup);
    }

    return trim($clean_html);
  }

}

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

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