[Prestashop] Ajout d'un champ table product, comment le récupérer sur product.tpl ?

WRInaute passionné
Bonjour à tous,

Voilà comme dit dans le titre j'ai ajouté un champ à la table product de ma BDD MySQL et je souhaiterais le récupérer sur la page product.tpl

Je connais PHP/MySQL, mais Prestashop est "bizarre", je n'arrive pas à savoir où et comment sont faites les requêtes SQL.

Quelqu'un connait Prestashop et peu m'aider ?
 
WRInaute accro
Prestashop c'est de la POO + smarty. Tu as donc deux étapes,
1- la requete sql, dans une classe
2- l'affichage de la requête dans le template via smarty.

Si tu regardes la structure d'un module, tu vois que tu as généralement un fichier php qui contient la classe, et un fichier tpl

Si tu rajoutes un champs, tu rajoutes un attribut à la classe produit. La façon "propre" de faire est une classe qui étend la classe mêre, en y rajoutant cet attribut, et en surchargeant les méthodes de la classe mère pour prendre le nouvel attribut en compte.
A partir de là, tu dispose de ta nouvelle variable à rajouter dans ton fichier .tpl
 
WRInaute passionné
Merci pour ta réponse Marie-Aude,

Il y a un "truc" que je pige pas.

Il y a d'un coté un ficher dans classes/Product.php dans lequel je vois toutes les variables produits, par exemple :
Code:
	/** @var string Reference */
	public 		$reference;

Il y a aussi le fichier controllers/ProductController.php où là c'est plus le bordel (pour moi) et ça assigne à Smarty seulement je ne trouve pas les données qui correspondent au produit et je ne sais pas où est la requête SQL
Code:
self::$smarty->assign(array(
					'product' => $this->product,
					'ecotax_tax_inc' => $ecotaxTaxAmount,
Dis moi si je me trompe, mais le fichier classe sert pour l'admin et le controller sert pour le site non ? Je dois me débrouillé pour rajouter un champ dans controllers/ProductController.php c'est bien ça ?
 
WRInaute impliqué
N'hésites pas à utiliser la fonction {debug} de smarty côté front office (product.tpl), elle t'affichera les variables trouvées par le moteur.
 
WRInaute passionné
Merci de te joindre à nous franckM :)

Tu connais un peu Prestashop aussi ? Je vais tester ce que tu me dis pour voir mais de toute manière la variable que je veux n'y sera pas...

Pour reprendre mon bout de code d'exemple, y'a pas moyen de rajouter mon champ dans une liste de ce type tout simplement ? Genre :
Code:
self::$smarty->assign(array(
               'product' => $this->product,
               'ecotax_tax_inc' => $ecotaxTaxAmount,
               'image_url' => $this->image_url

Comme ça après dans product.tpl je met
<img src="{$product->image_url}">
 
WRInaute impliqué
En gros, tu dois effectivement changer ta classe Product.
Dans cette classe, tu commences par définir ta variable:
Code:
public $mavar;

Ensuite il te faudra changer les tableaux de:
Code:
$fieldsValidate et $fieldsValidateLang
Pour y intégrer ta nouvelle valeur.

Ensuite niveau SQL, tu rajoutes dans la fonction
Code:
getTranslationsFieldsChild()
à la fin de la boucle foreach ($languages as $language) un truc comme ça:
Code:
$fields[$language['id_lang']]['mavar'] = (isset($this->mavar[$language['id_lang']])) ? pSQL($this->nouveau[$language['id_lang']], true) : '';


Là tu as un champs de type description qui s'ajoutera aux produits.

A ce moment, il faut maintenant l'ajouter au Back office dans le fichier tabs/AdminProduct.php

Et ensuite, sur ton fichier TPL, tu n'auras qu'à l'appeler de la façon suivante {$product->mavar}

Mais je pense que tu devrais trouver des tutos là dessus non ? Parce que là, ce que je te mets, c'est de la bouillie et en plus je pense que dans la classe product.php, j'ai oublié mais il faut sûrement rajouter le champs 'mavar' dans des INSERT.
 
WRInaute passionné
Donc ça serais le fichier classes/Product.php qu'il faut modifier ? Je ne touche pas a ProductController.php ?
Moi je pensais que c'est le controleur qu'il fallait changer et que la classe était pour le back office.

Je vais essayé en changeant comme tu me le conseilles et je testerai avec {debug}

J'ai posté un topic sur le forum Prestashop mais y'a personne là dessus c'est encore plus mort que sur oscommerce...

Pour le Back Office, je suis obligé de le modifier aussi ?
Parce que là j'insert directement en BDD, je ne passerai jamais par l'admin pour ajouter les données de ce champ

Edit: J'ai trouver des infos ici http://www.devoox.com/prestashop-ajouter-un-champ-personnalise-sur-la- ... oduit.html
 
WRInaute passionné
J'ai suivi le tuto que j'ai mis en lien, ça marche très bien !

Mais... (y'a toujours un mais) quand je vais dans l'admin sur un produit et que je clique sur "Enregistrer", j'ai ça :

Code:
Fatal error (Product -> image_url = )
On voit que le champ image_url est vide, mais pourtant j'ai bien fait comme ils disent sur le tuto.

J'ai remplacé name="image_url_'.$language['id_lang'] par name="image_url" et là ça enregistre, sauf que ça me fait n'importe quoi vu qu'on ne donne passe plus l'id de langue $language['id_lang']

Donc si je le laisse ça marche pas, et si je vire ça enregistre en double/triple/quadruple suivant le nombre de langues qu'on a
 
WRInaute passionné
Dans products_lang comme dans le tuto, en plus ça enregistre au bon endroit quand ça enregistre (pour cela il faut que je ne mette pas l'id de langue derrière le nom de mon champ)

Je met une URL dans le champ.

Si je laisse l'id_lang : Fatal error (Product -> image_url = )

Si je supprime l'id_lang et que je nomme mon champ image_url (sans le 2 derriere), ça enregistre UNE SEULE LETTRE à la place de mon url et ça me créer les lignes pour les autre langues.
 
WRInaute accro
Le prochain qui me dit que le code de Wordpress est bordélique... je le renvoie là dessus :D

:mrgreen:

Heureusement que les solutions ecommerce sur wp commencent à se développer
 
WRInaute impliqué
J'avoue qu'en me relisant... je me suis dit la même chose... :mrgreen:

Heureusement que les solutions ecommerce sur wp commencent à se développer

Je crois que je vais faire un test prochainement, ça fait un moment que ça me démange...
 
Discussions similaires
Haut