cincopa-8.x-1.x-dev/src/Plugin/Filter/FilterCincopa.php

src/Plugin/Filter/FilterCincopa.php
<?php

namespace Drupal\cincopa\Plugin\Filter;

use Drupal\filter\FilterProcessResult;
use Drupal\filter\Plugin\FilterBase;

/**
 * Replace "[cincopa STRING]" strings in text fields.
 *
 * @Filter(
 *   id = "filter_cincopa",
 *   title = @Translation("Parse Cincopa Tags"),
 *   description = @Translation("Parse the Cincopa tag and replace it with the gallery code."),
 *   type = Drupal\filter\Plugin\FilterInterface::TYPE_TRANSFORM_IRREVERSIBLE,
 * )
 */
class FilterCincopa extends FilterBase {

  /**
   * A list of unique strings.
   *
   * @var array
   */
  public $uniqueData = [];

  /**
   * {@inheritdoc}
   */
  public function process($text, $langcode) {
    $text = preg_replace_callback("/\[cincopa ([[:print:]]+?)\]/", function ($m) {
      $unique = uniqid('');
      array_push($m, $unique);
      array_push($this->uniqueData, $m);
      return '<div id="_cp_widget_' . $unique . '">...</div>';
    },
      $text);

    $result = new FilterProcessResult($text);
    $result->setProcessedText($text)
      ->addAttachments(['library' => ['cincopa/cincopa.filter.main']]);

    $args = [];
    foreach ($this->uniqueData as $index => $match) {
      $args['cincopa'][$match[2]]['arg0'] = $match[0];
      $args['cincopa'][$match[2]]['arg1'] = $match[1];
      $args['cincopa'][$match[2]]['arg2'] = "_cp_widget_" . $match[2];
    }

    $result->addAttachments([
      'library' => [
        'cincopa/cincopa.filter',
      ],
      'drupalSettings' => $args,
    ]);
    return $result;
  }

}

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

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