Pasar al contenido principal

Cargando...

Ampliar las funcionalidades de Twig en Drupal

Ampliar las funcionalidades de Twig en Drupal

Ampliar las funcionalidades de Twig en Drupal

3 minutos

A partir de la versión 8 de Drupal, el sistema de plantillas ha cambiado para pasar a usar el componente de Symfony Twig.

Esta versión de Twig implementa algunas funcionalidades propias de Drupal pero en ocasiones no son suficientes para nuestros proyectos.

Por este motivo, es posible que necesitemos crear nuevas funciones o filtros que podamos aplicar...

Estructura del módulo

Para ampliar las funcionalidades de Twig en Drupal, crearemos un nuevo módulo con la siguiente estructura:

custom_module
  - src
    - TwigExtension
      - customTwigExtension.php
  - custom_module.services.yml
  - custom_module.info.yml

Archivo info.yml

Como en todos los módulos, el archivo info.yml contendrá la información del módulo que estamos creando:

# Datos del módulo
name: 'Ampliar funcionalidades de Twig'
description: 'Amplia las funcionalidades de Twig con funcionalidades personalizadas'
project: 'custom_module'

# Datos de la versión
package: custom
type: module
core: 8.x
version: '8.x-1.0'

# Tema
base theme: false

# Requisitos
core_version_requirement: ^8 || ^9

Archivo services.yml

En este archivo activaremos nuestras funcionalidades como servicios disponibles en Drupal.

services:
  custom_module.customTwigExtension:
    class: Drupal\custom_module\TwigExtension\customTwigExtension
    tags:
      - { name: twig.extension }

Archivo customTwigExtension.php

Es aquí dónde especificaremos la nueva funcionalidad (bien sea una función o un filtro nuevo).

<?php

namespace Drupal\custom_module\TwigExtension;

/**
 * extend Drupal's Twig_Extension class.
 */
class customTwigExtension extends \Twig_Extension {

  /**
   * {@inheritdoc}
   * Let Drupal know the name of your extension
   * must be unique name, string
   */
  public function getName() {
    return 'custom_module.customtwigextension';
  }

  /**
   * {@inheritdoc}
   * Return your custom twig function to Drupal.
   */
  public function getFunctions() {
    return [
      new \Twig_SimpleFunction('get_url_param', [$this, 'get_url_param']),
    ];
  }

  /**
   * {@inheritdoc}
   * Return your custom twig filter to Drupal.
   */
  public function getFilters() {
    return [
      new \Twig_SimpleFilter('replace_tokens', [$this, 'replace_tokens']),
    ];
  }

  /**
   * Returns $_GET query parameter
   *
   * @param string $name
   *   name of the query parameter
   *
   * @return string
   *   value of the query parameter name
   */
  public function get_url_param($name) {
    return \Drupal::request()->query->get($name);
  }

  /**
   * Replaces available values to entered tokens
   * Also accept HTML text
   *
   * @param string $text
   *   replaceable tokens with/without entered HTML text
   *
   * @return string
   *   replaced token values with/without entered HTML text
   */
  public function replace_tokens($text) {
    return \Drupal::token()->replace($text);
  }

}

En el código anterior hemos implementado un filtro cuya finalidad será la de reemplazar los tokens de Drupal por su valor y una función que imprime el valor de un parámetro pasado por GET.

Ejemplo de uso

Ahora que hemos definido el filtro y la función, la manera de usarlos en nuestras plantillas es como cualquier otro filtro o función de los proporcionados por defecto:

{# get_url_param function #}
{{ get_url_param('name') }}

{# replace_tokens filter #}
{{ '<h1>[site:name]</h1>' | replace_tokens }}

 

Artículos Relacionados

Añadir nuevo comentario

Este campo no se mostrará públicamente.