Jump to content

Casi solucionado - Modulo de filtro de productos de una query y mostrar resultados


gusman126

Recommended Posts

Hola a todos.

Por favor @nadie puedes verlo? puedes usar esto para tu blog y explicar como hacer esto

Tengo un pequeño problema que aun no he podido encontrar la solución, sigo buscando y probando asi que es posible que en unos dias la encuentre, pero a ver si aqui me la dan antes.

La cuestión es la siguiente.

El prestashop es el 1.7

Tengo un modulo desarrollado que añade lotes de caducidad a los productos, usa su propia tabla con sus propios datos, el id del producto, fecha de caducidad y lote.....

He desarrollado un modulo que busca y filtra esta tabla según una fecha, tipo el modulo de facetas, pero hay un problema, al final despues de la explicación.

$sql = "select id_producto as id from "._DB_PREFIX_."lotes_caducidad  where fecha_caducidad  = '".$date."' group by id_producto";

He puesto en la barra lateral un cuadro tipo fecha y cuando cambia el valor llama a un ajax y una url 

$('input[type="date"]').change(function(){
        
        $fecha = this.value;
        
       
        $.ajax({
            type: 'POST',
            data : "{}",
            url:'modules/filterlotes/sajax.php?fecha='+$fecha,
            dataType: "json",
            success : function(response) {
                $('#js-product-list').html(response)
                $('.total-products').html('')
            },
            complete : function(){
                  
            }
            
            
        });
        
          
    });

Al llamar al fichero tiene las ordenes de buscar todos los productos de la categoria donde esta actualmente el usuario

$products_partial = Product::getProducts($id_lang, 0,0, 'name', 'asc', $id_category = $cat);
        $result = Product::getProductsProperties($this->context->language->id, $products_partial);

una vez a leido es información se hace una busqueda y solo se añaden al array de productos finales los id que tienen lotes de caducidad con la fecha elegida

if(count($rows_l) > 0){
             
            foreach($rows_l as $pr){
             
                $clave = array_search($pr['id'], array_column($result, 'id_product'));
             
                $productos[] = $presenter->present(
                    $presentationSettings,
                    $assembler->assembleProduct($result[$clave]),
                    $this->context->language
                );
                
                
            }
             
            
        }else{
            $productos = [];
        }

una vez a filtrado y añadido al array lo añado a las variables smarty y devuelvo en Json la plantilla o fichero tpl

$products = $productos;
        $this->context->smarty->assign('products', $products);
echo json_encode($this->fetch($this->templateFile));

entonces como hemos visto arriba el fichero tpl

{if isset($products)}
  <div class="products row">
    {foreach from=$products item="product"}
      {include file="catalog/_partials/miniatures/product.tpl" product=$product}
    {/foreach}
  </div>

{else}


  <div class="products">
      <h1>{l s='No hay productos' d='filterlotes'}</h1>
  </div>
 

{/if}

lo añade al div 

$('#js-product-list').html(response)

 

Bueno después de contar todo esto, he aqui mi problema.

Es posible que todo esto lo este haciendo mal, que debe haber otra manera para usar los filtros y mostrarlos, espero que @nadie pueda ver y corregirme.

El problema esta que al mostrar los productos , filtrados, cuando le doy a organizar por nombre, cantidad o por otro orden este filtro se pierde y vuelven a estar los de siempre.

¿Como puedo hacer que al filtrar y cambiar el orden sigan estando los productos filtrados?

 

Si alguien quiere ver el funcionamiento

https://xativalowcost.com/presta17/3-women

Fechas de lotes 21/02/2018 y 01/03/2018

 

Gracias por adelantado

y de nada si a alguien le puede servir este codigo para hacer su propio filtro

 

Link to comment
Share on other sites

  • 2 weeks later...
En 22/2/2018 a las 10:45 AM, gusman126 dijo:

Hola a todos.

Por favor @nadie puedes verlo? puedes usar esto para tu blog y explicar como hacer esto

Tengo un pequeño problema que aun no he podido encontrar la solución, sigo buscando y probando asi que es posible que en unos dias la encuentre, pero a ver si aqui me la dan antes.

La cuestión es la siguiente.

El prestashop es el 1.7

Tengo un modulo desarrollado que añade lotes de caducidad a los productos, usa su propia tabla con sus propios datos, el id del producto, fecha de caducidad y lote.....

He desarrollado un modulo que busca y filtra esta tabla según una fecha, tipo el modulo de facetas, pero hay un problema, al final despues de la explicación.


$sql = "select id_producto as id from "._DB_PREFIX_."lotes_caducidad  where fecha_caducidad  = '".$date."' group by id_producto";

He puesto en la barra lateral un cuadro tipo fecha y cuando cambia el valor llama a un ajax y una url 


$('input[type="date"]').change(function(){
        
        $fecha = this.value;
        
       
        $.ajax({
            type: 'POST',
            data : "{}",
            url:'modules/filterlotes/sajax.php?fecha='+$fecha,
            dataType: "json",
            success : function(response) {
                $('#js-product-list').html(response)
                $('.total-products').html('')
            },
            complete : function(){
                  
            }
            
            
        });
        
          
    });

Al llamar al fichero tiene las ordenes de buscar todos los productos de la categoria donde esta actualmente el usuario


$products_partial = Product::getProducts($id_lang, 0,0, 'name', 'asc', $id_category = $cat);
        $result = Product::getProductsProperties($this->context->language->id, $products_partial);

una vez a leido es información se hace una busqueda y solo se añaden al array de productos finales los id que tienen lotes de caducidad con la fecha elegida


if(count($rows_l) > 0){
             
            foreach($rows_l as $pr){
             
                $clave = array_search($pr['id'], array_column($result, 'id_product'));
             
                $productos[] = $presenter->present(
                    $presentationSettings,
                    $assembler->assembleProduct($result[$clave]),
                    $this->context->language
                );
                
                
            }
             
            
        }else{
            $productos = [];
        }

una vez a filtrado y añadido al array lo añado a las variables smarty y devuelvo en Json la plantilla o fichero tpl


$products = $productos;
        $this->context->smarty->assign('products', $products);
echo json_encode($this->fetch($this->templateFile));

entonces como hemos visto arriba el fichero tpl


{if isset($products)}
  <div class="products row">
    {foreach from=$products item="product"}
      {include file="catalog/_partials/miniatures/product.tpl" product=$product}
    {/foreach}
  </div>

{else}


  <div class="products">
      <h1>{l s='No hay productos' d='filterlotes'}</h1>
  </div>
 

{/if}

lo añade al div 


$('#js-product-list').html(response)

 

Bueno después de contar todo esto, he aqui mi problema.

Es posible que todo esto lo este haciendo mal, que debe haber otra manera para usar los filtros y mostrarlos, espero que @nadie pueda ver y corregirme.

El problema esta que al mostrar los productos , filtrados, cuando le doy a organizar por nombre, cantidad o por otro orden este filtro se pierde y vuelven a estar los de siempre.

¿Como puedo hacer que al filtrar y cambiar el orden sigan estando los productos filtrados?

 

Si alguien quiere ver el funcionamiento

https://xativalowcost.com/presta17/3-women

Fechas de lotes 21/02/2018 y 01/03/2018

 

Gracias por adelantado

y de nada si a alguien le puede servir este codigo para hacer su propio filtro

 

@gusman126 Desconozco si lo has solucionado, pero intento mirarlo (no prometo nada porque yo y Prestashop hemos terminado hace tiempo y solo me paso alguna vez por el foro y poco más) antes de mayo y sino lo has solucionado intento mirarlo y decirte algo.

PosData: Mi blog no está orientado propiamente a temas de desarrollo "puro", aunque existan temas de desarrollo y pequeñas modificaciones de código, pero no es un blog orientado propiamente al desarrollo "puro", y tampoco es esa la intención, ya que no es un tema que atrae tráfico (existen excepciones como todo los sitios, pero no es lo habitual) porque la mayoría de personas que buscan dudas en "Español" (lo tengo estudiado) buscan otro tipo de consultas y tampoco puedo perder mucho tiempo elaborando X documentación en la actualidad ya que estoy fuera del mundillo y en otros menesteres, además yo soy más de foro.. y estoy intentando desvincularme de este mundillo de Prestashop totalmente.

PosData 2: Expón tu duda también en la zona de desarrollo del foro internacional: https://www.prestashop.com/forums/forum/116-core-developers/ donde tienes más desarrolladores que pueden ayudarte.

PosData 3: Si lo publicas en tu blog (tengo fichados todos los blogs de Prestashop, sean turcos, alemanes, ingleses, japoneses, chinos, etc..) ponlo también en este tema.

PosData 4: No funciona url de la web que proporcionas.

Edited by nadie (see edit history)
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...