Módulo de Drupal 8 para extender funciones y filtros de Twig

Siempre que tengo que tocar un tema de Drupal 8, instalo un módulo para poder usar mis propias funciones y filtros desde Twig. El código fuente se puede descargar desde el repositorio https://github.com/ErTomy/twig_extension_module
Por ejemplo si queremos sacar una imagen a un tamaño en concreto (en este caso en el tamaño preestablecido imagen_grande):

<img src="{{thumb(item.field_image, 'imagen_grande')}}"/>

O sacar los resultados de una vista de un bloque concreto (donde actualidad sería la vista y block_actualidad el nombre del bloque):

{% for key,item in vista('actualidad', 'block_actualidad') %}
{{item.field_title}}
{% endfor %}

Crearse nuevas funciones o filtros sería tan sencillo como añadirlas en el fichero twig_extension_module/twig_extension_ertomy/src/TwigExtension/ErtomyExtension.php
Si es un filtro añadiríamos un nuevo elemento en el array dentro de la función getFilters() por ejemplo:

public function getFilters() {
    return array(
      'formatea_fecha' => new \Twig_Filter_Function(array('Drupal\twig_extension_ertomy\TwigExtension\ErtomyExtension', 'fechaFilter')),
      'peso' => new \Twig_Filter_Function(array('Drupal\twig_extension_ertomy\TwigExtension\ErtomyExtension', 'pesoFilter')),
      // nuevo filtro a añadir
      'nuevofiltro' => new \Twig_Filter_Function(array('Drupal\twig_extension_ertomy\TwigExtension\ErtomyExtension', 'nuevoFilter')),
    );
}

Y luego crear una función estática por ejemplo en este caso convertiría en mayúsculas el literal que le llegue:

public static function pesoFilter($string){
   return strtoupper($string);
}

Asi en la plantilla podríamos aplicar este filtro de esta forma:

{{ 'La cadena de texto'|nuevofiltro }}

Y para las funciones es exactamente lo mismo pero añadiendo el elemento en el array de la función getFunctions()

Dejar un comentario?

0 Comentarios.

Deje un comentario


NOTA - Puede usar estosHTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.