Gracias a las características de Twig nosotros contamos con más escalabilidad al momento de desarrollar temas en Drupal 8. En está oportunidad vamos a crear un filtro personalizado de twig el cual podremos usarlo dentro de las plantillas twig que tengamos en nuestro tema.
Necesitamos crear un módulo personalizado y con los siguientes archivos.
modulo: "bitw_filter" dentro de modules/custom/
bitw_filter/bitw_filter.info.yml
bitw_filter/bitw_filter.services.yml
bitw_filter/src/TwigExtension/ChangeText.php
El archivo .info.yml tiene la configuración habitual
name: BITW filter
description: My first twig filter module
package: BITW
type: module
core: 8.x
El archivo .services.yml contiene lo siguiente:
services:
bitw_filter.twig_extension:
class: Drupal\bitw_filter\TwigExtension\ChangeText
tags:
- { name: twig.extension }
(Note que en class se hace referencia al archivo que se detallará enseguida)
El archivo src/TwigExtension/ChangeText.php tendrá lo siguiente:
(Leer los comentarios del siguiente código)
<?php
namespace Drupal\bitw_filter\TwigExtension;
class ChangeText extends \Twig_Extension {
/**
* Aquí definimos en un listado todos los filtros personalizados que necesitamos.
*/
public function getFilters() {
return [
new \Twig_SimpleFilter('changetext', array($this, 'changeText')),
];
}
/**
* Aquí tenemos el identificador de la extensión Twig
* (Este se relaciona con el nombre que definimos en el archivo .service.yml)
*/
public function getName() {
return 'bitw_filter.twig_extension';
}
/**
* Aquí van las funciones que harán lo que necesitemos
* en nuestros filtros personalizados en Twig
*/
public static function changeText($string) {
return $string . 'CmPunk';
}
}
Al habilitar el módulo bitw_filter debemos limpiar caché para recién poder usarlo en cualquier plantilla que tengamos en nuestro tema.
{{ 'Texto de prueba escrito por:' | changetext }}
Este módulo personalizado nos puede servir para albergar más de un filtro personalizado, en realidad todos los filtros personalizados que queramos, solamente tenemos que agregar un filtro nuevo más en la función getFilters() y su respectiva función que hará lo que le asignemos.
Me pareció interesante el artículo
Añadir nuevo comentario