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.
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:
- https://www.drupal.org/project/devel
- https://www.drupal.org/project/devel_php
- https://www.drupal.org/project/search_kint
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.