Pauline Ghiazza Posted March 21, 2012 Share Posted March 21, 2012 Bonjour, Je suis actuellement en train d'adapter le slider DDLX à mes besoins, et je rencontre un souci. Mon objectif est simple : ajouter un lien au clic sur mes images. Jusque là rien de bien sorcier, il me suffit de récupérer le lien stocké dans ma BDD, ce qui marche très bien pour l'instant. En revanche, dès que j'essaie d'associer ces variables avec Smarty pour les afficher dans mon tpl, plus rien ne fonctionne. Mon code php (tout en bas, la fonction transfertLiens() ) : unction transfertLiens() { global $smarty; $image1 = Db::getInstance()->ExecuteS("SELECT link FROM ps_slider_module WHERE id=1")); $image2 = Db::getInstance()->ExecuteS("SELECT link FROM ps_slider_module WHERE id=2")); $image3 = Db::getInstance()->ExecuteS("SELECT link FROM ps_slider_module WHERE id=3")); $image4 = Db::getInstance()->ExecuteS("SELECT link FROM ps_slider_module WHERE id=4")); $smarty->assign('link1', $image1[0]['link']); $smarty->assign('link2', $image1[1]['link']); $smarty->assign('link3', $image1[2]['link']); $smarty->assign('link4', $image1[3]['link']); } /*###################################################################*/ function hookHome($params) { $this->transfertLiens(); return $this->display(__FILE__, 'ddlxslider.tpl'); } Mon fichier TPL : <a href="{link1}" ><img src="{$base_dir}modules/DDLX_Slider_Free/images/1.jpg" alt="" /></a> (Oui je sais, ma fonction est codée salement, mais c'était juste pour le test ). Merci d'avance pour votre aide, je me tire les cheveux depuis 3 heures maintenant sur ce cas. Link to comment Share on other sites More sharing options...
neodominique Posted March 21, 2012 Share Posted March 21, 2012 Et en mettant ce code là : global $smarty; $smarty->assign('link1', 'test'); $smarty->assign('link2', $image2->link); $smarty->assign('link3', $image3->link); $smarty->assign('link4', $image4->link); dans ta function function hookHome($params) ?? toujours rien Link to comment Share on other sites More sharing options...
neodominique Posted March 21, 2012 Share Posted March 21, 2012 On peut pas édité notre post ? EDIT : D'ailleurs, tu devrais utiliser ces bonnes pratiques : http://www.prestashop.com/blog/article/les_bonnes_pratiques_de_la_classe_db_sur_prestashop_14/ Link to comment Share on other sites More sharing options...
Pauline Ghiazza Posted March 21, 2012 Author Share Posted March 21, 2012 Merci de ta réponse. En effet, çà ne fonctionne pas mieux en mettant mes assign dans le hookHome. Pour ce qui est de ton edit : Oui je sais, ma fonction est codée salement, mais c'était juste pour le test ). J'avais prévenu . Sinon, tu peux éditer ton post en cliquant sur edit, dans le footer de chaque post. Link to comment Share on other sites More sharing options...
neodominique Posted March 21, 2012 Share Posted March 21, 2012 Tu n'as pas ajouté ça après l'installe du module ? D'ailleurs, l'install se passe bien ? Il me semble qu'il faut réinstaller à chaque fois qu'on veux utiliser un hook ?! D'ailleurs, $smarty->display ne fonctionne pas mieux ? Ah effectivement, pour l'édit ^^ (marchi) Link to comment Share on other sites More sharing options...
Broceliande Posted March 21, 2012 Share Posted March 21, 2012 Bonjour, Je suis actuellement en train d'adapter le slider DDLX à mes besoins, et je rencontre un souci. Mon objectif est simple : ajouter un lien au clic sur mes images. Jusque là rien de bien sorcier, il me suffit de récupérer le lien stocké dans ma BDD, ce qui marche très bien pour l'instant. En revanche, dès que j'essaie d'associer ces variables avec Smarty pour les afficher dans mon tpl, plus rien ne fonctionne. Mon code php (tout en bas, la fonction transfertLiens() ) : http://pastebin.com/K3h2fDy0 Mon fichier TPL : http://pastebin.com/tLfRRLVA (Oui je sais, ma fonction est codée salement, mais c'était juste pour le test ). Merci d'avance pour votre aide, je me tire les cheveux depuis 3 heures maintenant sur ce cas. Bon je commence par ce qui me saut le plus aux yeux: Tu peux pas commenter la globale smarty dans ta méthode transfertLiens() Tu en as véritablement besoin .... donc function transfertLiens() { global $smarty; ...... ensuite $image1 = mysql_fetch_object(mysql_query("SELECT link FROM ps_slider_module WHERE id=1")); Je suis pas certain qu'une liaison soit initialisée et laissée active lors de ton appel. Tu peux vérifier avec un var_dump mais si ça se trouve $image1 est null et donc tu peux assigner ce que tu veux , smarty va afficher du rien puisque null . Dans l'environnement presta , la bonne méthode pour éxécuter ta requête est : $image1 = Db::getInstance()->ExecuteS("SELECT link FROM ps_slider_module WHERE id=1")); Bon là t'auras pas un objet mais un tableau associatif , ce qui change pas grand chose , tu récupère ta valeur et tu l'assignes ainsi : $smarty->assign('link1', $image1[0]['link']); ensuite ce qui me chagrine dans ton code c'est que je vois pas d'appel à transfertLiens() ... faut au moins le faire dans le hook , sinon pas d'assignation : function hookHome($params) { $this->transfertLiens(); return $this->display(__FILE__, 'ddlxslider.tpl'); } Link to comment Share on other sites More sharing options...
Broceliande Posted March 21, 2012 Share Posted March 21, 2012 Une petite remarque toutefois : je ne suis pas certain que DDLX soit enchanté de te voir ainsi publier le fichier du module en entier ... tu ferais bien de ne garder que les lignes génériques que tu as toi même modifié ... Link to comment Share on other sites More sharing options...
Pauline Ghiazza Posted March 22, 2012 Author Share Posted March 22, 2012 Merci de vos réponses. Broceliande : Tu peux pas commenter la globale smarty dans ta méthode transfertLiens() Elle était ici commentée parce que j'ai fais un nombre incalculable de tests en tout genre, mais j'avais testé avec bien entendu. $image1=Db::getInstance()->ExecuteS("SELECT link FROM ps_slider_module WHERE id=1")); Merci du tuyau, je ne connais pas très bien la POO en Php . $this->transfertLiens(); J'avais également essayer ca, mais sans le $this. Toujours est-il que malgré les modifs cela ne fonctionne pas. Une petite remarque toutefois : je ne suis pas certain que DDLX soit enchanté de te voir ainsi publier le fichier du module en entier ... tu ferais bien de ne garder que les lignes génériques que tu as toi même modifié ... *J'ai effectivement enlevé le lien. Ca ne partait pas d'un mauvais sentiment, je voulais juste vous montrer le code dans son intégralité si jamais il y avait une erreur plus haut. Je reposte donc ici mon code lié aux assign : // Créer les variables appelées sur le TPL (liens) function transfertLiens() { $image1 = Db::getInstance()->ExecuteS("SELECT link FROM ps_slider_module WHERE id=1")); $image2 = Db::getInstance()->ExecuteS("SELECT link FROM ps_slider_module WHERE id=2")); $image3 = Db::getInstance()->ExecuteS("SELECT link FROM ps_slider_module WHERE id=3")); $image4 = Db::getInstance()->ExecuteS("SELECT link FROM ps_slider_module WHERE id=4")); global $smarty; $smarty->assign('link1', $image1[0]['link']); $smarty->assign('link2', $image1[1]['link']); $smarty->assign('link3', $image1[2]['link']); $smarty->assign('link4', $image1[3]['link']); } /*###################################################################*/ function hookHome($params) { $this->transfertLiens(); return $this->display(__FILE__, 'ddlxslider.tpl'); } Cette fois-ci, le module plante sans même que je ne rajoue mon href="{link1}" dans mon tpl. Que faire ? Merci d'avance. EDIT : Je crois avoir cerné l'origine du problème en ayant commenté chaque ligne tout à tour. A priori, ce sont mes 4 lignes de requêtes qui ne passent pas. J'ai également essayé avec un $smarty->assign('link1', 'test'); qui certes, qui plante une fois que j'ajoute {link1} dans mon href. Link to comment Share on other sites More sharing options...
Pauline Ghiazza Posted March 22, 2012 Author Share Posted March 22, 2012 Bon, je vais éviter un nouvel edit. En fait je suis juste bigleuse, j'avais oublié la dernière parenthèse dans ma requête. J'avais également oublié d'appeller mon assign avec le "$". Donc là tout fonctionne . Merci beaucoup à vous deux de m'avoir aidé. Link to comment Share on other sites More sharing options...
Broceliande Posted March 22, 2012 Share Posted March 22, 2012 Bon, je vais éviter un nouvel edit. En fait je suis juste bigleuse, j'avais oublié la dernière parenthèse dans ma requête. J'avais également oublié d'appeller mon assign avec le "$". Donc là tout fonctionne . Merci beaucoup à vous deux de m'avoir aidé. oui j'allais le dire pour ton appel : variable smarty = $ mais t'as une autre incohérence dans ton code ainsi modifié : $smarty->assign('link1', $image1[0]['link']); $smarty->assign('link2', $image1[1]['link']); $smarty->assign('link3', $image1[2]['link']); $smarty->assign('link4', $image1[3]['link']); ^ça c'est pas bon du tout , tu devrais avoir : $smarty->assign('link2', $image1[0]['link']); $smarty->assign('link2', $image2[0]['link']); $smarty->assign('link3', $image3[0]['link']); $smarty->assign('link4', $image4[0]['link']); Link to comment Share on other sites More sharing options...
Pauline Ghiazza Posted March 23, 2012 Author Share Posted March 23, 2012 Oui, j'ai oublié de préciser que j'avais changé cela aussi. Merci ! Link to comment Share on other sites More sharing options...
zouhairHajji Posted August 25, 2015 Share Posted August 25, 2015 essaye ceci : $this->context->smarty->assign('code', "x45f454fe5f"); Link to comment Share on other sites More sharing options...
J. Danse Posted August 25, 2015 Share Posted August 25, 2015 Bonjour zouhairHajji, C'est gentil de votre part mais le dernier message date de mars 2012. Le sujet est résolu, par ailleurs. Je clos celui-ci. A l'avenir, évité de déterrer un sujet de la sorte, merci. Link to comment Share on other sites More sharing options...
Recommended Posts