Muchas personas desean deshabilitar la ventana emergente que se muestra al agregar un producto al carrito con Ajax y, en su lugar, redireccionar a la página Resumen del Carrito. He visto muchas publicaciones que indican desactivar la ventana emergente Agregar al Carrito en el módulo Bloque de Carritos, pero esto solo funciona para la versión Prestashop 1.6.
En Prestashop 1.7, ya no existe la función “Redirigir después de agregar producto al carrito”, y en este caso, es posible que desee deshabilitar la característica de Carrito Ajax que pertenece al módulo de Carrito de Compras. Desafortunadamente, si deshabilita esta función, la ventana emergente no se mostrará, pero tampoco redireccionará a su cliente a la página Resumen del Carrito.
En este tutorial, le mostraré cómo deshabilitar la ventana emergente Agregar al Carrito de Prestashop, y redirigir al Resumen del Carrito en Prestashop 1.7.
¿Cómo redirigir al cliente a la página Resumen del Carrito después de hacer clic en “Agregar al Carrito”?
En 1.6, la opción estaba en Preferences -> Product(Preferencias -> Producto) -(Redirigir después de agregar producto al carrito). Esta característica se eliminó desde Prestashop 1.7. No sé por qué, pero estoy seguro de que mucha gente la extraña mucho :)
Primera opción
De esta forma, intentaremos editar el archivo /your- website/modules/ ps_shoppingcart/ps_shoppingcart.js. En algún lugar cerca de la línea 49 puedes encontrar un código como este:
if (resp.modal) {
showModal(resp.modal);
}
showModal(resp.modal) es el código de fuente que llama al menú emergente modal. Cámbielo para deshabilitar la ventana emergente y redireccionar a los clientes a la página de Resumen del Carrito:
if (resp.modal) {
window.location.replace(prestashop.urls.pages.cart);
}
Borre la caché del sitio web y la memoria caché del navegador para ver el resultado.
¡Funciona!
Pero... ¡espere! Este truco funciona si los visitantes no están conectados. Sin embargo, si agregan los productos mientras están conectados, son redirigidos a la página de inicio en lugar de al Resumen del Carrito.
Aquí está
Desarrollamos un módulo Prestashop llamado ChargeMe (Suscripciones de Paypal y Pago Recurrente) que le permite vender productos de suscripción (revistas, membresía, libros... etc.) a través de Paypal.
Al momento de pagar, solo queremos 1 producto de suscripción en la cesta, por lo que necesitamos la redirección automáticamente cuando se agreguen con el botón Suscribir. Luego agregamos una función a nuestro archivo js:
prestashop.on('updateCart',function (event) {
...
$.post(ajax_url, requestData, null, 'json').then(function (resp) {
location.href = cart_url;
}).fail(function (resp) {
prestashop.emit('handleError', {eventType: 'updateShoppingCart', resp: resp});
});
});
Como puede ver, en lugar de redirigir a prestashop.urls.pages.cart, queremos redireccionar a cart_url. Este valor es un valor predefinido. No importa que estén registrados en su sitio web o no, el módulo los Redirigirá al Resumen del carrito de inmediato.
¿Qué tiene que hacer ahora? Tenemos que agregar nuestro valor a su sitio web. Abra el archivo /your- website/modules/ ps_shoppingcart/ps_shoppingcart.php para agregar algo. Verá:
public function hookHeader()
{
if (Configuration::isCatalogMode()) {
return;
}
if (Configuration::get('PS_BLOCK_CART_AJAX')) {
$this->context->controller->registerJavascript('modules-shoppingcart', 'modules/'.$this->name.'/ps_shoppingcart.js', ['position' => 'bottom', 'priority' => 150]);
}
}
Cámbielo a
public function hookHeader()
{
if (Configuration::isCatalogMode()) {
return;
}
if (Configuration::get('PS_BLOCK_CART_AJAX')) {
$this->context->controller->registerJavascript('modules-shoppingcart', 'modules/'.$this->name.'/ps_shoppingcart.js', ['position' => 'bottom', 'priority' => 150]);
}
$this->smarty->assign(array(
'cart_url' => $this->getCartSummaryURL(),
));
return $this->fetch('module:ps_shoppingcart/header.tpl');
}
Llamamos a un archivo nuevo, y ahora tenemos que crearlo como /your- website/modules/ ps_shoppingcart/header.tpl. Ponga este contenido en este archivo:
<script type="text/javascript">
{if isset($cart_url)}
var cart_url = '{$cart_url}';
{/if}
</script>
¿Qué es diferente? Como verá, prestashop.urls.pages.cart no es un valor predefinido. Si el inicio de sesión del cliente, prestashop.urls.pages.cart significa la página de inicio, o no, esto también significa la página de Carrito. Necesitamos usar nuestro valor.
Ahora podemos editar el archivo /your-website/modules/ps_shoppingcart/ps_shoppingcart.js utilizando nuestro valor:
if (resp.modal) {
location.href = cart_url;
}
Sería mejor si tenemos una opción para desactivar o habilitar una característica. De todos modos, espero que este truco le dé algunos valores.
Bueno, gracias a todos. Esperamos sus comentarios a continuación. Nos veremos de nuevo la próxima semana para otros curso Prestashop. Cuídense.