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

Creando su startup: La base del panel de control

Read Time: 14 mins
This post is part of a series called Building Your Startup With PHP.
Building Your Startup: Sending Reminders
Building Your Startup: Improving the Mobile Web

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 es parte de la serie Construyendo tu Startup con PHP en Envato Tuts +. En esta serie, te estaré guiando como poner en marcha un startup desde el concepto hasta la realidad utilizando mi aplicación de Meeting Planner como un ejemplo de la vida real. Cada paso en el camino, publicaré el código de Meeting Planner como ejemplos de código abierto de los que puedes aprender. Voy también abordaré las cuestiones de negocios relacionados con la puesta en marcha que puedan surgir.

Como se acerca al lanzamiento alfa de Meeting Planner, necesitamos una manera de abordar las solicitudes de apoyo con los usuarios y monitorear la actividad. En otras palabras, necesitamos construir un panel de control (dashboard) administrativo con gestión de usuarios e informes. En conversaciones con un consejero, ya comentamos que al acercarme a potenciales inversores, tendré que tener excelentes datos que detallan el comportamiento de los usuarios y el crecimiento del servicio.

En el episodio de hoy, vamos a construir las bases para nuestro panel de control (dashboard) administrativo y crear en él algunos reportes iniciales en vivo e históricos. Por ejemplo, vamos a saber cuántas personas se ha registrado en cualquier momento, cuántas reuniones se han programado y qué porcentaje de los participantes invitados le gusta el servicio lo suficiente para ir a organizar su propia reunión. Realmente ha sido bastante divertido construir estas cosas y ver los datos, incluso si estamos en pre-lanzamiento.

Si aún no has probado Meeting Planner (y quieres aparecer en los datos agregado), sigue adelante y programa tu primera reunión. Yo participo en los comentarios más abajo, así que Dime lo que piensas! También puede contactarme en Twitter @reifman. Me interesa especialmente si quieres sugerir nuevas funcionalidades o temas para futuros tutoriales.

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

Construyendo la base del Panel de Control (dashboard)

La plantilla avanzada de Yii

Yii2 ofrece laparte frontal y posterior de sitios web dentro de su configuración de aplicación avanzada. Puedes leer más sobre él en mi tutorial de Envato Tuts +, Como programar con Yii2: usando la plantilla de aplicación avanzada. Basicamente, la plantilla avanzada frontal (front-end) del sitio proporciona funcionalidad orientada a los usuario, y la parte posterior (back-end) del sitio es para el panel de control y administración del sitio.

Para activarlo, sólo necesito configurar Apache en mi ordenador local dentro de mi MAMP y en mi Ubuntu server de producción. Por ejemplo, aquí está la configuración de Apache en el servidor de producción para cargar el sitio web /backend/web 

Configurando el codigo de la parte del servidor (Back-end) de nuestro sitio

A continuación, construí un nuevo diseño para el código del lado del servidor (back-end) del sitio basado en el códio del lado del usuario (front-end) del sitio, pero con diferentes opciones de menú. He decidido que la página inicial del sitio redirija a una página de estadísticas en tiempo real. Y los menús ofrecen enlaces a datos en tiempo real, datos de ayer a la medianoche y datos históricos. Explicar un poco más de esto a medida que avancemos.

Meeting Planner Dashboard - Menu LayoutMeeting Planner Dashboard - Menu LayoutMeeting Planner Dashboard - Menu Layout

Aquí está el \backend\views\layouts\main.php con el menú:

Construyendo el reporte inicial

Para mi reporte de estadística inicial, me enfoqué en simples datos en tiempo real y datos históricos detallados. Por ejemplo, datos en tiempo real te dirán el número de usuarios y reuniones construidos en el sistema y su estado.

Los datos históricos te dirán el número de usuarios y reuniones completadas así como otros datos interesantes, sobre todo las curvas de crecimiento que yo y los posibles inversores queremos ocuparnos.

Datos en tiempo real

La página de datos en tiempo real necesita mostrar una instantánea en vivo de lo que está sucediendo en el sitio. Inicialmente, quería saber:

  • ¿Cuántas reuniones existen en el sistema?
  • ¿Cuántos usuarios están?
  • ¿Cuál es su estado?

Para lograr esto, he creado un controlador DataController.php y modelo Data.php en el back-end. También di un paso adelante y en lugar de crear HTML crudo en mi vista para mostrar esto, he creado ActiveDataProviders de mis consultas y alimento a los diseño de columnas de Yii; el resultado se ve mejor y es más sencillo de construir y mantener.

Este código de consulta el número de sesiones en el sistema agrupado por su condición de:

Este código en /backend/views/data/current.php muestra:

Aparece así (los datos son pocos ya que el sitio no se ha lanzado todavía!):

Meeting Planner Dashboard - Real Time Meeting DataMeeting Planner Dashboard - Real Time Meeting DataMeeting Planner Dashboard - Real Time Meeting Data

Luego, he creado unas pocas más consultas en tiempo real, y el resto de la página aparece as:

Meeting Planner Dashboard - Real Time Data People and PlacesMeeting Planner Dashboard - Real Time Data People and PlacesMeeting Planner Dashboard - Real Time Data People and Places

Con respecto a las columnas arriba de personas activas y a través de invitación, si invitas a una persona a una reunión, lo contamos como un usuario a través de invitación hasta que crean una contraseña o vinculan su cuenta social. Hasta entonces, su único acceso al Meeting Planner es a través de un link de invitación por correo electrónico y su id de autenticación.

Obviamente, Expandiremos las opciones de informes en tiempo real con la evolución del proyecto.

Reporting de datos históricos

Generando informes históricos para actividades de todo el sistema resulta un poco más trabajoso. He decidido crear algunas capas de recopilación de datos dependientes.

La capa inferior es una tabla de datos de usuario que resume el estado histórico de actividad de una cuenta de una persona hasta un día específico a la medianoche. Básicamente, haremos esto todas las noches.

La capa superior es la tabla de HistoricalData que basa sus cálculos usando la tabla de datos de usuario desde la noche anterior.

También se debe escribir el código para las dos tablas desde cero ya que el servicio ha estado un poco activo durante varios meses.

Te guiar a través de cómo lo hice. El resultado torna muy bien.

Creación de tablas de migraciones

Aquí está la tabla de migración de datos de usuario, que contiene los datos que quería calcular todas las noches para ayudar a los cálculos históricos:

Por ejemplo, count_meeting_participant_last30 es cuántas reuniones invitaron a esta persona que en los últimos 30 días.

Aquí está la tabla de migración para HistoricalData — casi todas las columnas de esta tabla deben calcularse de diversas capas de datos:

En discusión con mi Asesor, nos dimos cuenta de que posibles inversores querrán saber cómo las personas responden al sitio. He creado una medición de una métrica llamada percent_invited_own_meeting, el nombre corto para el porcentaje de usuarios invitados a la primera reunión que les ha gustado lo suficiente para utilizarlo para programar sus propias reuniones en el futuro. Analizaré más sobre los cálculos un poco más abajo.

Toas las migraciones residen en /console/migrations. Así es como lucen cuando ejecutas las migraciones de base de datos.

Tomando los datos de informes

Cada noche después de la medianoche, una tarea en segundo plano va a calcular las estadísticas de la noche anterior. Este es el método de fondo:

Configuré una tarea de cron para ejecutar actionOvernight a la 1:15 AM todos los días. Nota: Cuando estás enfocado intensamente en programar día y noche en startup, una tarea de cron es todo acerca de actionOvernight.

Para construir la historia del pasado, he creado una función de recalc() una sola vez. Esto limpia las tablas y construye cada  tabla como si sucediera un día a la vez.

Nota: El tiempo after es una solución para excluir a algunos de los primeros usuarios que se registraron antes de poder programar una reunión. Quería que los datos históricos reflejaran una representación más precisa de la actividad reciente (actualmente hay un par de cientos de cuentas más antiguas sin actividad). Lo más probable es que quitare esto proximamente.

Cálculo de la tabla de datos de usuario

Aquí está el código que rellena la tabla UserData todas las noches:

En su mayor parte se trata de contar totales para los usuarios de reuniones, lugares, amigos y en algunos casos dentro de los intervalos de tiempo de los últimos 30 días.

Este es el código que detecta si este usuario eligió programar una reunión usando el servicio después de haber sido invitado:

Cálculo de los datos históricos

Aquí está el código que aprovecha UserData para rellenar HistoricalData:

Está resumiendo totales y calculando porcentajes y promedios.

Así es como se ve el producto acabado:

Meeting Planner Dashboard - Final Historical DataMeeting Planner Dashboard - Final Historical DataMeeting Planner Dashboard - Final Historical Data

A pesar de que estamos viendo el análisis de sólo el uso pre-alfa, los datos son intrigantes, y la utilidad potencial de esto parece excelente. Y, por supuesto, será fácil ampliar la recopilación y el análisis de datos utilizando el código de fundación que compartí hoy.

Por cierto, el porcentaje de usuarios invitados que van a programar sus propias reuniones es de alrededor del 9% (pero es un pequeño conjunto de datos).

Probablemente se esté preguntando si podemos graficar estas columnas. Espero abordar eso en un tutorial de seguimiento, que siempre requiere interacción con las diosas editoriales. Sólo para su informacion, no todo el mundo se aleja de esas conversaciones. También le pediré que me permita escribir sobre características de administración como deshabilitar usuarios, reenviar contraseñas, etc.

Meeting Planner Dashboard - Game of Thrones MelisandreMeeting Planner Dashboard - Game of Thrones MelisandreMeeting Planner Dashboard - Game of Thrones Melisandre

Si no escuchas más de mí, sé que el Señor de la Luz ha encontrado un uso para mí.

¿Que sigue?

Como se mencionó, actualmente estoy trabajando febrilmente para preparar Meeting Planner para la liberación alfa. Estoy principalmente centrado en las mejoras clave y características que harán que la versión alfa vaya sin problemas.

Estoy siguiendo todo en Asana ahora, de lo cual escribiré en un próximo tutorial; Ha sido increíblemente útil. También hay algunas nuevas características interesantes todavía por estrenar. (Como profesor de yoga, creo que Asana es el peor nombre de producto de todos los tiempos. Básicamente han tomado un término común en el yoga pronunciado āsana o ah-sana y cambiaron la pronunciación a a-sauna—y poner eso en sus videos introductorios. No fue fácil consultar el año pasado hablando con los miembros del equipo del cliente sobre lo que ponen en una sauna y hablar con personas de yoga sobre āsana. Pero yo divago.)

También estoy empezando a concentrarme más en el próximo esfuerzo de recolección de inversiones con Meeting Planner. Estoy empezando a experimentar con WeFunder basado en la implementación de las nuevas reglas de crowdfunding de la SEC. Por favor considere seguir nuestro perfil. También escribiré más sobre esto en un futuro tutorial.

Una vez más, mientras espera más episodios, programe su primera reunión y pruebe las plantillas con sus amigos con buzones de correo de Gmail. 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. También puede publicarlos en el sitio de soporte de Meeting Planner.

Vea los próximos tutoriales en la serie Creando su startup con PHP.

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.