Jump to content

retornar contenido de un .tpl via ajax


apositivo

Recommended Posts

saludos comunidad !

 

estamos realizando pruebas de comunicación en prestashop y estamos estudiando las limitantes, tenemos un modulo que nos genera un boton como  el mostrado en la figura,  funciona perfectamente, se comunica con nuestro controller via ajax y trae la informacion solicitada.

 

ahora tenemos un nuevo reto, queremos saber si en ese metodo que se ejecuta via ajax al presionar el boton se le puede asignar contenido de un TPL

 

vista del boton (archivo AJAX_DIV.jpg)

<input type="text" id="id_data" value="1"/>
<button id="ajax-data">Click para traer data via ajax</button>
<div style=" border-style:dashed; border-color:#000000" id="contenido"> EN ESTE DIV SE MOSTRARA LA INFORMACION <BR> QUE VIENE VIA AJAX</div>

codigo en ajax.js

$(function() {
    $('#ajax-data').click(function() {
        var query = $.ajax({
            type: 'POST',
            url: baseUri+'module/MyModule/ajax',
            data: 'method=myMethod&id_data=' + $('#id_data').val(),
            dataType: 'html',
            success: function(data)
            {
                console.log(data);
            }
        });
    });
});

codigo en el controller:

<?php
 // class: modulename+controllername+prarentclassname
class MyModuleajaxModuleFrontController extends ModuleFrontController {
 
    public function initContent() {
        parent::initContent();
        $this->ajax = true; // enable ajax
    }
 
    // respond json
    public function displayAjax()
    {
        if ($this->errors)
            die(Tools::jsonEncode(array('hasError' => true, 'errors' => $this->errors)));

        if(Tools::getValue('method')=='myMethod')
        {
            $sql = 'SELECT * FROM ps_product WHERE id_product = '.Tools::getValue('id_data');
            $products = Db::getInstance()->ExecuteS( $sql );
            $productObj = new Product($products['id_product']);
            /*  aqui la duda ! como puedo pasar el $productObj al .TPL y devolverlo via ajax*/
            $return $this->setTemplate('myinfoproducts.tpl');
        
        }
    }
    
    
    
}

post-341341-0-89166600-1439584241_thumb.jpg

post-341341-0-93285600-1439584422_thumb.jpg

post-341341-0-41520100-1439584928_thumb.jpg

Link to comment
Share on other sites

al agregar  en el return

echo json_encode($this->context->smarty->fetch(_PS_MODULE_DIR_ .'MyModule/views/templates/front/blocknewproducts.tpl'));

FUNCIONO ,

 

solo que ahora trae la data en formato extraño

"\r\n\r\n
\r\n\t
Novedades<\/a><\/h4>\r\n\t
\r\n\t\t\t

    \r\n\t\t\t\t\t\t\t\t\t
    \"\"<\/a><\/li>\r\n\t\t\t\t\t\t\t\t\t\t\t\t
    \"\"<\/a><\/li>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/ul>\r\n\t\t

    \r\n\t\t\t\t\t
    <\/a><\/dt>\r\n\t\t\t\t\t\t\t\t
    <\/a><\/dt>\r\n\t\t\t\t\t\t\t\t
    1<\/a><\/dt>\r\n\t\t\t
        1<\/a>
        Leer m\u00e1s<\/a><\/dd>\t\t\t\t\t
    1<\/a><\/dt>\r\n\t\t\t
        1<\/a>
        Leer m\u00e1s<\/a><\/dd>\t\t\t\t\t
    5<\/a><\/dt>\r\n\t\t\t
        5<\/a>
        Leer m\u00e1s<\/a><\/dd>\t\t\t\t\t
    1<\/a><\/dt>\r\n\t\t\t
        1<\/a>
        Leer m\u00e1s<\/a><\/dd>\t\t\t\t\t
    <\/a><\/dt>\r\n\t\t\t\t\t\t\t\t
    <\/a><\/dt>\r\n\t\t\t\t\t\t\t\t
    <\/a><\/dt>\r\n\t\t\t\t\t\t\t\t
    <\/a><\/dt>\r\n\t\t\t\t\t\t\t\t
    <\/a><\/dt>\r\n\t\t\t\t\t\t\t\t
    0<\/a><\/dt>\r\n\t\t\t\t\t\t\t\t
    1<\/a><\/dt>\r\n\t\t\t
        1<\/a>
        Leer m\u00e1s<\/a><\/dd>\t\t\t\t\t
    <\/a><\/dt>\r\n\t\t\t\t\t\t\t\t
    <\/a><\/dt>\r\n\t\t\t\t\t\t\t\t
    1<\/a><\/dt>\r\n\t\t\t
        1<\/a>
        Leer m\u00e1s<\/a><\/dd>\t\t\t\t\t
    <\/a><\/dt>\r\n\t\t\t\t\t\t\t\t
    0<\/a><\/dt>\r\n\t\t\t\t\t\t\t\t
    4<\/a><\/dt>\r\n\t\t\t
        4<\/a>
        Leer m\u00e1s<\/a><\/dd>\t\t\t\t\t
    0<\/a><\/dt>\r\n\t\t\t\t\t\t\t\t
    0<\/a><\/dt>\r\n\t\t\t\t\t\t\t\t
    <\/a><\/dt>\r\n\t\t\t\t\t\t\t\t
    <\/a><\/dt>\r\n\t\t\t\t\t\t\t\t
    0<\/a><\/dt>\r\n\t\t\t\t\t\t\t\t
    0<\/a><\/dt>\r\n\t\t\t\t\t\t\t\t
    d<\/a><\/dt>\r\n\t\t\t
        d<\/a>
        Leer m\u00e1s<\/a><\/dd>\t\t\t\t\t
    <\/a><\/dt>\r\n\t\t\t\t\t\t\t\t
    <\/a><\/dt>\r\n\t\t\t\t\t\t\t\t
    0<\/a><\/dt>\r\n\t\t\t\t\t\t\t\t
    0<\/a><\/dt>\r\n\t\t\t\t\t\t\t\t
    0<\/a><\/dt>\r\n\t\t\t\t\t\t\t\t
    0<\/a><\/dt>\r\n\t\t\t\t\t\t\t\t
    0<\/a><\/dt>\r\n\t\t\t\t\t\t\t\t
    <\/a><\/dt>\r\n\t\t\t\t\t\t\t\t
    <\/a><\/dt>\r\n\t\t\t\t\t\t\t\t
    <\/a><\/dt>\r\n\t\t\t\t\t\t\t\t
    <\/a><\/dt>\r\n\t\t\t\t\t\t\t\t
    <\/a><\/dt>\r\n\t\t\t\t\t\t\t\t
    0<\/a><\/dt>\r\n\t\t\t\t\t\t\t\t
    0<\/a><\/dt>\r\n\t\t\t\t\t\t\t\t
    <\/a><\/dt>\r\n\t\t\t\t\t\t\t\t
    0<\/a><\/dt>\r\n\t\t\t\t\t\t\t\t
    0<\/a><\/dt>\r\n\t\t\t\t\t\t\t\t
    1<\/a><\/dt>\r\n\t\t\t
        1<\/a>
        Leer m\u00e1s<\/a><\/dd>\t\t\t\t\t
    4<\/a><\/dt>\r\n\t\t\t
        4<\/a>
        Leer m\u00e1s<\/a><\/dd>\t\t\t\t\t
    0<\/a><\/dt>\r\n\t\t\t\t\t\t\t\t
    1<\/a><\/dt>\r\n\t\t\t
        1<\/a>
        Leer m\u00e1s<\/a><\/dd>\t\t\t\t\t
    0<\/a><\/dt>\r\n\t\t\t\t\t\t\t\t
    n<\/a><\/dt>\r\n\t\t\t
        n<\/a>
        Leer m\u00e1s<\/a><\/dd>\t\t\t\t\t
    1<\/a><\/dt>\r\n\t\t\t
        1<\/a>
        Leer m\u00e1s<\/a><\/dd>\t\t\t\t\t
    1<\/a><\/dt>\r\n\t\t\t
        1<\/a>
        Leer m\u00e1s<\/a><\/dd>\t\t\t\t\t
    b<\/a><\/dt>\r\n\t\t\t
        b<\/a>
        Leer m\u00e1s<\/a><\/dd>\t\t\t\t\t
    2<\/a><\/dt>\r\n\t\t\t
        2<\/a>
        Leer m\u00e1s<\/a><\/dd>\t\t\t\t\t
    2<\/a><\/dt>\r\n\t\t\t
        2<\/a>
        Leer m\u00e1s<\/a><\/dd>\t\t\t\t\t
    <\/a><\/dt>\r\n\t\t\t\t\t\t\t\t
    <\/a><\/dt>\r\n\t\t\t\t\t\t\t\t
    1<\/a><\/dt>\r\n\t\t\t
        1<\/a>
        Read m\u00e1s<\/a><\/dd>\t\t\t\t\t
    <\/a><\/dt>\r\n\t\t\t\t\t\t\t\t
    0<\/a><\/dt>\r\n\t\t\t\t\t\t\t\t
    2<\/a><\/dt>\r\n\t\t\t
        2<\/a>
        Read m\u00e1s<\/a><\/dd>\t\t\t\t\t
    <\/a><\/dt>\r\n\t\t\t\t\t\t\t\t
    <\/a><\/dt>\r\n\t\t\t\t\t\t\t\t
    0<\/a><\/dt>\r\n\t\t\t\t\t\t\t\t
    0<\/a><\/dt>\r\n\t\t\t\t\t\t\t\t
    0<\/a><\/dt>\r\n\t\t\t\t\t\t\t\t
    <\/a><\/dt>\r\n\t\t\t\t\t\t\t\t
    1<\/a><\/dt>\r\n\t\t\t
        1<\/a>
        Read m\u00e1s<\/a><\/dd>\t\t\t\t\t
    <\/a><\/dt>\r\n\t\t\t\t\t\t\t\t
    3<\/a><\/dt>\r\n\t\t\t
        3<\/a>
        Read m\u00e1s<\/a><\/dd>\t\t\t\t\t
    <\/a><\/dt>\r\n\t\t\t\t\t\t\t\t
    <\/a><\/dt>\r\n\t\t\t\t\t\t\t\t
    <\/a><\/dt>\r\n\t\t\t\t\t\t\t<\/dl>\r\n\t\t
Link to comment
Share on other sites

:wub:

json_encode: Retorna la representación JSON del valor dado, o sea Devuelve un string con la representación JSON del valor pasado.

 

usted esta pasando : json_encode (todo el bendito archivo tpl);

        if(isset(Tools::getValue('method')))
        {
            $sql = 'SELECT * FROM ps_product WHERE id_product = '.Tools::getValue('id_data');
            $products = Db::getInstance()->ExecuteS( $sql );
            $productObj = new Product($products['id_product']);
            


$this->context->smarty->assign(array( 'methods' => Tools::jsonEncode(Tools::getValue('method')),

));
            $return $this->setTemplate('myinfoproducts.tpl');
        
        }

ma o meno asi, :unsure:

 

saludos

Edited by tamu secreto (see edit history)
Link to comment
Share on other sites

si quiere mostrar un archivo, creo que la menor opcion es jquery incluso para enviar variables.

El metodo .load() se usa para cargar algo, no recuerdo pero creo que esta deprecated en las ultimas versiones, sin embargo se sigue usando :-(

 

lea esto:

 

http://api.jquery.com/load/

 

para enviar las variables o formularios use jquery.

 

saludos

Link to comment
Share on other sites

hola tamu secreto lo que buscamos es traer productos por demanda, tal como el modulo blocklayered (  http://fo.demo.prest....com/en/3-women ).

 

en ese modulo se traen N cantidad de productos VIA AJAX, bueno en el ejemplo no se mira el efecto, ya  que solo existen 7 productos, pero si tienes prestashop instalado configura que se muestren 2 o 3 productos y podras visualizarlo.

 

 

ejemplo de contenido que se carga a peticion:

 

http://addons.prestashop.com/demo/FO9373.html

Edited by apositivo (see edit history)
Link to comment
Share on other sites

-_-  ahora entiendo mejor.

a ver, en este modulo:

http://fo.demo.prestashop.com/en/3-women

se usa un modo simple, aún que se la han embroyado bastante para algo que era mas simple. Los links con atributos no funcionan, es algo que cambio en unas de las  versiones de prestashop (yo tambien tengo que actualizar esto en mis modulos!)

otro punto sobre este modulo es que solo lista la imagen principal y luego carga los artibutos, el efecto es lindo, pero se podria hacer mucha mas carga si se discrimina por talle, color, etc. (a esto me referia cuando le dije en hacer algo mas complejo)...

 

sobre este modulo:

http://demo-is.studio-kiwik.fr/index.php?id_category=3&controller=category&id_lang=1#/page-4

Los links con atributos funcionan (cuando uno hace clic en uno de los colores...)

Pero si observa los productos se repetin, llenan el vacio probacado por categoria, atributo (por decirlo de un modo simple), o sea la consulta entiende que hay por ejemplo 6 productos Printed Dress 31.20 Euros.

en realidad hay uno con varios talles o colores (y cada uno de estos posee su stock o numero de disponibilidad que no entran en juego aqui!).

en fin es una critica constructiva, pero uno parece copia del otro, seguramente al segundo se le adiciono el plugin jquery infity scroll. Pero no se tuvo en cuenta el detalle que imprime varias veces un mismo producto.

 

voy ver si logro un infinity scroll para el home de una tienda prestashop.

 

¿usted donde desea mostrar esto?

 

saludos

Edited by tamu secreto (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...