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
- Son plugins con el Annotation tipo @Filter
- Extienden a FilterBase que a su vez implemente FilterInterface
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)