Tutorial de Wix Blocks: crear un widget de cuenta regresiva
Lo que obtienes en la plantilla
- Un widget de cuenta regresiva. Debes completar su diseño y codificar sus funciones y propiedades.
- Un widget de registro que debes completar y agregar al widget de cuenta regresiva.
- Algunas utilidades públicas que puedes usar para implementar la funcionalidad del widget.
- Algo de código de backend que puedes usar para implementar las funciones de tu notificación por email.
Paso 1 | Completa el diseño del widget
- Abre la plantilla.
- Haz clic en Countdown (Cuenta regresiva) dentro de Widgets y diseño.
- Haz clic en Agragar elementos en la barra superior.
- Selecciona Texto. Arrastra y suelta un cuadro 48px Title al widget.
- Haz clic en Editar texto y cambia el texto a SS.
- Cambia el color del texto a blanco y céntralo con el Inspector profesional .
- Selecciona el cuadro de texto y muévelo al cuadrado de la cuadrícula sobre la etiqueta SECONDS (SEGUNDOS) usando .
- Cambia el tamaño usando .
Paso 2 | Agrega y define las propiedades de la API del widget
- endDate: define la fecha de finalización cuando la cuenta regresiva llega a cero. Con esta propiedad, los creadores de sitios pueden cambiar la fecha de finalización para que el widget se personalice para su sitio.
- emailId: determina el mensaje de email que se enviará a los usuarios cuando se registren para recibir una notificación.
Asignar una ID a los elementos del widget
- Haz clic en el cuadro de texto.
- Asigna una ID al cuadro de texto en el panel Propiedades y eventos . En este ejemplo, la ID es
secondsTxt
. Ten en cuenta que a los otros elementos ya se les ha asignado las ID.
Definir las propiedades "endDate" y "emailId"
- Haz clic en Propiedades y eventos en el panel de la API.
- Ingresa el nombre de la propiedad,
endDate
. - Selecciona el tipo de propiedad, en este caso, fecha y hora (la fecha se muestra en formato de los EE. UU.: mm/dd/aaaa).
- Selecciona un valor predeterminado (el creador de sitios podrá cambiar esto cuando instale el widget en los Editores).
- Pasa el cursor sobre Properties (Propiedades) y haz clic en el icono que aparece.
- Crea otra propiedad para el email accionable y llámalo
emailId
. Esta es una propiedad de tipo texto sin valor predeterminado.
Paso 3 | Agrega código para que tu widget funcione
Importar utilidades
- Haz clic en el menú Público y backend .
- Selecciona dateUtils.js en Public (Público). Esto abre el archivo en el panel de código.
Cambiar el código para tener en cuenta la nueva función
Crea una función, updateTime()
, para que el widget de cuenta regresiva actualice el recuento. La nueva función debería verse así:
1$widget.onPropsChanged(function () {
2});
3 function updateTime() {
4 const {days, hours, minutes, seconds} = getRemainingTime (new Date($widget.props.endDate));
5 $w('#daysTxt').text = days.toString();
6 $w('#hoursTxt').text = hours.toString();
7 $w('#minutesTxt').text = minutes.toString();
8 $w('#secondsTxt').text = seconds.toString();
9 }
También debes establecer un intervalo para la frecuencia con la que el widget actualiza el tiempo restante.
Para ello, agrega el siguiente código en tu función onReady()
. Esto actualiza el widget cada segundo.
1$w.onReady(function () {
2 updateTime();
3 if (wixWindow.viewMode !== "Editor") {
4 setInterval(updateTime, 1000);
5 }
6});
Previsualizar el widget y probar sus propiedades de API
- Haz clic en Preview (Previsualizar). El widget debe contar regresivamente cada segundo hasta la fecha de finalización.
- Haz clic en Probar porpiedades de API. Aparece un panel con el valor predeterminado que estableciste anteriormente.
- Cambia la fecha para verificar si el widget responde y comienza la cuenta regresiva hasta la nueva fecha.
Paso 4 | Crea y codifica un panel personalizado
Crear un panel personalizado
- Haz clic en la pestaña Paneles en la barra superior.
- Haz clic en Agregar panel.
- Asigna un nombre a tu panel. En este ejemplo, "Mis ajustes".
- Haz clic en Agregar panel.
- Haz clic en + Agregar elemento.
- Selecciona Texto. Esto será para la fecha de finalización.
- Haz clic en Propiedades y eventos. Dale a tu entrada de texto una ID,
endDateInput
. - Selecciona el elemento de texto y haz clic en Ajustes.
- Agrega el nombre "fecha de finalización" en el campo Field Title (Título del campo).
- Elimina el texto en el campo Default Text (Texto predeterminado).
- Establece el texto del marcador de posición en "End Date" (Fecha de finalización).
- Agrega un separador de sección.
- Haz clic en Ajustes. Agrega un título en el campo Section Title (Título de la sección). En este ejemplo, "email accionable".
- Agrega otra entrada de texto. Dale a tu entrada de texto una ID,
emailIdInput
. - Selecciona el elemento de texto y haz clic en Ajustes.
- Agrega el nombre "ID de email" en el campo Field Title (Título del campo).
- Elimina el texto en el campo Default Text (Texto predeterminado).
- Establece el texto del marcador de posición en "Email ID" ("ID de email").
Agregar código a tu panel personalizado
Para permitir que los elementos del panel interactúen con el widget y realicen acciones en el Editor, puedes usar el módulo wix-widget
de Velo en tu código.
Para usar la API de widgets, importa wixWidget
desde el módulo wix-widget
.
Inserta el siguiente código antes de la función onReady()
.
1import wixWidget from 'wix-widget';
Quieres que el widget se actualice cuando cambien los valores, por lo que debes registrar un evento onChange
. También debes agregar async
en la función onReady ()
, ya que usarás algunas funciones asíncronas.
La función onReady()
debería verse así:
1$w.onReady(async function () {
2 const { endDate, emailId } = await wixWidget.getProps();
3 $w('#endDateInput').value = endDate;
4 $w('#emailIdInput').value = emailId;
5
6 $w('#endDateInput').onChange(e => {
7 wixWidget.setProps({ endDate: e.target.value });
8 });
9
10 $w('#emailIdInput').onChange(e => {
11 wixWidget.setProps({ emailId: e.target.value });
12 });
13});
Paso 5 | Configura el widget
Agregar tu panel personalizado a la barra de acciones flotante de tu widget
- Haz clic en Configuración en la barra superior.
- Selecciona el widget de cuenta regresiva. Aparece una barra de acciones flotante.
- Haz clic en Ajustes.
- Haz clic en Botón de acción. Aparece el panel Ajustes de la acción principal.
- Selecciona My settings (Mis ajustes) en la lista desplegable para elegir tu panel personalizado.
Paso 6 | Agrega un segundo widget (interno) e implementa la lógica de registro
Agregar tu widget de registro al widget de cuenta regresiva
- En la pestaña Diseño, selecciona el widget de countdown (cuenta regresiva).
- Haz clic en Más opciones y selecciona Agregar widget.
- Selecciona Registration (Registro). El widget interno aparece en el medio del widget de cuenta regresiva.
- Arrastra y estira el widget interno para que se ajuste a la sección inferior del widget de cuenta regresiva.
- Cambia su ID a
registration
en Propiedades y eventos .
Implementar la lógica de registro en el código del widget principal
Implementarás el código para el registro de usuarios en el widget principal (de cuenta regresiva), usando la utilidad preinstalada contactUtils.js
. Utiliza la API de wix-crm
para conectar tu contacto a tu colección.
Este código dirige la información a tu colección. Usa la utilidad que usarás más adelante cuando crees una colección. Puedes ver getSubscriptionsCollectionName()
en el código.
- Crea una nueva función asíncrona.
- Llámala
onSubmit
. Usa la utilidad de creación de contactos.
Tu código debería verse así:
1 async function onSubmit({ email }) {
2 const contact = await createContact(email);
3 wixData.insert(getSubscriptionsCollectionName(), {
4 endDate: new Date($widget.props.endDate),
5 emailId: $widget.props.emailId,
6 contactId: contact.contactId
7 });
8 }
9
Registrarse para el evento onSubmit
En onReady()
, después de tu función updateTime()
, agrega el siguiente código:
1$w('#registration').onSubmit(onSubmit);
Paso 7 | Crea tu app y asígnale un espacio de nombres
Tu primera versión
- Haz clic en Build (Crear).
- Ingresa un espacio de nombres para tu app y haz clic en Next (Siguiente).
- Selecciona Major Version (Versión principal) y haz clic en Build (Crear).
- Recibirás un mensaje para indicar que se ha creado la versión 1.0. Haz clic en Got it (Entendido) para seguir trabajando en tu app.
Paso 8 | Agrega una colección a tu widget
La plantilla tiene una utilidad preinstalada llamada getSubscriptionsCollectionName()
, en collectionUtils.js dentro de Public & Backend (Público y de backend). Construye el nombre completo de la colección para que no tengas que agregar el espacio de nombres completo de tu app cada vez que hagas referencia a ella en el código.
Configurar la utilidad de colección
- Haz clic en collectionUtils.js dentro de Público y backend.
- Agrega el espacio de nombres de tu app.
1
2const NAMESPACE = '@mywixaccount/my-app-namespace';
3
4export function getSubscriptionsCollectionName() {
5 return `${NAMESPACE}/subscriptions`;
6}
Crear tu colección
- Haz clic en Databases (Bases de datos).
- Haz clic en + Create collection (Crear colección).
- Asigna a tu colección un nombre significativo. En este ejemplo, Suscripciones.
- Haz clic en Crear.
Agregar campos a la colección
- Haz clic en para agregar un campo a la colección.
- Selecciona Date (Fecha) en el menú desplegable Field Type (Tipo de campo).
- Ingresa endDate en el campo Field Name (Nombre del campo). Esta será la última fecha hasta la cual las personas podrán registrarse.
- Haz clic en Save (Guardar).
- Ahora agrega un campo de tipo texto y llámalo emailId para el email accionable.
- Agrega otro campo de tipo texto y llámalo contactId. Esto permitirá almacenar los datos de contacto de los usuarios registrados.
- Ahora crea un campo de tipo booleano y llámalo notificado. Esto garantiza que los suscriptores sean notificados solo una vez.
Configurar los permisos para tu colección
- Haz clic en Más opciones para tu colección desde el menú Databases (Bases de datos).
- Selecciona Permissions & Privacy (Permisos y privacidad).
- Selecciona el menú desplegable Can add content (Se puede agregar contenido).
- Selecciona Anyone (Cualquiera).
- Haz clic en Save (Guardar).
Paso 9 | Instala tu app en un sitio desde el Editor de Wix
- Después de crear tu app, abre tu sitio web.
- Haz clic en Agregar apps .
- Haz clic en Apps personalizadas. Aparece una lista de todas tus apps.
- Selecciona tu app en la lista de Apps disponibles.
- Haz clic en Instalar app.
- Haz clic en Agregar elementos. .
- Selecciona Mis widgets.
- Haz doble clic en el widget para agregarlo a tu sitio.
Configurar una ID de email
- Abre Mi panel de control desde el menú Sitio en la barra superior.
- Ve a Triggered Emails (Emails accionables) en Developer Tools (Herramientas para desarrolladores).
- Haz clic en Get Started (Comenzar).
- Ingresa un asunto.
- Diseña el email con las herramientas del Editor.
- Haz clic en Save & Publish (Guardar y publicar).
- Agrega los detalles del remitente, el nombre del remitente y el email de respuesta, y haz clic en Save (Guardar).
- Haz clic en Got it (Entendido).
- Haz clic en Save & Publish (Guardar y publicar) nuevamente. Obtendrás un código de identificación generado que enlaza al email que has diseñado para que se envíe a cualquiera que se registre.
- Ingresa este código en tu panel personalizado en el campo Email ID (ID de email).
Usar el código del backend en el Editor de Wix para enviar notificaciones a los suscriptores
Invocar la función de notificación
- Haz clic en + New web module (Nuevo módulo web) dentro de Backend en Public & Backend (Público y de backend) en el Editor de Wix.
- Llámalo
backend.jsw
. - Importa la función de backend en la sección de código de tu sitio en backend.jsw.
Tu código debería verse así:
1import { notify } 'myWixId/my-application-name-backend';
Ahora crea una función de exportación invokeNotify
en backend.jsw en la sección de código de tu sitio.
Tu código debería verse así:
1export function invokeNotify() {
2 return notify ();
3}
- Haz clic en Add (Agregar) en el backend.
- Haz clic en Add scheduled jobs (Agregar tareas programadas). Agrega el siguiente código debajo de jobs.config en la sección de código de tu sitio. En este ejemplo, la función de notificación se invoca 10 minutos después de la hora, cada hora.
1{
2 "jobs": [{
3 "functionLocation": "/backend.jsw",
4 "functionName": "invokeNotify",
5 "description": "",
6 "executionConfig": {
7 "cronExpression": "10 * * * *"
8 }
9 }]
10}
Paso 10 | Prueba tu app
- Publica tu sitio.
- Regístrate para recibir una notificación por email.
- Vuelve al Editor y revisa tu colección.
- Puedes ver que hay un nuevo suscriptor. Cuando se envíe el email de notificación, también verás una marca de verificación en el campo notified (notificado).