Drupal 8 - Crear campo visitas que se autoincremente al ver un nodo

Drupal 8

Hola y bienvenido a este nuevo video, en el cual un amigo llamado DONATO, me dio este tips, para que lo desarrollemos en Drupal 8.

Problema Planteado

Nuestro cliente quiere que cuando se visualice un nódo, en automático, debe ir aumentando de 1 en 1 el campo llamado visitas.

Solución a esta problemática

Creamos un campo llamado Visitas  en el tipo de contenido llamado Articulo en la siguiente ruta: tudrupal/admin/structure/types/manage/article/fields.

Campo Visitas

Continuamos con la creación de este campo, con todas las opciones como lo trae drupal.

Una vez hecho esto, procederemos a crear un nódo de tipo artículo en la ruta: tudrupal/node/add/article. y llenamos el campo Visitas con el valor 1. 

En mi caso, se creó el nódo número 3.

Ahora vamos a ir a la ruta: tudrupal/admin/structure/types/manage/article/form-display y vamos desactivar el campo visitas, porque no queremos que un usuario lo manipule, sino que se modifique en automático. 

Luego iremos a la ruta: tudrupal/admin/structure/types/manage/article/display y vamos a poner el campo visitas despues del campo body.

Vamos a proceder a instalar los siguientes módulos:

Luego vamos a activar los siguientes módulos:

  • devel
  • devel_php
  • kint
  • search kint

Entonces ya si estamos listos para crear nuestro módulo, y lo haremos llendo a la carpeta llamada modules, y crearemos una carpeta llamada custom y dentro de este, crearemos otra carpeta que llamaremos visitas.

En esta carpeta crearemos dos archivos:

visitas.info.yml

name: Visitas
description: Visitas en el nodo
package: Custom

type: module
core: 8.x

visitas.module

<?php 

function visitas_entity_view(array &$build, \Drupal\Core\Entity\EntityInterface $entity, \Drupal\Core\Entity\Display\EntityViewDisplayInterface $display, $view_mode) {

	if ($entity->bundle=='article') {
         //sin este comando no se autoincrementa el campo visitas. 
         $build['#cache']=false;
         //aquí creamos un campo llamado $visitas y le pasamos el valor que tiene el campo visitas
         $visitas = $entity->get('field_visitas')->value;
         //aumentamos en uno la variable llamada visitas.
         $visitas++;
         //le pasamos este valor al campo visitas que creamos. 
         $entity->get('field_visitas')->value = $visitas ;
         //procedemos a guardar este valor en el articulo.
         $entity->save();
         //dpm('Estoy aqui');   //este comando funciona si está activo el modulo devel
         //ksm($build);  //este comando funciona si está activo el comando kint. 

	}
	

}

En el archivo .module, usamos una función llamada hook entity view.

En el archivo .module están los comentarios de que hace cada comando dentro del hook.

Cualquier inquietud o duda, estoy a la orden. 

Video
Archivo a descargar

Comparte este artículo