Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Yii

Creando su startup: notificando a las personas de las actualizaciones de la reunión

by
Read Time:11 minsLanguages:

Spanish (Español) translation by Elías Nicolás (you can also view the original English article)

Final product imageFinal product imageFinal product image
What You'll Be Creating

Este tutorial forma parte de la serie Creando su Startup Con  PHP en Envato Tuts +. En esta serie, te estoy guiando a través del lanzamiento de un startup de concepto a realidad utilizando mi aplicación de Meeting Planner como un ejemplo de la vida real. Cada paso a lo largo del camino, voy a lanzar el código de Meeting Planner como ejemplos de código abierto que puede aprender. También me ocuparé de asuntos relacionados con negocios del startup de a medida que surjan.

En esta serie de dos partes, describiré cómo construimos la infraestructura de notificaciones y su entrega. Hoy, me centraré en el MeetingLog para realizar un seguimiento de los cambios que nos ayuden a determinar cuándo enviar actualizaciones.

Si aún no ha probado Meeting Planner, aproveche y programe su primera reunión. Participo en los hilos del comentario abajo, así que dígame lo que usted piensa! Me interesa especialmente si desea sugerir nuevas funciones o temas para futuros tutoriales.

Como recordatorio, todo el código para Meeting Planner está escrito en el framework Yii2 para PHP. Si desea obtener más información acerca de Yii2, consulte nuestra serie paralela Programación con Yii2.

Mi visión para las notificaciones

Esto es lo que normalmente ve un participante de la reunión cuando recibe una invitación. Comenzarán a compartir su disponibilidad para lugares y horas ya veces eligiendo las selecciones finales:

Meeting Planner Notifications - Meeting Planning FormMeeting Planner Notifications - Meeting Planning FormMeeting Planner Notifications - Meeting Planning Form

Cuando un participante de una reunión responde a una invitación como la anterior, pueden hacer un puñado de cambios. Por ejemplo:

  • Esta fecha y hora funciona, estos dos no.a
  • Este lugar funciona, éste no, vamos a considerar también este adicional.
  • Elijo este lugar y esta horario.
  • Añadir una nota: "Me alegro de que finalmente nos estamos reuniendo."

Después de hacer los cambios, necesitamos informar al organizador.

Nuestro objetivo es simplificar la planificación de reuniones y reducir el número de correos electrónicos involucrados. Si esperamos unos minutos después de que la persona haga cambios y consolidemos los cambios en una sola actualización, es probable que sea un buen momento para entregar la notificación. ¿Pero cómo construimos el código que hace eso? ¿Cómo hacemos un seguimiento de los cambios que estamos haciendo e ifnformar esto para el organizador?

Otra idea que tuve es eliminar la necesidad de hacer clic en enviar cuando haya terminado de hacer cambios. En primer lugar, esto requeriría una cierta educación al usuario para asegurarles que enviaremos sus cambios cuando hayan terminado. Pero también necesitábamos una manera de saber cuando estaba bien entregar los cambios al organizador.

Cómo funcionaran las notificaciones

Para restablecer y resumir los requisitos, veremos cómo funcionan las notificaciones:

Todas las acciones relacionadas con las reuniones se guardan en nuestro modelo MeetingLog. Pero necesitaremos una manera de crear un resumen textual del registro para compartir con los participantes. Es posible que desee mostrar sólo los cambios que se produjeron desde la última actualización. Así que tendremos que rastrear eso.

A medida que la persona realiza cambios en la reunión, indicamos visualmente que no es necesario hacer clic en un botón de envío o de cambios no existente.

Queremos supervisar si los cambios tienen unos minutos y consolidarlos en una sola actualización para el otro participante u organizador.

Y finalmente, tendremos que entregar la actualización por correo electrónico solo a los otros participantes, no a la que realizó los cambios. O bien, si ambos participantes han hecho cambios durante este tiempo, tendremos que notificar cada uno de los actos del otro.

Creación del registro de la reunión

Desde el principio, quería un registro completo de las acciones realizadas al planificar las reuniones por una serie de razones. Tal vez la gente quiera ver el historial de planificación, o volver a un cierto momento—pero también, es útil para la depuración. También resultó ser necesario para saber cuándo entregar actualizaciones sobre los cambios en la reunión.

Revisemos la estructura detrás del modelo MeetingLog. Aquí está la migración que crea la tabla:

Los elementos esenciales que estamos guardando son:

  • El meeting_id nos indica qué reunión estamos siguiendo.
  • La action nos dice lo que se hizo.
  • El actor_id nos dice quién realizó la acción (por ejemplo, user_id).
  • El item_id sobrecargado puede representar un tiempo, un lugar una nota.
  • El extra_id es para guardar otra información dependiendo de la acción.
  • Created_at nos indica cuándo se realizó la acción.

A continuación, definí constantes para todas las acciones como ACTION_SUGGEST_PLACE o ACTION_ADD_NOTE, etc.

El método add facilita que la funcionalidad en todas partes de la aplicación registre la actividad en MeetingLog:

También agregé dos nuevos campos a la tabla de reunión: logged_at y cleared_at. Siempre que se agreguen entradas de registro, la Reunión actualiza la marca de tiempo logged_at, mostrando el momento en que la reunión fue modificada por última vez:

Por ejemplo, cada vez que alguien añade una nueva opción de MeetingPlace, un evento afterSave se agrega al registro y, por supuesto, Meeting->logged_at también se actualiza:

El tiempo logged_at nos indica cuándo ocurrió el último cambio. La Meeting->cleared_at time nos dirá la hora en que compartimos las últimas actualizaciones con los participantes. Por lo tanto, si logged_at > cleared_at, sabemos que los participantes no están completamente actualizados.

Creación de un resumen entendible

Meeting Planner Notifications - MeetingLog Planning HistoryMeeting Planner Notifications - MeetingLog Planning HistoryMeeting Planner Notifications - MeetingLog Planning History

A continuación, construí métodos para ayudar a traducir el registro en una historia de idioma inglés de los cambios en la reunión.

Primero, creé getMeetingLogCommand() para obtener una descripción textual de la acción:

Entonces, creé getMeetingLogItem(), que encuentra contextualmente la etiqueta apropiada del objeto basada en qué acción fue realizada. Todavía hay algunas notas de depuración para mí mismo aquí:

Por ejemplo, crear, editar, cancelar, eliminar la reunión no necesita información del elemento, mientras que el tiempo de aceptación requiere un item_id específico que corresponde a una fecha y hora de MeetingTimeChoice.

Proporcionar pistas visuales

Cuando un participante cambia los controles deslizantes por lugares y horas para indicar sus preferencias, o si se permite, hace una elección final, quería indicar para ellos que su organizador de la reunión será notificado cuando hayan terminado. También quería que esto fuera discreto, como un alerta emergente.

Dado que muchos de estos cambios están relacionados con AJAX, el mensaje necesario para aparecer cerca de las acciones del ratón. En la ocasión en que se envía un cambio (como una nota nueva), la notificación puede aparecer en la parte superior de la página.

Los avisos de Flash de Yii son excelentes, pero sólo aparecen en la parte superior de las páginas. Por ejemplo, actualmente, agregar una nota requiere una actualización de página. La gente verá la sugerencia de notificación en la parte superior de la página después de publicar su nota:

Meeting Planner Notifications - Refreshed Top of Page Flash NotificationMeeting Planner Notifications - Refreshed Top of Page Flash NotificationMeeting Planner Notifications - Refreshed Top of Page Flash Notification

Por lo tanto, por ahora, mientras nuestro diseño sigue en flujo, sólo he creado elementos ocultos de notificación de flash por encima de las áreas que muestran lugares y por encima de la zona que muestra los tiempos. Siempre que la gente realice cambios, verán la notificación cerca de la acción del ratón.

Meeting Planner Notifications - Top of Section AJAX Flash NotificationMeeting Planner Notifications - Top of Section AJAX Flash NotificationMeeting Planner Notifications - Top of Section AJAX Flash Notification

En el futuro, no mostraremos estas notificaciones a usuarios experimentados como ya lo sabrán.

Por lo tanto, si una persona hace un cambio en un momento o lugar, llamamos a displayNotifier():

Este código en /frontend/views/meeting/view.php garantiza que no vean las alertas repetidamente a través de una sesión. Utiliza variables de sesión para rastrear si ya se ha mostrado una sugerencia:

¿Que sigue?

Meeting Planner Notifications - The Initial Notification Email TemplateMeeting Planner Notifications - The Initial Notification Email TemplateMeeting Planner Notifications - The Initial Notification Email Template

He descrito la visión que estoy tratando de crear con las acciones de planificación entre los participantes. En el siguiente tutorial, le mostraré cómo supervisamos el tiempo para saber cuándo y cómo entregar actualizaciones. Y te mostraré cómo entregamos las actualizaciones por correo electrónico, como la anterior. También voy a mostrarles cómo creamos un resumen textual de los cambios recientes que se hicieron.

Mientras espera, pruebe la función de notificaciones y programe su primera reunión. Además, le agradecería que compartiera su experiencia a continuación en los comentarios, y siempre estoy interesado en sus sugerencias. También puede contactarme directamente en Twitter @reifman.

Vea los próximos tutoriales en la serie Creando su inicio con PHP. Hay algunas características más grandes que vendran pronto.

Enlaces relacionados

Advertisement
Did you find this post useful?
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.