Cómo crear campos personalizados para views en Drupal

Gato en el PC

Desarrollar vistas en Drupal ofrece una gran versatilidad de campos a añadir para personalizar nuestro sitio, pero ¿Qué ocurre cuando necesitamos que los datos recogidos tengan un aspecto muy específico, o información que no ofrecen estos campos? En esos casos, tenemos una solución única: crear un campo personalizado en las vistas.

Vamos a ver cómo implementar un campo personalizado que muestra el número de caracteres que contiene el título del nodo.

Lo primero que necesitamos es añadir el campo a un módulo personalizado en la ruta"/src/Plugin/views/field" de nuestro módulo. Para ello, en este ejemplo, usaremos el siguiente código:

 <?php

namespace Drupal\my_module\Plugin\views\field;
use Drupal\views\Plugin\views\field\FieldPluginBase;
use Drupal\views\ResultRow;
/**
 * Field handler to count title field.
 *
 * @ingroup content
 *
 * @ViewsField("title_length_count_field")
 */
class TitleLengthField extends FieldPluginBase {

	/**
	 * {@inheritdoc}
	*/
	public function query() {
	// We leave it empty; we don't need to perform any additional queries.
	// If we wanted the field to query the database and filter the results,
	// we should do it here.
	}
	
	/**
	 * {@inheritdoc}
	*/
	public function render(ResultRow $values) {
    /** @var \Drupal\node\NodeInterface $node */
	$node = $values->_entity;
	$title_length = strlen($node->getTitle());
	return (string)$title_length + 1;
	}

}
 
Después en el archivo .module de nuestro módulo, registraremos este campo con el uso del siguiente código: 
/**
* Implements hook_views_data_alter().
*/
function my_module_views_data_alter(&$data) {
  $data['node_field_data']['title_length_count_field'] = [
   'title' => t('Title Node Length Count'),
   'help' => t('The total number of characters contained in the title.'),
   'field' => [
     'id' => 'title_length_count_field',
   ],
 ];
}
 
Una vez hecho esto, ya podremos utilizar el campo en nuestras views de los diferentes tipos de contenidos. En caso de ser una view que muestra una entidad customizada, podríamos registrar el campo para la entidad exactamente igual, pero en lugar de usar la key 'node_field_data', deberíamos usar como key el nombre máquina de la entidad. 
Comparte este artículo:
Publicado por CésarMSFelipe
Image

Hola a todos, soy desarrollador de Drupal, especializado en Backend, aunque a veces hago mis pinitos con Frontend, ¡Hasta sé centrar un div! Cuando no estoy sumergido en el código, probablemente me encontraréis explorando nuevos mundos en mis videojuegos favoritos o disfrutando de tiempo de calidad con los míos. Me apasiona combinar la tecnología con la creatividad, y siempre estoy buscando nuevas formas de aprender y crecer en mi campo. ¿Unimos fuerzas y creamos algo?
 

Si te gusta mi trabajo y quieres echar una mano:
Buy me a coffe!