Saltar al contenido

Categoría: Desarrollo y Programación

Crear notificaciones en Vue.js con Vuetify 2.0 y Vuex

Si están utilizando Vuetify y desean un componente para mostrar notificaciones en vue.js. Verán que existe una llamado Snackbar que permite implementarlos. El problema de este componente es que requiere definirse en cada vista que hagamos en Vue (por la naturaleza de esta librería) y debemos crear un método para mostrarlo.

Esto es un problema en aplicaciones grandes, porque tendríamos código repetido y descentralizado. Gracias a Vuex podemos evitar este tipo de cosas. Por lo que te explicaré como crear notificaciones con vue.js con Vuex.

Definir opciones del Snackbar en Vuex

Primero vamos a definir en vuestro archivo store.js (o donde instancias Vuex.Store) un estado para tener la configuración por defecto del Snackbar. El estado permite almacenar los parámetros del Snackbar de forma global y poder ser accedida desde cualquier vista. Para ello en la sección de state agrega las siguientes opciones:

export default new Vuex.Store({
  state: {
    snackbar: {
      visible: false,
      color: "success",
      text: null,
      timeout: 10000,
      multiline: false
    },
    ...
    ...
  },

Luego en el mismo archivo, definimos una mutación. En Vuex las mutaciones son los métodos que nos permiten modificar un estado. Esta mutación la usaremos a lo largo de la aplicación para lanzar la notificación desde cualquier lado.

El primer parámetro siempre es el estado actual y el segundo el payload. Éste último es enviado cada vez que llamamos a la notificación con el fin de definir la apariencia. Por ejemplo, si ocurre un error podemos enviar los parámetros de que el tipo de notificación sea error y aparezca de color rojo.

En este ejemplo, agregué opciones para decidir si mostrarlo en multi-línea , elegir color, tiempo de duración, etc. Así que en la sección de mutaciones del store.js agrega:


mutations: {
    alert(state, payload) {
      state.snackbar.text = payload.text;
      state.snackbar.multiline = payload.text.length > 50;

      // Si es mas de 50 caracteres definirlo como multilinea
      if (payload.multiline) {
        state.snackbar.multiline = payload.multiline;
      }
    
      // Color para mensajes de error o éxito
      if (payload.color) {
        state.snackbar.color = payload.color;
      }

     // Tiempo de duración
      if (payload.timeout) {
        state.snackbar.timeout = payload.timeout;
      }
      state.snackbar.visible = true;
   },
   closeAlert(state) {
      state.snackbar.visible = false;
      state.snackbar.multiline = false;
      state.snackbar.text = null;
    },
}

También en esta sección de mutaciones agregué una mutación llamada closeAlert(state) para poder alterar la configuración del snackbar y hacer que se oculte.

Crear el componente de la notificación

Lo mas fácil es crear un componente para la notificaciones. Pues así no mezclas código y lo puedes ubicar en un sólo lugar para que se lance.

Este componente consta simplemente de un Snackbar cuyas opciones son extraídas de un dato llamado snackbar. Este dato es extraído del estado de Vuex definido previamente a través de una variable computada.

Aquí puedes ver el ejemplo de mi componente:

<template>
  <v -snackbar="" top="" v-model="snackbar.visible" :timeout="snackbar.timeout" :multi-line="snackbar.multiline === true" :color="snackbar.color">
    {{ snackbar.text }}
    </v><v -btn="" text="" dark="" @click="closeAlert">Close</v>
  
</template>
<script>
import { mapMutations } from "vuex";
export default {
  computed: {
    snackbar() {
      return this.$store.state.snackbar;
    }
  },
  methods: {
    ...mapMutations(["closeAlert"])
  }
};
</script>

Ahora, para implementar el cierre, importo las mutaciones de Vuex para tener acceso a la función closeAlert que definimos previamente. De esta forma al llamar a closeAlert (una mutación) modificará el estado de la variable visible, haciendo que se oculte.

Este component lo puedes colocar antes del cierre de tu v-app para que se pued mostrar en todas las páginas.

Crear las notificaciones en Vue.Js

Cada vez que desees mostrar una notificaciones en vuej.js, solo debes realizar un commit. El primer parámetro es el nombre de la mutación, en este caso alert y las opciones del snackbar la pasas como segundo parámetro.

Un ejemplo para una notificación de error sería algo como:

this.$store.commit("alert", {
  color: "error",
  text:
    "Could not load purchase order info. Status Code: " +
    response.status
});

¡Listo! Ahora podrás mostrar notificaciones con vue.js de forma centralizada a lo largo de tu aplicación.

Deja un comentario

Ver los errores de WordPress en los hostings

Cuando ocurre un error de WordPress u obtenemos un error HTTP 500 en nuestra instalación (generalmente debido a un error de PHP). El primer paso para resolver el problema es leer el error para conocer que está ocurriendo. Sin embargo, muchos servicios de hosting desactivan mostrar los errores en pantalla para evitar mostrar errores en los sitios de los clientes (se ve mal visualmente). Otra razón para desactivarlo es para prevenir ataques debido a que el error muestre información oculta de la aplicación que pueda ser aprovechada para aprovechar vulnerabilidades.

En algunos casos, por motivos de rendimiento algunos servicios desactivan el almacenamiento de errores en segundo plano. Complicando la posibilidad de conocerlos y arreglarlos.

Cómo mostrar los errores de WordPress

WordPress posee un modo de depuración. Éste permite mostrar los errores de WordPress en la página o almacenarlos en un archivo.

Para activarlo, debes abrir el archivo /wp-config.php. Busca una sección donde puedes colocar constantes. Allí coloca las siguientes constantes:

define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', true);
@ini_set('display_errors', 0);

Ahora podrás ver los errores en pantalla, almacenados en el log e incluso forzando al servidor web a guardarlos. Simplemente chequea el error de WordPress. Soluciona y desactiva de nuevo el modo de depuración para volver la página a su estado original.

Espero que te sirva de ayuda. Si conoces otro método, no dudes en compartirlo. Y si deseas leer mas artículos de este tema. Puedes chequear mi categoría del blog dedicada a WordPress.

Deja un comentario

Mi experiencia en el JConf Dominicana

El pasado 29 de Junio tuve la oportunidad de ser parte de los ponentes del JConf Dominicana. Un evento realizado por la comunidad local de Java en la PUCCM. El evento estuvo formado por ponentes de distintas partes del mundo para comentar sobre las últimas tendencias en la JVM.

La estructura del evento me gustó porque en la mañana se hicieron las principales ponencias por parte de los conferencistas mas importantes en el teatro de la universidad. En la tarde, se hacían el resto de presentaciones en aulas de clase donde los asistentes podían escoger a cuales ir. Me gustó la organización porque estos temas tenían diferente dificultad y áreas, así que podías asistir a las charlas de tu perfil profesional sin problemas de choque.

Sesión matutina

Para llegar a Dominicana tuve que tomar varios vuelos con horarios incómodos. Por esta razón, tuve que dormir el día antes del evento y me levanté un poco tarde. Me perdí la apertura y la primera charla. Pero pude entrar al final de la de Sebastían Daschner sobre los mejores frameworks empresariales de JAVA. Posteriormente fui a la de Mark Heckler sobre plataformas escalables con spring. Excelente ponencia con buenos chistes en español. Finalmente se hizo un panel de conferencistas para discutir los temas actuales de la plataforma Java y del futuro de la misma. Excelente opiniones y temas tratados allí.

Sesión de la tarde

La primera conferencia que entre fue la de Eliezer Herrera sobre plataformas como Graal, Gradle y Vertx que permiten la ejecución de otros lenguajes en la JVM. Muy interesante y no conocía que se podían hacer ese tipo de cosas. De ahí fui a la charla de Carlos Paulino sobre desarrollo continuo para plataformas Android. Me llamó la atención porque trabaja en American Express y quería conocer como es el proceso de desarrollo de una aplicación móvil en ese tipo de empresas. Me llamó al atención el cuidado hacia la calidad y cómo las pruebas se realizan en distintas plataformas.

Luego de un receso para unas golosinas, comenzó la charla de Omar Berroterán Silva sobre GraphQL. La tecnología para obtener fácilmente datos a través de una API. Esta ponencia abarcó desde la introducción hasta dar ejemplos de como consultar datos, instalar esta herramienta, entre otros. Me gustó como Omar utilizó códigos QR en sus láminas para que los asistentes pudiésemos ver los ejemplos en el móvil y participar en la charla.

Java de nuevo a la web con WebAssembly

Mi charla en este evento la estaba dando por primera vez. Aunque había hablado de WebAssembly, nunca la había mezclado con Java. En ella pude hablar sobre una pequeña introducción a esta plataforma. Las diferencias respecto a los Applets de Java (pues tiende a confundir inicialmente a los programadores de Java). Por qué no iba a tener el mismo destino que los applets.

En el caso de Java, esta charla me gustó darla porque existen actualmente varias formas de llevar el lenguaje. Cada una trabaja de forma distinta y pude mostrar las bondades de cada forma.

La presencia fue excelente, hicieron preguntas muy interesantes y de ahí salí al cierre del evento con música dominicana.

Cena del JConf Dominicana

La cena fue excelente, tuve la oportunidad de compartir con otros ponentes. Conocí mas de la cultura Dominicana. Pude probar sus excelentes platos típicos como el mangú y mofongo. Disfrutar de un buen ambiente caribeño y discutir de tecnología.

Fue una gran experiencia participar en el JConf Dominicana. A pesar de estar solo 2 días en el evento. Me llamó la atención como la mayoría de los ponentes internacionales hablaba español. Los temas fueron muy interesantes. Los organizadores hicieron un excelente trabajo.

¡Lo disfruté mucho! Espero volver algún día.

Deja un comentario

WordPress Cron: ejecutar tu tareas cada X horas con intervalos personalizados

WordPress ofrece una funcionalidad llama cron que te permite agendar tareas cada cierto tiempo. Éstas tareas son ejecutadas cada cierto tiempo según lo definido. De esta forma puedes ejecutar funciones de forma automática. Por ejemplo: respaldo de base de datos, sincronización con servicios externos, borrar caché entre otros.

¿Cómo funciona el cron de WordPress

WordPress posee un archivo llamado cron.php que al ejecutarlo. Revisa todas las tareas definidas en el cron para ejecutar las funciones de aquellas programadas a la hora actual o anterior. Por ejemplo, si decides ejecutar una tarea cada 12 horas. La primera vez que lo ejecutes lo agendará para ser ejecutado luego de 12 horas. Cada vez que se llama a al archivo cron.php bien sea de forma manual (accediendo directamente a él) o como lo hace por defecto, donde chequea cada vez que la página recibe una visita (no lo hace todo el tiempo). El archivo chequea si existen eventos registrado para la hora actual o ya pasada (es decir se le culminó el tiempo de agendado) y llama a la función definida en cada evento.

Agendar nuestros eventos al cron

Como comenté anteriormente, necesitamos definir el nombre de nuestro evento y la función a ejecutar. Primero debemos chequear que el evento no está agendado previamente para agregarlo. Una vez agregado no es necesario hacerlo de nuevo, con una sola vez se ejecutará varias veces automáticamente. De lo contrario será agregado infinidad de veces al cron. A continuación podemos ver un ejemplo de como hacer este proceso en tu plugin o tema.

if ( ! wp_next_scheduled( 'mi_evento' ) ) {
    wp_schedule_event( time(), 12 * HOUR_IN_SECONDS, 'mi_evento' );
}

En el segundo parámetro podemos ver 12 * HOUR_IN_SECONDS, ésta es una constante definida en WordPress, aunque podemos utilizar las cadenas de texto como ‘daily‘ (diariamente una vez al día), ‘twicedaily‘ (dos veces al día), ‘hourly‘ (cada hora). De esta forma tenemos control de la periodicidad del evento.

Cómo definir mis propios intervalos

Puedes definir tu propio período de tiempo para ejecutar tareas en el cron. Por ejemplo cada 3 horas o crear un período definido por un usuario a través de una caja de texto. Para ello, debes hacerlo de la siguiente forma:

function miprefijo_agregar_intervalo_de_cron( $schedules ) {
    $schedules['medio_minuto'] = array(
        'interval' =&gt; 30,
        'display'  =&gt; esc_html__( 'Every Five Seconds','mi-dominio-idioma'),
    );
 
    return $schedules;
}

add_filter( 'cron_schedules', 'miprefijo_agregar_intervalo_de_cron' );

Ahí vemos como WordPress posee en la variable $schedules la lista de intervalos y su cantidad en segundos. Nosotros a través de un filtro, vamos a agregar nuestro intervalo de medio minuto a la lista definida en la variable $schedules. Finalmente cada vez que se llame al listado de intervalos, nuestro período personalizado aparecerá allí. Y podemos utilizarlo en el segundo parámetro de wp_schedule_event().

Espero que esta guía os haya gustado, para mas información puedes chequear la documentación oficial de WordPress Cron. Cualquier duda que tengas no dudes en preguntarla.

Deja un comentario