touslesitesauto Posted June 21, 2016 Share Posted June 21, 2016 (edited) Bonjour à tous, Je suis sous Prestashop 1.6.1.0 Je souhaiterai savoir comment faire (et surtout sur quels fichiers...) pour afficher des variables personnalisées, issues d'une table déjà créés par un autre développeur... au niveau de <small class="cart_ref">...</small> du fichier shopping-cart-product-line.tpl L'affichage se faisant lors du récapitulatif du panier. J'ai lu qu'il fallait créer la requête dans un contrôleur comme CartController.php ou OrderController.php etc... mais ce ne fonctionne jamais quelque soit le contrôleur ! J'ai aussi essayer dans la classe Cart.php mais ce n'est pas bon non plus ! Ma requête est la suivante : public function affiche_perso(){ $sql='SELECT * FROM `'._DB_PREFIX_.'mabaseperso` ORDER BY id_guest DESC LIMIT 0,1'; $result=Db::getInstance()->getRow($sql); $this->context->smarty->assign( array( 'var1'=>$result['var1'], 'var2'=>$result['var2'], 'var3'=>$result['var3'] ) ); return $this->display(__FILE__, 'shopping-cart-product-line.tpl'); } J'ai ensuite ajouté dans le tpl <small class="cart_ref"> {foreach from=$result} Var 1 : {$result.var1}<br /> Var 2 : {$result.var2}<br /> Var 3 : {$result.var3}<br /> {/foreach} </small> Aucun affichage sauf un petit "1" Merci pour vos bons conseils... Edited June 22, 2016 by touslesitesauto (see edit history) Link to comment Share on other sites More sharing options...
Eolia Posted June 21, 2016 Share Posted June 21, 2016 Bah il faut être un peu logique aussi^^ $this->context->smarty->assign( array( 'var1'=>$result['var1'], 'var2'=>$result['var2'], 'var3'=>$result['var3'] ) ); Signifie: j'envoie au tpl les variables var1, var2 et var3 Ensuite {foreach from=$result} Var 1 : {$result.var1}<br /> Var 2 : {$result.var2}<br /> Var 3 : {$result.var3}<br /> {/foreach} Là, c'est du grand n'importe quoi... Vous n'avez pas compris le fonctionnement de Smarty et encore moins celui des fonctions Vous avez fait un getRow() dans votre php et vous en avez extrait les 3 paires clé/valeurs donc le foreach ne sert à rien. Un foreach c'est pour extraire les données d'un tableau, là vous n'avez envoyé aucun tableau et encore moins une certaine variable $result... Ensuite, une boucle foreach ne s'écrit pas comme ça en Smarty, la syntaxe correcte est, si vous envoyez un tableau $results: {foreach from=$results key=key item=result} {$key} : {$result}<br /> {/foreach} ou {foreach $results as $key => $result} {$key} : {$result}<br /> {/foreach} si $result est aussi un tableau type key/value on peut écrire {foreach $results as $result} {$result.key} : {$result.value}<br /> {/foreach} Dans votre cas, soit vous utilisez directement les valeurs dans le tpl, vu qu vous les avez assignées {$var1}, {$var2} et {$var3} Soit vous assignez le tableau à smarty et vous utilisez un boucle foreach Mais pas les 2^^ Link to comment Share on other sites More sharing options...
touslesitesauto Posted June 21, 2016 Author Share Posted June 21, 2016 (edited) Oui c'est vrai , j'ai été un peu nul sur ce coup avec cette boucle mais parfois avec la tête dans le guidon... on ne voit même plus nos erreurs Par contre, même en mettant : Var 1 : {$var1}<br /> Var 2 : {$var2}<br /> Var 3 : {$var3}<br /> je n'ai qu'un petit "1" qui s'affiche Je pensais que l'erreur venait du chemin et j'ai donc ajouté : return $this->display(__FILE__, '/themes/montheme/shopping-cart-product-line.tpl'); mais cela ne fonctionne toujours pas Ma première question est donc : dans quel controller (ou classe) dois-je mettre mon code ? Merci encore pour vos conseils Edited June 21, 2016 by touslesitesauto (see edit history) Link to comment Share on other sites More sharing options...
Eolia Posted June 21, 2016 Share Posted June 21, 2016 ouvrez le controller cart et repérez ou sont fait les assign Mettez avant: $sql='SELECT * FROM `'._DB_PREFIX_.'mabaseperso` ORDER BY id_guest DESC LIMIT 0,1'; $result=Db::getInstance()->getRow($sql); $this->context->smarty->assign( array( 'var1'=>$result['var1'], 'var2'=>$result['var2'], 'var3'=>$result['var3'] ) ); et ne faites pas de return, il est déjà prévu^^ Link to comment Share on other sites More sharing options...
touslesitesauto Posted June 21, 2016 Author Share Posted June 21, 2016 (edited) Merci tout d'abord pour votre aide. Dans le fichier CartController.php, je n'ai trouvé aucun "...->assign.." par contre j'ai trouvé : public function init() { parent::init(); dans lequel en général, on assigne les variables et j'y ai donc inséré le bout de code juste après mais malheureusement là encore, ça ne fonctionne pas ! Je me permets de préciser que dans le gestionnaire SQL du BO, la requête donne bien un résultat et que dans mon fichier "shopping-cart-product-line.tpl" en faisant un {$result|print_r}, je n'ai absolument rien à l'affichage sauf "1" Edited June 21, 2016 by touslesitesauto (see edit history) Link to comment Share on other sites More sharing options...
Eolia Posted June 22, 2016 Share Posted June 22, 2016 Allez regarder vers la ligne 340 de ParentOrderController.php^^ Link to comment Share on other sites More sharing options...
touslesitesauto Posted June 22, 2016 Author Share Posted June 22, 2016 Merci J'ai donc installer mon code en ligne 380 après les dernières accolades de la section ... (ligne 344) // Get available cart rules and unset the cart rules already in the cart ... )); /* ligne 385 : Mon code */ $sql='SELECT * FROM `'._DB_PREFIX_.'mabaseperso` ORDER BY id_guest DESC LIMIT 0,1'; $result=Db::getInstance()->getRow($sql); $this->context->smarty->assign( array( 'var1'=>$result['var1'], 'var2'=>$result['var2'], 'var3'=>$result['var3'] ) ); /* Fin de mon code */ } mais toujours rien. Par contre, j'ai une bonne nouvelle car en faisant un {debug}... cette fois, j'ai bien mes valeurs qui apparaissent dans la liste sauf qu'elles sont toutes égales à : value = null ->nocache = false ->scope = "file: ... et donc je n'ai aucun valeur affichée Que dois-je faire afin que {$var1} et cie... me retournent leur vraie valeur ? Link to comment Share on other sites More sharing options...
Eolia Posted June 22, 2016 Share Posted June 22, 2016 mettez d($result); juste après $result=Db::getInstance()->getRow($sql); et rafraichissez la page, on aura le résultat de la requete Link to comment Share on other sites More sharing options...
touslesitesauto Posted June 22, 2016 Author Share Posted June 22, 2016 Résultat : page blanche avec un gros "END" Link to comment Share on other sites More sharing options...
Eolia Posted June 22, 2016 Share Posted June 22, 2016 Donc la requête ne ramène rien... Link to comment Share on other sites More sharing options...
touslesitesauto Posted June 22, 2016 Author Share Posted June 22, 2016 Sauf qu'en allant dans le gestionnaire SQL du BO, la requête donne bien un résultat. De plus hier, pour faire d'autres tests, j'ai créé tout bonnement une pagetest.php à la racine du site avec un Tpl du même nom dans lmon thème et les mêmes éléments et là ça marche Alors je me suis dit, tiens je vais faire un {include file="$tpl_dir./mapagetest.tpl"} dans mon shopping-cart-product-line.tpl mais là encore, ça disparait ! Enfin quoiqu'il en soit, la requête renvoie bien un résultat donc pourquoi ne s'affiche t'il pas ? il doit manquer un truc car c'est tout de même dingue... Link to comment Share on other sites More sharing options...
coeos.pro Posted June 22, 2016 Share Posted June 22, 2016 si tu fais un getrow il ne faut pas mettre LIMIT dans la requete, car il est rajouté dans la fonction getrow. Essaye avec $sql='SELECT * FROM `'._DB_PREFIX_.'mabaseperso` ORDER BY id_guest DESC'; Link to comment Share on other sites More sharing options...
Eolia Posted June 22, 2016 Share Posted June 22, 2016 Oui, pas faux j'avais zappé puisqu'il avait dit que la requete fonctionnait Link to comment Share on other sites More sharing options...
touslesitesauto Posted June 22, 2016 Author Share Posted June 22, 2016 Bingo , c'était cela ! Je suis écœuré d'avoir perdu autant de temps... d'un autre côté, je comprends mieux certaines choses... comme le Getrow qui ne renvoie qu'une seule ligne (et pourtant je l'avais déjà lu) ou encore ce gestionnaire de sql qui ne tient pas compte de "la méthode", etc... Merci encore à vous deux. Juste pour ma gouverne, pourquoi le {include file="$tpl_dir./mapagetest.tpl"} dans mon shopping-cart-product-line.tpl ne fonctionne pas ? Link to comment Share on other sites More sharing options...
coeos.pro Posted June 22, 2016 Share Posted June 22, 2016 des fois il ne faut pas grand chose pour tout bloquer. Un petit rappel sur les différentes fonctions de la db (qui sont identiques sous 1.6) https://www.prestashop.com/blog/fr/les-bonnes-pratiques-de-la-classe-db-sur-prestashop-1-5/ Juste pour ma gouverne, pourquoi le {include file="$tpl_dir./mapagetest.tpl"} dans mon shopping-cart-product-line.tpl ne fonctionne pas ? met {$tpl_dir} pour afficher le chemin et voir si il est bon Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now