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

Discussion dans 'e-commerce' créé par lambi521, 23 Avril 2012.

  1. lambi521
    lambi521 WRInaute passionné
    Inscrit:
    15 Juin 2010
    Messages:
    1 476
    J'aime reçus:
    0
    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 ?
     
  2. Marie-Aude
    Marie-Aude WRInaute accro
    Inscrit:
    5 Juin 2006
    Messages:
    16 368
    J'aime reçus:
    2
    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
     
  3. lambi521
    lambi521 WRInaute passionné
    Inscrit:
    15 Juin 2010
    Messages:
    1 476
    J'aime reçus:
    0
    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 ?
     
  4. franckM
    franckM WRInaute impliqué
    Inscrit:
    15 Novembre 2007
    Messages:
    808
    J'aime reçus:
    0
    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.
     
  5. lambi521
    lambi521 WRInaute passionné
    Inscrit:
    15 Juin 2010
    Messages:
    1 476
    J'aime reçus:
    0
    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}">
     
  6. franckM
    franckM WRInaute impliqué
    Inscrit:
    15 Novembre 2007
    Messages:
    808
    J'aime reçus:
    0
    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.
     
  7. lambi521
    lambi521 WRInaute passionné
    Inscrit:
    15 Juin 2010
    Messages:
    1 476
    J'aime reçus:
    0
    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
     
  8. lambi521
    lambi521 WRInaute passionné
    Inscrit:
    15 Juin 2010
    Messages:
    1 476
    J'aime reçus:
    0
    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
     
  9. franckM
    franckM WRInaute impliqué
    Inscrit:
    15 Novembre 2007
    Messages:
    808
    J'aime reçus:
    0
    Ton champs supplémentaire, tu l'as inséré dans quelle table ?
     
  10. lambi521
    lambi521 WRInaute passionné
    Inscrit:
    15 Juin 2010
    Messages:
    1 476
    J'aime reçus:
    0
    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.
     
  11. franckM
    franckM WRInaute impliqué
    Inscrit:
    15 Novembre 2007
    Messages:
    808
    J'aime reçus:
    0
    Tu as quelle version de Prestashop ?
     
  12. lambi521
    lambi521 WRInaute passionné
    Inscrit:
    15 Juin 2010
    Messages:
    1 476
    J'aime reçus:
    0
    Version de Prestashop: 1.4.7.0
     
  13. franckM
    franckM WRInaute impliqué
    Inscrit:
    15 Novembre 2007
    Messages:
    808
    J'aime reçus:
    0
  14. Marie-Aude
    Marie-Aude WRInaute accro
    Inscrit:
    5 Juin 2006
    Messages:
    16 368
    J'aime reçus:
    2
    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
     
  15. franckM
    franckM WRInaute impliqué
    Inscrit:
    15 Novembre 2007
    Messages:
    808
    J'aime reçus:
    0
    J'avoue qu'en me relisant... je me suis dit la même chose... :mrgreen:

    Je crois que je vais faire un test prochainement, ça fait un moment que ça me démange...
     
  16. lambi521
    lambi521 WRInaute passionné
    Inscrit:
    15 Juin 2010
    Messages:
    1 476
    J'aime reçus:
    0
Chargement...
Similar Threads - [Prestashop] Ajout table Forum Date
[Prestashop] Comment éviter duplicate sur marketplaces ? e-commerce 16 Juillet 2018
[Prestashop] Import fichier csv de magasins e-commerce 3 Février 2015
Est-ce adapté [prestashop] e-commerce 2 Octobre 2013
[Prestashop] Un blog actif peut il influencer positivement le référencement ? e-commerce 1 Juin 2013
[Prestashop] Mises à jour courantes e-commerce 19 Mai 2013
Ajout d'un bandeau latéral... bien ou non ? Demandes d'avis et de conseils sur vos sites 11 Juillet 2020
Suffixe "Ajouté par" dans les résultats Google Référencement Google 12 Mai 2020
Ajout balise canonical et chute de positions Référencement Google 6 Mai 2020
Ajouter des lignes de rich snippet - KK Star Référencement Google 31 Mars 2020
WordPress Ajout d'un répertoire : maj du maillage interne ? Développement d'un site Web ou d'une appli mobile 9 Mars 2020
  1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies.
    Rejeter la notice