Jump to content

Recommended Posts

Buenas tardes!

Estoy creando unas páginas tpl a mano (es decir, he creado el fichero php en la raíz, el controller en la carpeta determinada y el fichero tpl dentro de la carpeta de mi tema). En eso no he tenido problemas, porque se ve todo a la perfección.

El problema lo tengo cuando intento mostrar la lista de productos de una categoría, tal y como lo hace el fichero cateroy.tpl. Lo he intentado con la secuencia que usa este fichero:

 {include file="./product-list.tpl" products=$products} 

Pero no me funciona... No me muestra nada... ¿Puede que sea porque no puede acceder a la variable $products? La página no tiene nada en especial, sólo unos párrafos de texto. ¿Cómo podría solucionarlo? ¿Tengo que modificar algún controller para poder tener acceso a esta variable? ¿O se necesita de algún código especial para que funcione? ¿Tengo que incluir alguna cosa?

Espero vuestra ayuda.

Un saludo!

Edited by Edlloro (see edit history)

Share this post


Link to post
Share on other sites

No sé exactamente cómo lo estás haciendo, pero para comprobar si estás recibiendo la variable $products o cualquier otra, puedes usar en el TPL:

{$products|var_dump}

No sé si hablamos de la versión 1.6 o de la 1.7 de Prestashop. Si es la 1.7, en los includes mejor poner rutas absolutas desde la carpeta "templates" del tema (por ejemplo file='catalog/listing/product-list.tpl').

Edited by Prestafan33 (see edit history)

Share this post


Link to post
Share on other sites

Perdona, estoy en prestashop 1.6.

No lo estoy haciendo de ninguna manera por ahora... Pensaba que con esa línea de código sería suficiente... Pero no, porque no me muestra nada...

De hecho, he probado con lo que me dices, y me devuelve el valor NULL, señal que no está accediendo bien... No sé cómo lo tengo que hacer para que la reciba...

Me explico un poco más. Será una página suelta, que queremos usar para ayudar a mejorar el SEO de nuestra página. Vamos, que no será invocada por ninguna página, si no que va "por libre"...

La página es esta...

https://www.milcolchones.com/tienda-de-colchones-en-madrid

El contenido son sólo pruebas para ver cómo imprimir variables, ver si el código php funcionaba, etc.

Share this post


Link to post
Share on other sites

De hecho, adjunto el archivo... Hasta la línea 48 tengo controlado el contenido... Pero a partir de esta línea, que contiene la secuencia que me has comentado, son partes de código copiadas de otros archivos del prestashop, para ver el resultado que se obtenía por pantalla. Pero, visto lo visto, se ve que no accede bien a ninguna variable, porque no muestra nada.

Si me pudieras ayudar, te lo agradecería.

tienda-de-colchones-en-madrid.tpl

Share this post


Link to post
Share on other sites

Estas asignando las variables en los ficheros php?

$productos = Product::getProducts($id_lang, 0,0, 'name', 'asc', $categoria,$only_active = true);

$this->context->smarty->assign('products', $productos);

 

Share this post


Link to post
Share on other sites
47 minutes ago, gusman126 said:

Estas asignando las variables en los ficheros php?

$productos = Product::getProducts($id_lang, 0,0, 'name', 'asc', $categoria,$only_active = true);

$this->context->smarty->assign('products', $productos);

 

Tengo que añadir alguna cosa? He añadido tu primera línea de código tal que así:

{$productos = Product::getProducts($id_lang, 0,0, 'name', 'asc', $category_id, $only_active = true);}

{$this->context->smarty->assign('products', $productos);}

 

Definiendo la variable $id_lang antes, y dándole el valor 1.... La variable $category_id también la he creado y le he asignado el valor 16.

Con esto, la página me deja de funcionar...

Adjunto de nuevo el archivo...

 

tienda-de-colchones-en-madrid.tpl

Share this post


Link to post
Share on other sites

Bueno, puede que sepa dónde esta el error... He buscado la definición de la función getProducts y es la siguiente:

public function getProducts($id_lang, $p, $n, $order_by = null, $order_way = null, $get_total = false, $active = true, $random = false, $random_number_products = 1, $check_access = true, Context $context = null)

Me imagino que me deja de funcionar porque me faltan parámetros.

Share this post


Link to post
Share on other sites
hace 11 minutos, Edlloro dijo:

Tengo que añadir alguna cosa? He añadido tu primera línea de código tal que así:

{$productos = Product::getProducts($id_lang, 0,0, 'name', 'asc', $category_id, $only_active = true);}

{$this->context->smarty->assign('products', $productos);}

 

Definiendo la variable $id_lang antes, y dándole el valor 1.... La variable $category_id también la he creado y le he asignado el valor 16.

Con esto, la página me deja de funcionar...

Adjunto de nuevo el archivo...

 

tienda-de-colchones-en-madrid.tpl 1.56 kB · 0 downloads

No debes añadir el codigo que te he dicho en el fichero tpl

Dices que has añadido un controller, no se que has hecho exactamente, pero es el controller o el fichero PHP el que debe enviar los datos al fichero tpl

Que yo sepa no puedes leer los productos directamente en el fichero tpl, debe ser antes un controller quien lo haga

 

  • Like 1

Share this post


Link to post
Share on other sites
17 minutes ago, gusman126 said:

Dices que has añadido un controller, no se que has hecho exactamente, pero es el controller o el fichero PHP el que debe enviar los datos al fichero tpl

Que yo sepa no puedes leer los productos directamente en el fichero tpl, debe ser antes un controller quien lo haga

Sí, a eso me refería yo también con lo de que no sabía exactamente cómo lo estaba haciendo. Aquí el kid de la cuestión está en el controlador, no en la vista, que sólo va a mostrar de una u otra forma lo que les pases desde el controlador.

El código que te ha comentado gusman126 va en el controlador. Tal vez lo que deberías adjuntar aquí para que veamos cómo está creado es el controlador, como digo la vista no tiene mucho misterio.

Share this post


Link to post
Share on other sites

Prueba a añadir 

public function initContent(){
	parent::initContent();
	$id_lang = Configuration::get('PS_LANG_DEFAULT');
	$productos = Product::getProducts($id_lang, 0,0, 'name', 'asc', 16,$only_active = true);
	$this->context->smarty->assign('products', $productos);
	$this->setTemplate(_PS_THEME_DIR_.'tienda-de-colchones-en-madrid.tpl');
}

 

  • Like 1

Share this post


Link to post
Share on other sites

Ahora sí! Ya va mostrando cosillas... Había añadido el código en el controller, pero se me había pasado por alto definir la variable del idioma, y por eso no me funcionaba...

Ahora ya muestra algo de los productos... Faltará coger bien las imágenes (porque no las muestra) y mirar qué pasa con algunos botones "Ver" que también han desaparecido. Así como su funcionalidad, porque no enlazan con los productos. 

https://www.milcolchones.com/tienda-de-colchones-en-madrid

Seguiré investigando!!

Gracias!

Share this post


Link to post
Share on other sites

Ya he visto porque no muestra la imagen... No monta bien la url, porque no coge el id del producto... En lugar de coger:

/3034-home_default/colchon-valencia.jpg

 (con www.milcolchones.com delante, pero si lo copio tal cual enlaza directamente con la imagen y no me deja escribir la ur) Me está cogiendo

/-home_default/colchon-valencia.jpg

lógicamente no encuentra la imagen, porque la ruta no es válida...

 

Share this post


Link to post
Share on other sites

¿Alguna sugerencia sobre cómo arreglar este nuevo problema? 

Share this post


Link to post
Share on other sites

Finalmente creo que ya se soluciono.

En vez de usar el codigo 

Product::getproducts(......)

Se ha usado el de 

$category->getproducts(...)

@Edlloro Si esta solucionado pon por aqui la solución y cambia el titulo a solucionado

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More