Julkross Posted January 19, 2022 Share Posted January 19, 2022 Hola, ¿Alguien sabe cómo podría comprobar si todos los productos que hay en el carrito, en el .tpl de un modo de pago, pertenecen a la misma categoría? La idea es que SI todos los productos pertenecen a una misma categoría muestre el botón de redirigir a redsys y deje pagar, SI son distintos no muestra el botón y no deja pagar. He estado dándole vueltas para hacerlo sobre el mismo payment.tpl con smarty pero no doy con la tecla. Muchas gracias por adelantado. Link to comment Share on other sites More sharing options...
Luisejo Posted January 19, 2022 Share Posted January 19, 2022 Aquí puedes almacenar en un array todos los valores de $product->category_id (creo que era está la variable, depende de la versión). Y después comparas que todos los valores del array sean iguales para permitir la compra. Link to comment Share on other sites More sharing options...
gusman126 Posted January 20, 2022 Share Posted January 20, 2022 Sabes programar en PHP? Sería mejor hacer un módulo que detectara los productos y sus categorías y si lo son activar o no el transporte. O un módulo de transportista que verificara lo mismo. Por tpl, podrías hacer un foreach de los productos, meter una variable y comprobarlo para mostrar el botón, muchos cambios en diferentes ficheros y módulos de pago. Además si añades otra forma de pago tendrías que modificar. Mejor un control de transporte activar o no Link to comment Share on other sites More sharing options...
Julkross Posted January 24, 2022 Author Share Posted January 24, 2022 Hola, Muchas gracias por las respuestas. Me explico mejor que creo que falta más contexto. Tiene que ser por el tpl, es un módulo comprado de redsys, que permite crear distintos TPVs y los carga todos en el pago, quiero poder discriminar en el tpl dependiendo de si se pueden comprar por un TPV u otro por las categorías. Eso ya sé como hacerlo, pero primero tengo que comprobar primero que todos los productos del carrito están en la misma categoría (para cargar su TPV correspondiente), aquí es donde me pierdo. Sí, @gusman126 el foreach era lo que había pensado y lo que he estado intentando, almaceno todas las categorías con {$product->category_id} como dice @Luisejo pero no encuentro una manera de comprobar que todas esas categorías son la misma. Con php sería sencillo con una función de este tipo, pero con smarty no he encontrado como. function isHomogenous(array $arr, $testValue = null) { $testValue = func_num_args() > 1 ? $testValue : reset($arr); foreach ($arr as $val) { if ($testValue !== $val) { return false; } } return true; } Seguiré investigando y probando. Saludos. Link to comment Share on other sites More sharing options...
gusman126 Posted January 25, 2022 Share Posted January 25, 2022 hace 15 horas, Julkross dijo: Hola, Muchas gracias por las respuestas. Me explico mejor que creo que falta más contexto. Tiene que ser por el tpl, es un módulo comprado de redsys, que permite crear distintos TPVs y los carga todos en el pago, quiero poder discriminar en el tpl dependiendo de si se pueden comprar por un TPV u otro por las categorías. Eso ya sé como hacerlo, pero primero tengo que comprobar primero que todos los productos del carrito están en la misma categoría (para cargar su TPV correspondiente), aquí es donde me pierdo. Sí, @gusman126 el foreach era lo que había pensado y lo que he estado intentando, almaceno todas las categorías con {$product->category_id} como dice @Luisejo pero no encuentro una manera de comprobar que todas esas categorías son la misma. Con php sería sencillo con una función de este tipo, pero con smarty no he encontrado como. function isHomogenous(array $arr, $testValue = null) { $testValue = func_num_args() > 1 ? $testValue : reset($arr); foreach ($arr as $val) { if ($testValue !== $val) { return false; } } return true; } Seguiré investigando y probando. Saludos. Dudo que puedas hacerlo por tpl. sobre todo porque implica modulos externos de redsys. Vas a tener que pedir presupuesto a los que han hecho el modulo para añadir esa funcionalidad y que se puedan elegir las categorias asociadas a esa forma de pago. Puede que haya algun modulo de pago, asociar pago con categorias o algo asi Link to comment Share on other sites More sharing options...
Julkross Posted January 25, 2022 Author Share Posted January 25, 2022 (edited) Muy buenas, ¡Conseguido! Era bastante sencillo además, un amigo me dió la idea de multiplicar el valor del primer elemento del array por el número de elementos, y ver si era igual a la suma de todo el array. {assign var='categorias' value=','|explode:"{foreach from=$products item=product name=products}{$product.id_category_default},{/foreach}”} {assign var='categsuma' value=$categorias|array_sum} {assign var='catfirst' value=$categorias|array_shift} {assign var='catcount' value=$categorias|count} {math equation="x * y" x=$catcount y=$catfirst assign='cattotal’} {if $categsuma == $cattotal} OK {else} KO {/if} Saludos. Edited January 25, 2022 by Julkross (see edit history) 1 Link to comment Share on other sites More sharing options...
gusman126 Posted January 26, 2022 Share Posted January 26, 2022 hace 13 horas, Julkross dijo: Muy buenas, ¡Conseguido! Era bastante sencillo además, un amigo me dió la idea de multiplicar el valor del primer elemento del array por el número de elementos, y ver si era igual a la suma de todo el array. {assign var='categorias' value=','|explode:"{foreach from=$products item=product name=products}{$product.id_category_default},{/foreach}”} {assign var='categsuma' value=$categorias|array_sum} {assign var='catfirst' value=$categorias|array_shift} {assign var='catcount' value=$categorias|count} {math equation="x * y" x=$catcount y=$catfirst assign='cattotal’} {if $categsuma == $cattotal} OK {else} KO {/if} Saludos. Pues enhorabuena , realmente dudaba que se pudiera por tpl. Pero ahora te falta ocultar los botones? has podido Link to comment Share on other sites More sharing options...
gusman126 Posted January 26, 2022 Share Posted January 26, 2022 hace 13 horas, Julkross dijo: Muy buenas, ¡Conseguido! Era bastante sencillo además, un amigo me dió la idea de multiplicar el valor del primer elemento del array por el número de elementos, y ver si era igual a la suma de todo el array. {assign var='categorias' value=','|explode:"{foreach from=$products item=product name=products}{$product.id_category_default},{/foreach}”} {assign var='categsuma' value=$categorias|array_sum} {assign var='catfirst' value=$categorias|array_shift} {assign var='catcount' value=$categorias|count} {math equation="x * y" x=$catcount y=$catfirst assign='cattotal’} {if $categsuma == $cattotal} OK {else} KO {/if} Saludos. Solo una cosa, recuerda hacer un tema hijo para estas cosas, o al actualizar la plantilla se perdera 1 Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now