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;
}
}
/**
* 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',
],
];
}
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!