Jump to content

Consulta SQL para obtener datos de productos para el index


Recommended Posts

Buenos días, tengo una consulta que haceros a ver si podéis ayudarme un poco.

 

Estoy tratando de hacer un "módulo" para el index que muestre los 18 productos mas visitados por mis clientes en un slider. Para crearlo, estoy usando como base un módulo gratuito que te calcula en el back office las visitas que tienen cada uno de los productos.

 

He analizado el módulo gratuito y lo he adaptado para mostrar los productos mas visitados dentro del slider en el index, pero este solo trabajaba con 3 datos: la id del producto, su nombre y el número de visitas. Este último dato se guarda en 2 tablas aparte que crea el módulo al ser instalado. Además, he conseguido localizar y mostrar también las imágenes de los productos.

 

El problema que tengo es que no se donde localizar el resto de datos que necesito.

 

Debo de mostrar también los precios (tengo aplicado un 10% de descuento en toda la tienda, por lo que se deberian mostrar el precio original, por ejemplo 50€ y el precio final 45€). He encontrado la columna price dentro de ps_product pero no me da ninguno de los precios reales, varían en unos céntimos. Además, como en el resto del productos, cuando pinchas en el, debe llevarte a la página del producto, pero no encuentro donde se guarda esa url.

 

Por último, no se si será necesario añadirlo, pero para mostrar los datos lo que hago es pasar el array que devuelve la consulta sql a product-list.tpl de la misma forma en que lo hacen los módulos de newproducts y bestsellers.

 

La consulta sql que tengo por ahora es esta:

 

SELECT pvs.id_product, pvs.visits, pl.name, pl.link_rewrite, i.id_image, p.price
FROM `'._DB_PREFIX_.'product_visit_simple` pvs
LEFT JOIN `'._DB_PREFIX_.'product_lang` pl on (pl.id_product = pvs.id_product AND pl.id_lang = '.$cookie->id_lang.')
LEFT JOIN `'._DB_PREFIX_.'image` i on (i.id_product = pvs.id_product)
LEFT JOIN `'._DB_PREFIX_.'product` p on (p.id_product = pvs.id_product)
WHERE p.active = 1 ORDER BY visits DESC LIMIT 0, 18'

 

 

Link to comment
Share on other sites

Revisa la funcion  

hookRightColumn

del modulo

blockviewed

te puede servir como punto de partida

 

La he revisado pero sigo sin obtener los dos datos que necesito, los precios, que por defecto no vienen en esa función y el enlace.

 

De todas formas, revisando ese modulo y con el developer tools de chrome me he dado cuenta que me faltaban muchos mas datos (customizable, description_short, avalaible_for_order, id_product_attribute y quanty) que ya he recogido, así que gracias por el aporte.

 

Una cosa que no entiendo sobre el enlace, el módulo de blockviewed si que lo tiene, pero aun comprendo de donde lo obtiene. Lo único parecido que he encontrado en la base de datos es la columna link_rewrite de ps_product, a la que ya consulto, pero sigue sin funcionar. 

 

Sin embargo, mirando la página con el developer tools de chrome me pone que me faltan las variables link y allow_oosp, pero no las encuentro en ninguna de las tablas.

 

La consulta ahora mismo es esta:

SELECT pvs.id_product, pvs.visits, pl.name, pl.description_short, pl.link_rewrite, i.id_image, il.legend,
pa.id_product_attribute, p.available_for_order, p.active, p.customizable, p.quantity, cl.link_rewrite
FROM `'._DB_PREFIX_.'product_visit_simple` pvs
LEFT JOIN `'._DB_PREFIX_.'product_lang` pl on (pl.id_product = pvs.id_product AND pl.id_lang = '.(int)($params['cookie']->id_lang).')
LEFT JOIN `'._DB_PREFIX_.'image` i on (i.id_product = pvs.id_product)
LEFT JOIN `'._DB_PREFIX_.'image_lang` il ON (il.id_image = i.id_image AND il.id_lang = '.(int)($params['cookie']->id_lang).')
LEFT JOIN `'._DB_PREFIX_.'product` p on (p.id_product = pvs.id_product)
LEFT JOIN `'._DB_PREFIX_.'product_attribute` pa on (pa.id_product = pvs.id_product)
LEFT JOIN `'._DB_PREFIX_.'category_lang` cl ON (cl.id_category = p.id_category_default)
WHERE p.active = 1 
AND pl.id_lang = '.(int)($params['cookie']->id_lang).'
AND cl.id_lang = '.(int)($params['cookie']->id_lang).'
ORDER BY visits DESC 
LIMIT 0, 18
Link to comment
Share on other sites

 

Una cosa que no entiendo sobre el enlace, el módulo de blockviewed si que lo tiene, pero aun comprendo de donde lo obtiene. Lo único parecido que he encontrado en la base de datos es la columna link_rewrite de ps_product, a la que ya consulto, pero sigue sin funcionar. 

 

 

E link lo obtiene en base a la id del producto y del link_rewrite con la función getProductLink

$obj->product_link = $this->context->link->getProductLink($obj->id, $obj->link_rewrite, $obj->category_rewrite);

Con el id del producto sería suficiente para obtener el enlace.

 

 

Sin embargo, mirando la página con el developer tools de chrome me pone que me faltan las variables link y allow_oosp, pero no las encuentro en ninguna de las tablas.

 

Puedes obtener allow_oosp en base la propiedad out_of_stock.

$product =  new Product($id_product, true, $this->context->language->id, $this->context->shop->id);
$this->context->smarty->assign(array(
'allow_oosp' => $this->product->isAvailableWhenOutOfStock((int)$this->product->out_of_stock)));

Prueba y nos cuentas.

Link to comment
Share on other sites

Gracias, ya tengo el módulo terminado.

 

Utilicé de base las funciones getProducts y getProductProperties de la clase products para obtener todos los datos que necesitaba, aunque modifique un poco las consultas para adaptarlas a lo que necesitaba.

 

Gracias por vuestra ayuda.  :)

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