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()
0 Comentarios.