Jump to content

Condición en pedido si todos los productos pertenecen a la misma categoría


Julkross

Recommended Posts

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

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

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

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

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 by Julkross (see edit history)
  • Like 1
Link to comment
Share on other sites

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

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

  • Like 1
Link to comment
Share on other sites

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...