Categorías
E-commerce

Cómo eliminar un paso en PrestaShop

Buenas a todo el mundo y más concretamente a los prestashoperos, ya que hoy voy a contar una optimización para el carrito de compra con la consecuencia del incremento en el carrito que nunca viene mal… cómo vemos en la siguiente captura de un PrestaShop 🙂

conversion web

Esta optimización no es más que saltarse un paso en el carrito de compra, o mejor dicho eliminar un paso en el carro de compra. Para los e-commerce en Prestashop que sólo tiene 1 transportista en la tienda, la estructuración de Prestashop tiende a marear/confundir en cuanto al transporte ya que en el resumen del carrito aparece el precio del transporte y luego en el 4º paso, por defecto en Prestashop, vuelve aparecer el gasto de envío por lo que algunos usuarios creen que están pagando 2 veces el envío. Así que hoy os enseñaré como eliminar el cuarto paso del proceso de compra de Prestashop y evitar futuras confusiones o lo que es aún peor, posibles abandonos de carritos ya que el cliente puede pensar perfectamente: «Estos me están tomando el pelo y me quieren cobrar el doble, me voy a otra tienda…»

Cómo eliminar un paso en PrestaShop

Para eliminar el paso de transportista necesitaremos 3 ficheros, uno lo podemos encontrar en /controller/front/ con el nombre de OrderController.php y el segundo y tercero estarán dentro de nuestra plantilla instalada en nuestro Prestashop, es decir en la ruta /themes/miplantilla y son los ficheros order-payment.tpl y order-steps.tpl:.

Nota: Antes de cambiar nada en estos ficheros, nos copiamos los originales en una carpeta por si las moscas 😉

Paso 1.- Cambios en el fichero OrderController.php

Abrimos el fichero OrderController.php con cualquier editor de texto, y nos vamos alrededor de la línea 145 y buscamos el siguiente código:

case 2:
if (Tools::isSubmit(‘processAddress’))
$this->processAddress();
$this->autoStep();
$this->_assignCarrier();
break;

El código anterior tiene la funcionalidad de que si estamos en el segundo paso y la dirección del clientes es correcta, saltamos al paso de elección de envío. Pero como nosotros nos queremos saltar el método de envío, cambiamos el código anterior por este:

case 2:
if (Tools::isSubmit(‘processAddress’))
$this->processAddress();
$this->autoStep();
$this->_assignCarrier();
$this->_assignPayment();
$this->_assignSummaryInformations();
$this->setTemplate(_PS_THEME_DIR_.’order-payment.tpl’);
break;

Cuidado al copiar y pegar el código ya que las comillas no se copian las correctas. Hay que utilizar las comillas simple del inglés.

Con el código anterior, en vez de ir al paso de selección de envío, estamos diciendo que vamos al paso de selección de pago.

Paso 2.- Cambios en el fichero order-payment.tpl

Ahora funciona hacia adelante, es decir que funciona correctamente del paso «Dirección» al «Selección de pago», pero a la inversa no funciona. Para ello tenemos que buscar la siguiente línea en el fichero order-payment.tpl:

<p class=»cart_navigation clearfix»><a href=»{$link->getPageLink(‘order’, true, NULL, «step=2″)}» title=»{l s=’Previous’}» class=»button»>&laquo; {l s=’Previous’}</a></p>

Y sustituir el step=2 por el step=1, así cuando estemos en el paso de pago si queremos volver atrás, volveremos al paso de «Direcciones»:

<p class=»cart_navigation clearfix»><a href=»{$link->getPageLink(‘order’, true, NULL, «step=1″)}» title=»{l s=’Previous’}» class=»button»>&laquo; {l s=’Previous’}</a></p>

Paso 3.- Eliminar el resto

¿Ya está todo? Casi casi amigo, no te desesperes. Ahora solo nos queda eliminar el paso de envío del carrito de compra para evitar confusiones, para ello abrimos el fichero order-steps.tpl:

eliminar paso prestashop

Eliminamos el código marcado dentro del cuadro rojo de la siguiente imagen:

eliminar paso

Y cambios la numeración:

<li id=»step_end» class=»{if $current_step==’payment’}step_current{else}step_todo{/if}»>
<span><span>04</span> {l s=’Payment’}</span>
</li>

Ahora ya esta todo ;), pero vamos a dejarlo rematado con el CSS para que ocupe el 100% del ancho y no se quede un hueco en blanco donde esta el mono:

paso-4

Para ello, nos vamos al fichero en el cual estan los estilos del tema, normalmente es en el fichero global.css y sustituimos el 20% de ancho de cada paso por el 25% tal y como vemos en la siguiente imagen:

cambios css

Tip Prestashopero

Antes de que te vuelvas loco buscando el por qué no se reflejan los cambios, recuerda forzar la compilación para ver los cambios 😉

Para forzar la compilación, vamos a «Parámetros avanzados» -> «Rendimiento» y pulsamos el check de forzar compilación, guardamos, hacemos la prueba que funciona todo correctamente y volvemos a dejar la pestaña de «Nunca recompilar los archivos de las plantillas» en la página de «Rendimiento» de nuestro back-office de Prestashop.

forzar compilacion prestashop

¿Qué te ha parecido este tip para disminuir la tasa de abandono de los carritos de la compra? Parece que no, pero este simple «apaño» se nota en la tienda porque la gente a veces busca 7 pies a un gato y con este «apaño» sólo le puede ver 4 pies 🙂

Si quieres aumentar tus ventas en tu PrestaShop, no te pierdas este artículo con diferentes trucos 100% probados y funcionando de cómo vender más en PrestaShop.

¡Haz clic para puntuar esta entrada!
(Votos: 1 Promedio: 5)

43 respuestas a «Cómo eliminar un paso en PrestaShop»

Amigo, soy un ignorante en la programación y ando chuzando esta tienda. Me podrías ayudar a encontrar los ficheros? No se donde están para poder hacer toda la operación que describes en el post. Gracias por la ayuda y perdón por la ignorancia en el tema.

Hola Js,

Los ficheros se encuentra en la carpeta de tu plantilla es decir en /themes/nombredetuplantilla

Cualquier cosa, no dudes en preguntar 🙂

Un saludo 😉

Hola!
he seguido los pasos y funciona, pero no logro encontrar el ultimo paso, la modificación del global.CSS, no encuentro loa ue pones en la imagen por ningún lado!

Buenas tardes Carlos,

Depende de la plantilla, descargarte la carpeta del theme que tienes instalado y busca el css asociado a los pasos de compra. Dime que web es y te ayudo.

Saludos

Hola!
gracias por contestar tan rápido! la web la tengo en el horno, por lo que no esta operativa aun, a falta de unos retoques. como podemos hacer? me das un mail y me pongo en contacto contigo?
Saludos

Cuando la tengas avísamos y lo vemos, o si quieres escribirme tienes el formulario de contacto también 😉

Saludos

Buenas, es interesante el tema de quitar transportista si solo tenemos una opción. Del mismo modo que quitamos el paso del transportista podríamos quitar el de opción de pago y que envie el pedido directamente? Estoy creando mi web de venta al pormayor y me interesa que el cliente nos pase el pedido y le enviemos después una proforma para que haga el pago por banco una vez este preparado.

Saludos y gracias por tus aportaciones a webmasters novatos como nosotros

Buenos días Eloi,

No debería existir ningún problema, adaptando las formas de pago igual que quitando el transportista siempre que solo exista una opción a elegir.

Un saludo 🙂

Hola! en referencia a este tema, ¿que tendríamos que hacer si queremos suprimir el paso 2? Es decir, suprimir que el cliente se tenga que registrar y loguear.
Se que existe la posibilidad de «compra express» sin necesidad de registrarse, pero Prestashop lo muestra al final de la hoja, debajo de la opción de registrarse o loguearse en ese paso.
Muchas gracias por tu tiempo y por compartir 🙂

Hola,

Para ello puedes modificar por CSS y que aparezca arriba la «compra express». También puedes ver el modulo de «One Page Checkout» el cual te muestra en un solo paso todos los apartados de compra.

Un saludo

Hola! Te hago una consulta, yo no quiero incluir el envío en el proceso de compra, ya que en realidad en mi caso los detalles de envío se coordinarían en cada caso con el cliente, cómo puedo hacer que se salte el paso de dirección también o reemplazar el contenido de ‘dirección’ por una leyenda que diga «el envío se coordinará luego» o algo así?
Espero tu respuesta!
Muchas gracias!!

Hola Carolina,

Para no incluir el paso de dirección, habría que eliminar primero que los campos no sean obligatorios y luego realizar el mismo paso que esta explicado en el tutorial pero saltandose el paso que quieres de rellenar la dirección de entrega y facturación.

Un saludo 😉

Puedes explicarme como quitar el paso de que le pida la dirección al usuario cuando compre? Ya que en mi caso se trata de productos virtuales que no se envían de manera física y quiero que pase directamente a pagar ^^ ¿Cuales son los archivos que hay que modificar exactamente?

Buenos días Arturo,

Para eliminar el paso de dirección hay que hacer más tareas ya que por defecto Prestashop necesita los datos de envios ya que son obligatorios para realizar la compra. Habría que eliminar que los datos de dirección de la compra no fueran obligatorios y luego eliminar el paso de rellenar la dirección.

Un saludo

Buenos dias, he realizado todos los pasos tal y como has descrito pero a la hora de pasar de la pestaña ‘Dirección’ a la de ‘Pago’ la web salta y queda todo en blanco.

Buenas tardes José Luis,

Fíjate si has copiado el código y pegado en tus ficheros con el tema de las comillas, no se copien las comillas de apostrofe. No són las más comillas estas ´que ‘. No se si me explico.

Para indagar y obtener más información del error, hay que activar el modo debug para ello debemos acceder al archivo dir/config/defines.inc.php, siendo dir el directorio raíz de nuestra instalación de Prestashop, y cambiar el valor de _PS_MODE_DEV_ a TRUE:

define(‘_PS_MODE_DEV_’, true);

Cualquier cosa, lo comentamos.

Un saludo y buen fin de semana 🙂

Disulpen, sobre que versión se basa el ejemplo?, hace un par de días descargue la versión 1.6.1.4 y al modificar el código encontré que el fichero order-payment.tpl es diferente y no pude continuar con los pasos, se ve algo así:

{if !$opc}
{addJsDefL name=txtProduct}{l s=’product’ js=1}{/addJsDefL}
{addJsDefL name=txtProducts}{l s=’products’ js=1}{/addJsDefL}
{capture name=path}{l s=’Your payment method’}{/capture}
{l s=’Please choose your payment method’}
{if !isset($empty) && !$PS_CATALOG_MODE}
{l s=’Your shopping cart contains:’}
{$productNumber} {if $productNumber == 1}{l s=’product’}{else}{l s=’products’}{/if}

{/if}

{else}
3 {l s=’Please choose your payment method’}
{/if}

{if !$opc}
{assign var=’current_step’ value=’payment’}
{include file=»$tpl_dir./order-steps.tpl»}
{include file=»$tpl_dir./errors.tpl»}
{else}

{/if}

{if $advanced_payment_api}
{include file=»$tpl_dir./order-payment-advanced.tpl»}
{else}
{include file = «$tpl_dir./order-payment-classic.tpl»}
{/if}

Hola, en la versión 1.6 lo que buscas se encuentra en el archivo «order-payment-classic.tpl»

Un saludo.

Hola david, sos un genio, Necesito por favor que me ayudes a eliminar el proceso de pago, que los clientes hagan todos los pasos menos el que elijan el metodo de pago, osea una vez que elijen transporte que les de para confirmar y nada mas. Por favor ayudaria muchisimo a un proyecto que me permitira avanzar en mi carrera. Te dejo mis saludos cordiales y mil gracias por todo

Hola Nicolas,

Me lo anoto como próxima tarea para un futuro post.

Un saludo 😉

Buenas Tardes David.

Tal como lo comento el amigo Samuel, habría la posibilidad de actualizar los pasos ya que en la versión actualizada de Prestashop 1.6.1.4 no corresponde a lo explicado por ti en el post..

Agradecería tu ayuda o a cualquiera que pueda colaborar con la inquietud…

Hola,

En primer lugar muchas gracias por el tutorial.

Después de seguir los pasos y haberlos implementado sin problemas, me encuentro que cuando no se esta logueado en los pasos de carrito y procedes a loguearte dentro del paso 2, redirecciona al home en vez de seguir adelante con el proceso de compra o redireccionarte al resumen nuevamente.

Alguna idea?

Muchas gracias.

Hola Dani,

Fijate con todos los puntos paso a paso. Una pregunta al margen, ¿qué versión de Prestashop utilizas?

Un saludo

Hola,

Gracias por la respuesta, aun sigo igual… la versión que uso es la 1.6.0.14

Algún fichero que le tenga que prestar especial atención?

Hola David!
Tengo una consulta, te agradezco si me puedes ayudar.
Estoy trabajando sobre un proyecto que al parecer le intentaron «mover» algo en el checkout y ahora solo muestra el proceso en un paso.
La pregunta es: Como puedo restablecerlo a como viene por defecto?
1. No tiene ningún módulo de checkout en un solo paso, ni similar.
2. He tratado copiando los archivos OrderController.php, order-payment.tpl y order-steps.tpl, del prestashop original.

Hola Daniel,

En Preferencias -> Pedidos, cambia el «Tipo de procesos de pedido» a Estandar (5 pasos)

Un saludo 😉

Buenos días David,

Antes de nada quiero darte las gracias por escribir este artículo, me ha sido de mucha ayuda.

Mi pregunta está relacionada con otras 2 que te han hecho anteriormente sobre cómo eliminar el paso de dirección.

En ambas respuestas has indicado que primero sería necesario eliminar que los datos de dirección de la compra no fueran obligatorios pero he desmarcado todos los campos desde la opción «Establecer campos obligatorios» del panel de administración «Clientes > Direcciones» y me los sigue pidiendo.

¿Deberían eliminarse desde ahí o hay que hacerlo en código?

Mi versión de Prestashop es la 1.6

Muchas gracias por adelantado.

Tras indagar un poco he conseguido saltarme el paso de dirección. Lo que he hecho es modificar el fichero OrderController.php para que en el case OrderController::STEP_ADDRESSES: se haga lo mismo que se hace en el de transporte sin hace la asignación de dirección $this->_assignAddress(); que era la que lanzaba la pantalla con el formulario de los campos obligatorios.

El problema ahora es que cuando voy a finalizar la compra (en mi caso con pago por transferencia bancaria) al no tener el cliente una dirección asociada no puede terminar el proceso de compra, imagino que al no tener tampoco una dirección de facturación asociada para crear el pedido, mandar el email, etc.

¿Cómo se podría solucionar esto? Lo único que se me ocurre es buscar en código todos aquellos sitios donde se obtienen los datos de la dirección y eliminarlos pero lo mismo hay una solución más sencilla.

Muchas gracias de nuevo por adelantado.

Un saludo!

Una posible solución sería añadir a la base de datos una dirección ficticia para todos los usuarios así quedaría rellena esta información y ya dejaría poder realizar la selección de forma de pago 😉

Hola David,
soy otro de tantos que necesita quitar el paso de dirección ya que ofrezco servicios, no productos.
Si es posible apuntate para hacer un post tan claro y sencillo como este.

Un saludo y Gracias.

Hola,

¿Cuál es el fichero del paso 1 (resumen) de la compra? No soy capaz de encontrarlo en la plantilla, o no tiene un nombre significativo.

Gracias

Buenas tardes Melo,

El fichero del primer paso esta dentro del directorio /controller/front/ y tiene el nombre OrderController.php.

Es decir, /controller/front/OrderController.php

Un saludo

Hola David,

Te escribí hace un tiempo una duda en este mismo post y me contestaste lo siguiente:

«Una posible solución sería añadir a la base de datos una dirección ficticia para todos los usuarios así quedaría rellena esta información y ya dejaría poder realizar la selección de forma de pago ?»

He estado buscando la forma de hacerlo y no he conseguido encontrar cómo. ¿Podrías detallarme un poco más cómo hacerlo y qué ficheros habría que modificar?

Lo que necesito hacer exactamente es añadir una dirección ficticia al usuario en el momento de hacer el registro desde el proceso de compra.

Muchas gracias de nuevo.

Hola David,

Quiero eliminar el paso de transporte para la versión 1.6.1.7.

¿Que pasos debo seguir?

Gracias!!

Hola, necesito que el carrito solo se pueda acceder si el usuario está registrado, me dejan muchas veces los carros abandonados con el nombre de anonimo

Quiero que os precios se vean aunque no esten los usuarios identificados.

Vemos que para poder comprar primero se han de logear

Gracias.

Buenas tardes Sergio,

Esta opción que comentas es por defecto en Prestashop como dices.

¿has tocado algo del core?

Saludos 🙂

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *