Jump to content

Afficher des données issues d'une table dans shopping-cart-product-line.tpl [Résolu]


Recommended Posts

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 by touslesitesauto (see edit history)
Link to comment
Share on other sites

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

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 by touslesitesauto (see edit history)
Link to comment
Share on other sites

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

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 by touslesitesauto (see edit history)
Link to comment
Share on other sites

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

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 :huh2:

 

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

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

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

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...