Elementor: Añadir nuevo widget

25/02/2021

1. ¿Qué es Drupal Elementor?

Elementor es un módulo de Drupal cuya finalidad es la de generar páginas de una manera sencilla, arrastrando, «drag and drop», los diversos widgets y aplicando los estilos correspondientes sobre la marcha. El módulo nos provee una interfaz sencilla e intuitiva (fig 1.) con la que conseguiremos buenos resultados en el menor tiempo posible. Puedes ver una introducción a Elementor aquí.

Elementor - Nuevo widget - Interfaz de Elementor
Fig. 1 - Interfaz de Elementor.

2. ¿A qué denominamos Widget?

Un widget en Elemetor es cada uno de los bloques individuales con los que podemos construir nuestra página. En la fig.1 podemos apreciar los widgets básicos (Buttom, Divider, Space...) que componen nuestro módulo. Se clasifican en 2 grupos, Basic y General (fig.2) cada uno de ellos con diversos widgets.

Elementor - Nuevo widget - Tipos de Widgets
Fig. 2 - Tipos de Widgets

A su vez, cada widget posee tres bloques (fig.3) con los que manejar tanto su contenido como los estilos que le vamos a aplicar, estos bloques son: Content, Style y Advanced.

Elementor - Nuevo widget - Bloques para editar el widget
Fig. 3 - Bloques para editar el widget

De esta manera, podemos arrastrar el widget al lugar que determinemos en la página, completar su contenido (Content), añadir estilos al propio widget (Style) y añadir estilos en relación al contenedor donde se incluye (Advanced)

3. Creación de un nuevo widget

Tenemos la posibilidad de añadir al modulo Elementor un widget que aporte una nueva funcionalidad. En el ejemplo vamos a añadir un CountDown (cuenta atrás) con la finalidad de indicar el tiempo de expiración de un producto.

Accedemos al archivo elementor/elementor/includes/manager/widgets.php y añadimos nuestro nuevo widget (dsu-c_countdown) a la función init_widgets().

Elementor - Nuevo widget - Función init_widgets()
Fig. 4 - Función init_widgets()

A continuación crearemos el archivo de configuración de nuestro nuevo widget en la ruta  elementor/elementor/includes/dsu-c_countdown.php. Para su mejor comprensión vamos a desglosar el contenido del archivo en diferentes bloques:

1. Bloque común a todos los widgets: Es necesario añadir el namespace Elementor; y una pequeña comprobación para que elementor encuentre el widget:

Elementor - Nuevo widget - Bloque común a todos los widgets

2. Clase Global: Creamos la clase Widget_Dsu_C_countdown y la extendemos de Widget_Base para que podamos hacer uso de todos sus métodos por defecto.

Elementor - Nuevo widget - Clase global

3. Bloque de información general: A continuación añadiremos dentro de la clase Widget_Dsu_C_countdown  la información propia del Widget que aparecerá en las opciones de Elementor (fig.1). Nombre, Título, Icono y Keywords. En nuestro caso también debemos añadir la función get_script_depends() para obtener información de la librería Jquery que se usa en la configuración.

Elementor - Nuevo widget - Bloque de información general

4. Bloque de controladores: El siguiente paso es añadir la secciones que se añadirán a cada uno de los Tabs de la fig.3 para añadir tanto el contenido del propio contador como los estilos del widget, es decir los campos que aparecerán en Content y Style. Para ello creamos la función _register_controls(), en la cual mediante la llamada a la función $this->start_controls_section() iniciaremos el proceso para añadir los campos, concretamente con la función $this->add_control() añadiremos cada uno de ellos. si queremos añadir una fecha(la cual indica el tiempo de finalización) y un título el código será el siguiente:

Elementor - Nuevo widget - Bloque de controladores

Para cerrar una seccion de controladores tenemos que indicar $this->end_controls_section();
Podemos apreciar que en la interfaz de elementor aparecerá el siguiente input con la información:

Elementor - Nuevo widget - Formulario edición

5. Repetimos el proceso para añadir la posibilidad de modificar los estilos para ello volvemos a iniciar una sección de controladores indicando que el tab = TAB_STYLE

Elementor - Nuevo widget - Tab style

A continuación añadimos el controlador para modificar el color de los números:

Elementor - Nuevo widget - Formulario tab style

El resultado es:

Elementor - Nuevo widget - Interfaz formulario tab styleElementor - Nuevo widget - Resultado del nuevo widget

Los controladores de estilos Avanzados se añaden de manera automática.

6. Bloque de renderizado. El siguiente paso será renderizar el contenido del controlador en la página, en este caso, al tener un contenido dinámico, el countdown no para de avanzar tanto con el valor por defecto como por el que introducimos de manera manual, debemos añadir las siguientes funciones:

_content_template() para renderizar el contador con el valor por defecto.

Elementor - Nuevo widget - Función _content_template()

render() para renderizar el contador con el dato insertado de manera manual.

Elementor - Nuevo widget - Función render()

En ambas funciones creamos la estructura HTML y añadimos el código JS para que se realice la cuenta atrás de la manera correcta.