D8 Formatos de texto y Filtros - pierregermain/MyDrupal GitHub Wiki

Introducción

Sobre los filtros

  • Los filtros se aplican en el momento de generar la presentación del sitio (cargar la página en el navegador).
  • internamente la base de datos almacena el texto original sin aplicarle ningún tipo de transformación.
  • se aplican en cierto orden

Filtros disponibles por defecto

  • Mostrar un texto sin formato
  • Limitar etiquetas HTML
  • Convertir saltos de línea
  • Convertir URL's en enlaces
  • Corregir HTML defectuoso
  • Alinear imágenes con el atributo data-align

Formatos de texto por defecto en drupal

  • Basic HTML
  • Restricted HTML
  • Full HTML
  • Plain text

Crear un filtro

Características de los filtros

Ejemplo: Crear un filtro que sustituya palabras de una lista con asteriscos

  • Ubicación: /mymodule/src/Plugin/Filter/FilterBlackList.php

  • Dentro del Annotation le decimos a @Filter de que tipo de filtro se trata. Podemos usar varios valores:

    • FilterInterface::TYPE_HTML_RESTRICTOR: Para restringir etiquetas HTML
    • FilterInterface::TYPE_MARKUP_LANGUAGE: Para convertir código HTML desde código txt
    • FilterInterface::TYPE_TRANSFORM_REVERSIBLE
    • FilterInterface::TYPE_TRANSFORM_IRREVERSIBLE
  • Sólo hay que implementar el método process() para hacerlo funcionar.

<?php

namespace Drupal\mymodule\Plugin\Filter;

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

/**
 * Provides a filter to replace words from a black list.
 *
 * @Filter(
 * id = "filter_black_list",
 * title = @Translation("Black list filter"),
 * description = @Translation("Replaces all words from a black list"),
 * type = Drupal\filter\Plugin\FilterInterface::TYPE_TRANSFORM_IRREVERSIBLE
 * )
 */
class FilterBlackList extends FilterBase {

  /**
   * {@inheritdoc}
   */
  public function process($text, $langcode) {
    $black_list = ['foo', 'bar'];
    $filtered_text = str_replace($black_list, '*****', $text);
    return new FilterProcessResult($filtered_text);
  }

}

Añadir un formulario de configuración del filtro

Para añadir un formulario de configuración hay que añadir lo siguiente:

  • En el annotation añadimos los valores por defecto
*settings = {
*  "black_list" = "foo bar",
*}
  • Añadimos el siguiente método
  public function settingsForm(array $form,
                               FormStateInterface $form_state) {
    $form['black_list'] = [
      '#type' => 'textfield',
      '#title' => $this->t('Black list'),
      '#default_value' => $this->settings['black_list'],
      '#description' => $this->t('A list of words to be banned
(separated by space)'),
    ];
    return $form;
  }
  • Para leer la configuración desde el process:
$black_list = explode(' ', $this->settings['black_list']);

Enlaces de Interés

(no leído)

Filter API overview https://www.drupal.org/docs/8/api/filter-api/overview Creating a custom filter in Drupal 8 https://www.lullabot.com/articles/creating-a-custom-filter-in-drupal-8

Crear un formato de texto

(no realizado)