Cómo mostrar "algo" sólo una vez al día, a la semana, o cada X horas

En este artículo vamos a ver cómo mostrar "algo" a los visitantes de nuestra página, sólo una vez cada cierto tiempo.

Ese algo puede ser:

  • Un anuncio importante que se debe mostrar una vez por día
  • Un recordatorio que se debe mostrar como máximo una vez por semana
  • Una promoción exclusiva (evitando que se muestre muchas veces, a fin de no incomodar)

Para lograr esto, vamos a usar cookies.

Vamos a ver 2 formas de implementar esto: usando cookies con código PHP, y usando cookies con código específico de Laravel.

El código PHP puede usarse perfectamente también en un proyecto Laravel. De todas formas, analizaremos cómo es que se haría lo mismo usando el facade Cookie de Laravel.

Código PHP

En un proyecto PHP, donde no se hace uso de un framework, es común encontrar código PHP dentro de la estructura HTML de una página.

En ese caso es posible usar algo como lo siguiente:

<? if (!isset($_COOKIE['show_occasionally'])): ?>

    <!-- aquí estaría el contenido que se espera mostrar ocasionalmente -->

    <?
    setcookie('show_occasionally', true,  time() +86400); // 1 día equivale a 86400 segundos
    ?>

<? endif; ?>

En el código anterior, creamos 1 cookie con el nombre show_occasionally, pero el nombre podría ser cualquier otro.

De hecho, podemos tener distintas cookies conviviendo, para mostrar contenido variado, según las distintas secciones de nuestra página.

En el ejemplo:

  • Si no existe show_occasionally mostramos el contenido y creamos la cookie.
  • La cookie se crea con una duración de 86400 segundos, eso equivale a 1 día. Una hora sería 3600 segundos, y así puedes establecer el tiempo que consideres prudente.

Código Laravel

En Laravel también podemos usar isset y el arreglo global $_COOKIE para verificar la existencia de una cookie.

Así mismo, también podemos usar setcookie para crear una cookie nueva.

Sin embargo, en Laravel podemos hacer uso del facade Cookie o el helper cookie, que son equivalentes pero más legibles.

Veamos un ejemplo.

  • Tengo un controlador llamado ArticleController que se encarga de generar la vista para mostrar los artículos de mi blog (a través de un método llamado show).
  • Entonces en el método show voy a escribir una lógica para que una oferta de descuento se muestre como máximo 1 vez por minuto.
  • El controlador enviará una variable $showDiscount a la vista, de modo que la vista entenderá si debe o no mostrar la oferta de descuento.

Entonces en el método show ponemos:

if (Cookie::has('hide_discount')) {
    $showDiscount = false;
} else {
    $showDiscount = true;
    $cookie = Cookie::make('hide_discount', true, 1);
    Cookie::queue($cookie);
}

return view('articles.show')->with(compact('article', 'tags', 'showDiscount'));

Esto dice lo siguiente.

  • Si existe una cookie llamada "esconder descuento", entonces la variable $showDiscount será false.
  • Si no existe esta cookie, $showDiscount será true, y creamos la cookie (de tal forma que dure un minuto y durante este tiempo no se muestre la oferta).

Así es. Como habrás notado, Laravel usa minutos en vez de segundos.

El método make nos devuelve una cookie. Pero si no hacemos nada con este objeto, la cookie no se va a crear para el visitante.

Para usar la cookie tenemos varias formas. Una de ellas es usar queue, para que esta cookie se cree justamente al termino de la petición (es decir, devolvemos la vista al usuario, y en ese momento Laravel creará también la cookie).

En el código de ejemplo de hecho he añadido un return view para mostrar cómo la variable $showDiscount es enviada la vista.

De forma tal que en la vista sólo tendríamos:

@if ($showDiscount)
    {{-- aquí el contenido que quieras mostrar --}}
@endif

Dentro de la directiva if podrías imprimir código HTML o incluso incluir un archivo Javascript sobre la página.

Ello ya depende de tus necesidades.

php laravel cookies

Cursos recomendados

Curso de Laravel 5.5

Aprende Laravel

Aprende Laravel 5.5 desde cero y desarrolla aplicaciones web reales, en tiempo récord, de la mano de Laravel.

Ver más
Curso práctico de Javascript

Aprende Javascript

Domina JS con este curso práctico y completo! Fundamentos, ejemplos reales, ES6+, POO, Ajax, Webpack, NPM y más.

Ver más
Curso de Laravel, Vue.js y Pusher

Aprende Vue.js

Desarrollemos un Messenger! Aprende sobre Channels, Queues, Vuex, JWT, Sesiones, BootstrapVue y mucho más.

Ver más

¿Tienes alguna duda?

Si algo no te quedó claro o tienes alguna sugerencia, escribe un comentario aquí debajo.

Además recuerda compartir el post si te resultó de ayuda. ¡Gracias!

Antes que te vayas

Inscríbete en nuestro curso gratuito de Laravel