El objetivo de esta lección será establecer un mecanismo mediante el cual podamos destacar contenido nuevo para los visitantes que regresan al sitio web. Entonces, por ejemplo, considere que un usuario visita el sitio y lee todos los hilos de la página principal y luego se va por el día. Más tarde, un visitante diferente visita el sitio y agrega una nueva respuesta para decir tres hilos diferentes. Cuando el primer usuario regresa, esos tres hilos con nuevas respuestas deben resaltarse de alguna manera. En nuestro caso, tal vez podamos agregar una fuente en negrita a los hilos que tienen contenido nuevo para resaltar al usuario. Veamos cómo podemos implementar esto ahora.


Impulsar contenido nuevo a través de la caché

Todos los modelos en Laravel hacen uso de un campo updated_at en la base de datos. Esto significa que sabremos cuál ha sido la actualización más reciente en un hilo en particular. Lo que eso significa es que si registramos una marca de tiempo de cuando un usuario visita un hilo en particular, entonces podemos comparar esa marca de tiempo con el valor updated_at para ver cuál es más reciente. Si la marca de tiempo que visitó el usuario es más reciente que la marca de tiempo updated_at, no es necesario resaltar el contenido. Por otro lado, si el valor updated_at es más reciente que la marca de tiempo de la caché de la visita más reciente del usuario, eso significa que hay contenido nuevo que debe resaltarse para el usuario.


Registro de visitas de usuarios

Si seguimos la lógica de comparar un valor de tiempo de la caché con lo que está en la base de datos, entonces necesitamos una forma de registrar cuándo el usuario ha visitado una página determinada. Quizás podamos agregar un par de métodos. A continuación se resaltan los métodos read () y wentThreadCacheKey () en el modelo de usuario. VisitThreadCacheKey () es donde ocurre la esencia de esta característica. En él, una cadena única se define como la clave que se utilizará al almacenar un registro de una visita en la caché. Trabajando en conjunto con el método read (), almacenamos una nueva clave en la caché donde es igual a la hora actual según Carbon :: now ().


Buscando actualizaciones en el modelo de subproceso

Los métodos que están haciendo el trabajo pesado para esta función ya están definidos en el modelo de usuarioAhora, podemos agregar un método al modelo Thread que busca nuevas actualizaciones para un usuario. Tenga en cuenta el método hasUpdatesFor () resaltado a continuación en el modelo Thread.

Lo que hace el método hasUpdatesFor () por nosotros es verificar en la caché la marca de tiempo de la última vez que el usuario visitó el hilo en cuestión. Entonces estamos haciendo una comparación. Estamos verificando si la marca de tiempo updated_at es mayor que el valor de la marca de tiempo que se encuentra en la caché. Si es mayor que, entonces ha sucedido algo como una nueva respuesta para actualizar este hilo. Eso significa que el usuario necesita ver el nuevo contenido resaltado para que la función devuelva verdadero.

¿Dónde tendrá lugar la grabación real de la visita? Tiene sentido que en ThreadsController, el método show () sea lo que se use para mostrar un hilo a un usuario. Por lo tanto, si un usuario que ha iniciado sesión visita un hilo, este es el método que se lo muestra. A continuación se resalta un fragmento que hace una verificación rápida para ver si el usuario está conectado. Si eso es cierto, entonces llamamos al método read () que definimos en el modelo de Usuario justo arriba. Cuando este método read () se activa, se apoya en el método VisitThreadCacheKey () para almacenar una clave en la caché usando Carbon :: now () como marca de tiempo. ¡Excelente!


Agregar lógica en Blade para resaltar contenido

Todo está en su lugar ahora para que esto funcione. Todo lo que tenemos que hacer es actualizar el archivo de vista threads / index.blade.php para resaltar el nuevo contenido. ¿Cómo haremos eso? Bueno, aquí es donde podemos hacer uso del método hasUpdatesFor () que definimos en el modelo Thread. El código resaltado a continuación está verificando si el hilo tiene contenido nuevo para el usuario autenticado que actualmente está conectado al sitio web. Si eso devuelve verdadero, entonces el título del hilo está envuelto en etiquetas <strong> para dar una indicación visual de que hay contenido nuevo listo para que el usuario se ponga al día. Si no devuelve verdadero, entonces el título del hilo se muestra en la página con fuente normal.


Ver contenido nuevo destacado en acción

Hemos iniciado sesión como usuario Nikola Tesla y hemos visitado todos los hilos de la página principal del sitio web. Por lo tanto, podemos ver que no se resaltan los hilos a continuación.
aún no hay contenido nuevo para destacar

Llega Tom y decide agregar una respuesta al "¡Santo Guacamole!" hilo.
Se ha agregado nuevo contenido al sitio web.

Bueno, en este punto, la lógica que hemos construido en el sitio debería poder resaltar el nuevo contenido. En otras palabras, el "¡Santo Guacamole!" El título del hilo ahora debería aparecer en negrita cuando Nikola Tesla regrese al sitio web como visitante recurrente. ¡Parece que esto está funcionando!
el nuevo contenido ahora está resaltado para el visitante que regresa

Nota: Si tiene problemas para que esto funcione, agregue una llamada a $ this-> touch (); en el método addReply () del modelo Thread. Esto garantizará que la columna updated_at se actualice correctamente al agregar una nueva respuesta.


Construya primero, pruebe después

Este tutorial nos hizo construir primero y probar después. No se preocupe, podemos agregar una prueba para esta nueva función de contenido aquí. La prueba se destaca a continuación.

Y ejecutar la prueba valida que la funcionalidad esté funcionando según lo diseñado.

vagrant @ homestead: ~ / Code / forumio $ phpunit --filter test_a_thread_can_check_if_the_authenticated_user_has_read_all_replies
PHPUnit 6.5.5 por Sebastian Bergmann y colaboradores.

. 1/1 (100%)

Tiempo: 1,16 segundos, memoria: 8,00 MB

OK (1 prueba, 2 afirmaciones)

Resumen de cómo destacar contenido nuevo para visitantes recurrentes

Para ser justos, esta tarea podría haberse logrado de muchas formas diferentes. Sin embargo, el mismo principio es válido. Si desea destacar contenido nuevo para los visitantes que regresan a su sitio web, primero debe registrar cuándo fue la última vez que verificaron ese contenido en particular. Luego, configura la lógica para ver cuándo se actualizó ese contenido y cuándo el usuario vio el contenido por última vez. Con base en esa lógica, sabrá si debe proporcionar una buena señal visual al usuario de que hay nuevo contenido para ponerse al día.