Jump to content

Limitar medios de pago por valor de la cesta (Solucionado)


Recommended Posts

¡Buenos días!

Me gustaría tener la capacidad de limitar los medios de pago a mostrar dependiendo del valor de la cesta, ocultando todos menos uno en el caso de superar un determinado límite. NO veo que se pueda hacer por configuración de preferencias en la entrada de menú "Pago". allí solo se puede limitar por moneda, grupo, localización o transportista.

¿Se puede añadir de alguna forma esta nueva preferencia, o debo programar algún tipo de override para poder hacer esto?

 

Gracias.

Link to comment
Share on other sites

Hago esto usando una override de la función getCarriers en la clase de Carrier.  No hay un gancho disponible para hacer esto directamente, aunque podría cargar un script y luego ocultarlo en la página, supongo.

Link to comment
Share on other sites

Normalmente en el hookdisplaypayment es donde se puede regular si sale o no el módulo en cuestión

esto es de un presta 1.6 en 1.7 es hookPaymentOptions

imagen.png.df51f25f8b8458097e7a2e2f568a0cb0.png

 

 

Pero si tienes que hacer alguna acción coordinada entre todos las formas de pago (muestro una o otra dependiendo de xxxx)  posiblemente tengas que subir y hacer un override de p.ej (esto es un 1.7.6.X)

imagen.thumb.png.af61b6eaeace6518336126c31e216e6c.png

  • Like 2
Link to comment
Share on other sites

El problema con hookPaymentOptions es que se agrega a la lista de pagos representados, no creo que pueda cambiar la lista (aparte de cargar un script), y esto habría que hacerlo en cada método de pago, no?

Parece que ps 8 tiene este gancho ahora: actionPresentPaymentOptions, que probablemente funcionará bien

Link to comment
Share on other sites

4 minutes ago, roja45 said:

El problema con hookPaymentOptions es que se agrega a la lista de pagos representados, no creo que pueda cambiar la lista (aparte de cargar un script), y esto habría que hacerlo en cada método de pago, no?

Parece que ps 8 tiene este gancho ahora: actionPresentPaymentOptions, que probablemente funcionará bien

En 1.7 https://devdocs.prestashop-project.org/1.7/modules/payment/

Cualquier módulo de pago tiene que extender PaymentModule he implementar hookPaymentOptions() & hookPaymentReturn()

 

hookPaymentOptions() se ocupa de mostrar la forma de pago. Si dentro del método  miras el carrito que cumpla cualquier criterio  puedes decidir no mostrarlo (return;)

imagen.png.68c8d173497b7edf0a937427c1eb5d83.png

Entonces sí, se debería comprobar en cada forma de pago, a no ser que te vayas a quien llama a estos hooks en un bucle y lo hagas ahí (PaymentsOptionsFinder)

  • Like 1
Link to comment
Share on other sites

Gracias por las ideas.

Creo que voy a probar Override de PaymentsOptionsFinder como comenta @Enrique Gómez ya que allí en el bucle puedo controlar mejor qué módulos serán devueltos en cada caso y me permite añadir más condiciones de filtro. Pero claro, dependerá de si tengo o no acceso al carro para ver sus características.

Volveré al hilo para comentar mis resultados

 

¡Un saludo!

Link to comment
Share on other sites

  • 3 weeks later...

Hola.

Cierro este hilo explicando la solución por la que he optado al final. El Override me parecía demasiado agresivo así que lo que al final he hecho ha sido crear mi propio hook y llamarlo desde la plantilla de pago para inicializar la variable smarty que decide si se limitan o no las opciones de pago,

  {assign var = 'is_limited' value={hook h='limitPaymentOptions'} }

Aquí se pueden tomar todo tipo de decisiones y posteriormente en el bucle que expone estas opciones, comprobar si se deben mostrar o no:

  <div class="payment-options {if $is_free}hidden-xs-up{/if}">
    {foreach from=$payment_options item="module_options"}
      {foreach from=$module_options item="option"}
        
        {if isset($is_limited) && $is_limited && $option.module_name != 'aqcustompayment' }
          {* MANOLO: Si pasa el límite, debemos ocultar el resto de medios de pago *}
          {continue}
        {/if}

así, pasado un limite de valor de la cesta solo se muestra el medio de pago de mi módulo.

Prefiero alterar un poco una plantilla de un tema a hacer overrides del core, la verdad.

Espero sirva a alguien en el futuro.

  • Like 1
Link to comment
Share on other sites

  • Manuel_GT changed the title to Limitar medios de pago por valor de la cesta (Solucionado)

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...