Jump to content
PrestashopUser03

Récupérer les informations du produit dans product-list.tpl

Recommended Posts

Bonjour à tous,

Je suis en train de créer un module qui récupère les informations d'une api pour les afficher dans la fiche produit et dans la liste des produits (product-list.tpl), pour la fiche produit, ça marche nickel, les informations sont récupérées et j'arrive à tout afficher correctement.

Pour la liste des produits, c'est une autre histoire, j'ai créé un hook (ajouté à la base de données, puis mit sur product-list.tpl) et il fonctionne, j'arrive à ajouter des données statiques via ce hook. En revanche, j'aimerais donc savoir comment récupérer les informations du produit affiché dans chaque vignette.  J'ai essayé de faire

        $product = $this->context->controller->getProducts();

mais un seul produit s'affiche à l'écran au lieu des dizaines de produits habituels de la page product-list.tpl, la mise en forme disparait et le reste de la page ne s'affiche pas : image.thumb.png.78d03b167fbc05ddc4d49349219fa89a.png

Y aurait-il une autre fonction qui permet d'afficher les informations d'un produit dans la page product-list.tpl?

 

Merci d'avance :)

Edited by PrestashopUser03 (see edit history)

Share this post


Link to post
Share on other sites

Bonjour, merci pour cette réponse.

Concernant le code, c'est ce que j'ai fait dans mon fichier tpl, mais cette ligne :

$product = $this->context->controller->getProduct();

fait tout bugguer une fois que je l'ajoute à mon hook et je ne sais pas pourquoi alors que plus bas sur un autre hook qui s'affiche sur la fiche produit, cette ligne fonctionne parfaitement.

Dans product-list.tpl, j'ai fait ça :

                    {hook h=displayProductList mod="leasingdisplay"}

 

Edited by PrestashopUser03
ajout d'informations (see edit history)

Share this post


Link to post
Share on other sites

Dans ton tpl
 

{hook h=displayProductList mod="leasingdisplay" product=$product}

Dans ton module la méthode doit ressembler à :
 

public function hookdisplayProductList($params) {

    d($params);

}

Tu devrais avoir ton produit.

Edited by okom3pom (see edit history)

Share this post


Link to post
Share on other sites

J'ai bien fait ce que vous venez de me dire, mais en fait, le problème vient seulement de ça :

        $product = $this->context->controller->getProduct();


Ca fait arrêter le chargement de toute la page, savez-vous pourquoi?

 

(en parallèle, j'ai testé avec ce code :    $product = new Product((int)$id, true, (int)$id_lang); et je récupère des informations sur le produit (avec un var_dump)  mais pas le prix ou le manufacturer_name, qui sont les deux informations dont j'ai besoin)

Avez-vous une idée?

Share this post


Link to post
Share on other sites
 $product = $this->context->controller->getProduct();

Si vous êtes dans une catégorie c'est normal que ça ne fonctionne pas ce code est valable que pour les pages produits.

Tout ou presque existe dans prestashop :) pour retrouver le nom de fabriquant un petit  

$manufacturer_name = Manufacturer::getNameById( $product->id_manufacturer );



Sinon quand vous faites ce que je dis dans le message au dessus, le débug de param donne quoi ?

 

Edited by okom3pom (see edit history)

Share this post


Link to post
Share on other sites

Rien du tout, ça tourne dans le vide et la page ne charge jamais, voici l'intégralité du code :

dans le hook:

 public function hookdisplayProductList($params){
        d($params);
	
		return $this->display(__FILE__, "views/templates/front/tabproduct.tpl");
    }

dans le tpl :

{hook h=displayProductList mod="leasingdisplay" product=$product}

Je précise tout de même que le hook fonctionne, j'ai réussi à passer des paramètres de test aux endroits de mon choix.

 

D'ailleurs, quel est l'équivalent du code de la fiche produit mais pour la page des catégories où se trouve product-list.tpl. Mieux encore, y-a-t-il un document qui liste toutes ces fonctions?

Merci :)

Edited by PrestashopUser03 (see edit history)

Share this post


Link to post
Share on other sites
Citation

Rien du tout, ça tourne dans le vide et la page ne charge jamais, voici l'intégralité du code :


Ce n'est pas possible :) tu as le débug prestashop activé ? 

 

Share this post


Link to post
Share on other sites

Lorsque je fais ça dans le hook:

    $manufacturer = new Manufacturer((int)$id, (int)$id_lang);
    $nom=$manufacturer->name;
    d($manufacturer);

 

Voilà ce que m'affiche le débug. :

Manufacturer Object ( [
id] => 
[id_manufacturer] => 
[name] => 
[description] => 
[short_description] => 
[id_address] => 
[date_add] => 
[date_upd] => 
[link_rewrite] => 
[meta_title] => 
[meta_keywords] => 
[meta_description] => 
[active] => 

Aucune info n'est apparue, donc, comment faire pour les récupérer svp? Dans la fiche produit, j'ai juste eu à faire

$product = $this->context->controller->getProduct();

  et à appeler le contenu de l'array $product, quel est l'équivalent sur la page catégorie?

 

Merci d'avance

Share this post


Link to post
Share on other sites
$manufacturer = new Manufacturer((int)$id, (int)$id_lang);

 

tu as quoi comme $id et $id_lang ? as tu essayé de mettre directement des valeurs dans cette ligne ?

  • Like 1

Share this post


Link to post
Share on other sites

Il n'y a rien vu que ce n'est pas connecté au produit en cours, c'et justement le but de ce topic, comment récupérer les infos du produit en cours. Je me répète, mais je suis vraiment bloqué sur une ligne toute bête qui serait du même type que  $product = $this->context->controller->getProduct(), mais pour la page catégorie.

Merci beaucoup pour vos réponses en tous cas :)

Share this post


Link to post
Share on other sites
1 hour ago, coeos.pro said:

$manufacturer = new Manufacturer((int)$id, (int)$id_lang);

 

tu as quoi comme $id et $id_lang ? as tu essayé de mettre directement des valeurs dans cette ligne ?

Quand je tente en mettant 8 comme id par exemple, j'ai bien l'object d'une marque qui apparait dans le débug. Donc ça fonctionne de cette façon, mais le d($params) ne fonctionne pas. Je suis tout de même bloqué avec le même problème qui est que je ne sais pas comment lier le produit en cours au hook.

Share this post


Link to post
Share on other sites

Le code que je t'ai donné fonctionne très bien je comprends pas pourquoi tu veux le changer :) 

As-tu pensé à vider ton cache ?

Regarde ici : http://www.chafoins.com/16114/ 

Le seul truc c'est que c'est un tableau et pas un objet mais bon le d($params) le dit

	public function hookDisplayProductList($params) {
		
		$manufacturer_name = Manufacturer::getNameById( $params['product']['id_manufacturer'] );

		$this->context->smarty->assign(array('manufacturer_name' => $manufacturer_name));	
		
		return $this->display(__FILE__, 'views/templates/hooks/product-list.tpl');
	
	}	

 

 

Edited by okom3pom (see edit history)
  • Like 1

Share this post


Link to post
Share on other sites

Je t'ajoute le code du product-list.tpl ( celui du thème )

{hook h="displayProductList" mod="okom_scroll" product=$product}

 

  • Like 1

Share this post


Link to post
Share on other sites

Merci infiniment, ça marche parfaitement. Pour récupérer le prix, j'ai fait

$price=$params['product']['price_without_reduction'];

mais j'ai l'impression de faire quelque chose de sale par rapport à prestashop. Où trouver toutes les fonctions permettant d'appeler les caractéristiques des produits/catégories et co?

 

Pour info, le d($params) ne fonctionnait pas parce que la page sur laquelle je l'ai fait contenait trop de produits et que le navigateur plantait, je l'ai fait sur une catégorie à 7 produits et ça a fonctionné.

Merci en tous cas pour vos aides :)

Share this post


Link to post
Share on other sites

Je pense qu'il faut que tu reprennes tout depuis le début.

Est ce que tu connais les Classes, les méthodes ? Un tableau ou un objet ? Le MVC ? 

Pour les méthodes prestashop ouvres le dossier classes 

https://github.com/PrestaShop/PrestaShop/tree/1.6.1.x/classes

Tu auras des méthodes pour customer, category, manufacturer, carrier .... 

Les méthodes peuvent être public, private, protected ... 

 

 

Share this post


Link to post
Share on other sites

J'ai un bon niveau en procédural, et j'ai de bonnes bases en orienté objet, je souhaiterais bien reprendre depuis le début mais il n'existe aucune doc digne de ce nom pour prestashop...

  • Like 1

Share this post


Link to post
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...

Important Information

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