Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Creación de extensiones de Twig para personalizar la presentación de campos

Creación de extensiones de Twig para personalizar la presentación de campos

Lightning Talk de la DrupalCamp 2017 sobre creación de extensiones personalizadas de Twig que nos permitan disponer de nuevos filtros. En la presentación se ven ejemplos de filtros que permiten eliminar acentos y caracteres extraños de una cadena, eliminar números o calcular el tiempo de lectura de un texto

Delirium Coder

May 05, 2017
Tweet

More Decks by Delirium Coder

Other Decks in Programming

Transcript

  1. Creación de extensiones de Twig para personalizar la presentación de

    campos Víctor Rodríguez Lledó #DrupalCampES www.deliriumcoder.com
  2. TWIG • Una de las grandes mejoras de Drupal 8

    • Más seguro • Más potente • Extensible
  3. FACILIDAD PARA FORMATEAR CAMPOS • Twig nos proporciona gran cantidad

    de filtros que podemos aplicar para formatear un campo (date_format, replace, trim, lower, upper...). • Se pueden aplicar de forma consecutiva: el resultado del filtro anterior se aplica al siguiente (field | lower | trim) • Filtros disponibles
  4. EXTENSIONES TWIG DEL CORE • Drupal 8 añade multitud de

    extensiones para facilitarnos el trabajo • Algunos ejemplos: t, trans, clean_id, clean_css • /core/lib/Drupal/Core/Template/TwigExtension.php
  5. EXTENSIONES PERSONALIZADAS 1. Crear un módulo modules -- custom ----

    my_custom_twig_extension ------ src -------- TwigExtension.php ------ my_custom_twig_extension.info.yml ------ my_custom_twig_extension.services.yml
  6. <?php namespace Drupal\my_custom_twig_extension; class TwigExtension extends \Twig_Extension { /** *

    Generates a list of all Twig filters that this extension defines. */ public function getFilters() { return [ new \Twig_SimpleFilter('removediacritics', array($this, 'removeDiacritics')), ]; } /** * Gets a unique identifier for this Twig extension. */ public function getName() { return 'my_custom_twig_extension.twig_extension'; } /** * Removes string diacritics. */ public static function removeDiacritics($string) { return \Drupal::service('transliteration')->removeDiacritics($string); } }
  7. EXTENSIONES PERSONALIZADAS 5. Habilitar el módulo my_custom_twig_extension 6. Limpiar la

    caché 7. Y listo para usar {{ field | removediacritics }}
  8. <?php class RemoveNumbers extends \Twig_Extension { /** * Generates a

    list of all Twig filters that this extension defines. */ public function getFilters() { return [ new \Twig_SimpleFilter('removenum', array($this, 'removeNumbers')), ]; } /** * Gets a unique identifier for this Twig extension. */ public function getName() { return 'hello_world.twig_extension'; } /** * Replaces all numbers from the string. */ public static function removeNumbers($string) { return preg_replace('#[0-9]*#', '', $string); } }
  9. <?php namespace Drupal\readingtime\TwigExtension; use Drupal\Core\Render\Markup; class ReadingTimeExtension extends \Twig_Extension {

    public function getFilters() { return array( 'readingtime' => new \Twig_Filter_Function( array('Drupal\readingtime\TwigExtension\ReadingTimeExtension', 'readingTimeFilter') ) ); } public function getName() { return "readingtime.twig_extension"; } public static function readingTimeFilter($string) { if($string instanceof Markup) { // we check if the $string is an instance of Markup Object. $striped_markup = strip_tags($string->__toString()); $wpm = str_word_count($striped_markup)/130; // $wpm = Words Per Minute. $reading_time = ceil($wpm); // Round the float number to an integer. return $reading_time; // we return an integer with the number of minutes we need to read something. } else { return $string; } } }