Personyze Wiki Personyze Wiki docs
Español
Open Personyze
Documentación/ Widgets y complementos/ Botón de añadido rápido al carrito para el widget de recomendaciones
Widgets y complementos

Botón de añadido rápido al carrito para el widget de recomendaciones

El código de añadido rápido al carrito al que llaman sus widgets de recomendaciones: la función add_to_cart, lo que recibe y lo que debe devolver, con dos ejemplos que funcionan.

5 min read Actualizado hace 22 horas

Un widget de recomendaciones puede poner un producto en el carrito del visitante sin salir de la página: el botón Añadir al carrito de la tarjeta ejecuta un breve fragmento de JavaScript que usted guarda una vez para su cuenta, y todos los widgets lo usan. Personyze no puede saber cómo funciona el carrito de su tienda, así que el código es suyo — normalmente unas pocas líneas en torno a la propia solicitud de “añadir” de su carrito.

Dónde está el código

Vaya a Configuración → Configuración de recomendaciones → Seguimiento de productos, abra Producto añadido al carrito y, en Qué hace el widget, despliegue Añadido rápido al carrito. El panel lo marca como Callback del widget de Personyze (no es un tracker): no detecta los añadidos al carrito en su sitio — eso lo hacen las fuentes de encima —, sino que se ejecuta cuando un visitante hace clic en Añadir al carrito dentro de un widget de Personyze.

El panel Producto añadido al carrito en Seguimiento de productos, con el recuadro Añadido rápido al carrito en Qué hace el widget
Configuración → Configuración de recomendaciones → Seguimiento de productos → Producto añadido al carrito. Las fuentes de arriba detectan los añadidos al carrito en su sitio; Añadido rápido al carrito, en Qué hace el widget, es el código que ejecuta el widget. Haga clic para ampliar.

El recuadro se abre con una plantilla de código. Edítela y pulse Guardar. Hasta que se guarde aquí un código que funcione, el botón falla y el widget muestra su mensaje de error.

Lo que debe hacer el código

Parte Qué es
La función El código debe declarar una función llamada add_to_cart. Guardar rechaza cualquier otra cosa con This script must declare function named "add_to_cart()", y un script con errores, con There are errors in script. Algunas opciones de widget y guías antiguas todavía mencionan add_to_cart_for_personyze(); la función a la que se llama es add_to_cart.
products Un array con un objeto por producto: internal_id (el Internal ID del producto en su catálogo, como cadena) y quantity (1 o más). Un widget de pack pasa todos los productos seleccionados en una sola llamada. Las columnas del catálogo que añada en Campos disponibles → Añadir campo viajan en cada objeto con su propio nombre — añada sku y cada producto llega con p.sku.
arg Indefinido salvo que el widget lo defina. Cada widget tiene su propio campo para ello — Quick Add to Cart — Cart Integration Argument o Extra add_to_cart Argument, según la plantilla — para todo lo que varía de un widget a otro, como una variante o una cantidad.
Valor devuelto Una Promise. Una async function la devuelve por usted; cualquier otra cosa falla con add_to_cart() must return Promise object.
Éxito La Promise se resuelve. Personyze registra entonces Producto añadido al carrito para cada producto, atribuido al widget — no tiene que notificarlo usted.
Fallo La Promise se rechaza o la función lanza una excepción. El widget muestra su error en lugar de su confirmación.

El código se ejecuta en el navegador del visitante, en su sitio, así que una URL relativa como /cart/add llega a su tienda con la propia sesión del visitante. Haga referencia a los objetos globales de su sitio mediante window (por ejemplo window.myCart); el JavaScript moderno sirve, se transpila para los navegadores antiguos.

Un ejemplo mínimo

Una solicitud por producto, una tras otra. Sustituya la URL y el cuerpo por la solicitud real de añadir al carrito de su tienda:

async function add_to_cart(products, arg)
{	// One request per product. If your cart takes several products at once, send one request instead.
	for (const {internal_id, quantity} of products)
	{	// Replace with your store's real "add to cart" request.
		const response = await fetch('/cart/add',
		{	method: 'POST',
			credentials: 'include',
			headers: {'Content-Type': 'application/x-www-form-urlencoded'},
			body: 'product=' + encodeURIComponent(internal_id) + '&qty=' + quantity
		});
		if (!response.ok)
		{	throw new Error(response.statusText);
		}
	}
}

Lo mismo, con todas las solicitudes enviadas a la vez:

function add_to_cart(products, arg)
{	return Promise.all(products.map(p =>
		fetch('/cart/add',
		{	method: 'POST',
			credentials: 'include',
			headers: {'Content-Type': 'application/x-www-form-urlencoded'},
			body: 'product=' + encodeURIComponent(p.internal_id) + '&qty=' + p.quantity
		}).then(response =>
		{	if (!response.ok)
			{	throw new Error(response.statusText);
			}
		})
	));
}

Si su código notifica eventos de carrito a Personyze mientras se ejecuta (un personyze.push con un evento de producto, por ejemplo para reflejar el carrito que devuelve su API), Personyze no añade encima su propio Producto añadido al carrito.

Mensajes

Debajo del código, Mostrar mensaje cuando se añada correctamente y Mostrar mensaje cuando falle al añadir añaden cada uno un mensaje para toda la cuenta — Nombre del icono, Texto, Estilo (CSS) y Ocultar después de (segundos), con una vista previa en vivo. Aparece después de cada añadido rápido desde cualquier widget, además de la confirmación que muestra el propio widget.

Quitado rápido del carrito y Añadido rápido a la lista de deseos

  • Quitado rápido del carrito — más abajo en el mismo recuadro: código que se ejecuta cuando un visitante hace clic en “Remove from cart” dentro de un widget de Personyze. Debe declarar remove_from_cart(products, arg); cada producto lleva su internal_id.
  • Añadido rápido a la lista de deseos — en el panel Producto añadido a favoritos, en Qué hace el widget: código que se ejecuta cuando un visitante hace clic en “Add to wishlist” dentro de un widget de Personyze. Debe declarar add_to_wishlist(products, arg).

Ambos siguen las mismas reglas: los mismos argumentos y una Promise que se resuelve si todo va bien. Un widget solo los llama si su diseño tiene ese botón — los corazones de lista de deseos de las plantillas de producto de la galería registran el guardado en Personyze sin ellos.

Relacionado

Did this page answer your question?
Thank you — that goes to whoever maintains this page.