gonado Posted July 11, 2011 Share Posted July 11, 2011 Bonjour,Voilà j'ai un souci avec un template smarty que je fais afficher en Ajax.Je m'explique j'ai sur une page un lien qui au clic lance en ajax un template smarty, mais j'ai beau être en FR ou EN ou ES il m'affiche toujours ce template en EN (alors que quand j'affiche le {$lang_iso} dans le template, il m'affiche bien la bonne langue en cours).Voilà le code JS : $(".link_add_collection").click(function() { $("body").append(""); var htmlBefore = ""; var htmlAfter = ""; var o = $(this); var lan = o.attr("rel"); var language = (lan==undefined || lan=='' || languageCollection[lan]==undefined) ? 1 : lan; $.ajax({ type: "GET", url: o.attr("href")+"&ajax_mode=true", success: function(data){ htmlBefore += ''; htmlBefore += ''; htmlBefore += ''; htmlBefore += ''; htmlBefore += ''; htmlBefore += ''; htmlBefore += ''; htmlBefore += ''; htmlBefore += ''+languageCollection[language].title+'X'; htmlBefore += ''; htmlBefore += ''; htmlAfter += ''; $("#popup_collection").append(htmlBefore+data+htmlAfter); } }); return false; }); Et le code coté serveur : require_once(dirname(__FILE__).'/config/config.inc.php'); require_once(dirname(__FILE__).'/init.php'); $output = ""; global $smarty; $product = new Product($idProduct, true, intval($cookie->id_lang)); $rewrited_url = $link->getProductLink($product->id, $product->link_rewrite); $images = $product->getImages(intval($cookie->id_lang)); $productImages = array(); foreach ($images AS $k => $image) { if ($image['cover']) { $cover = $image; $cover['id_image'] = intval($product->id).'-'.$cover['id_image']; $cover['id_image_only'] = intval($image['id_image']); } $productImages[intval($image['id_image'])] = $image; } $src_img = $link->getImageLink($product->link_rewrite, $cover['id_image'], 'slider_thumb_pdt'); $smarty->assign(array( 'rewrited_url' => $rewrited_url, 'src_img' => $src_img, 'product' => $product, 'base_uri' => __PS_BASE_URI__)); $output = $smarty->fetch(_PS_THEME_DIR_.'collection_popup.tpl'); if ($samepdtadd) $output = $smarty->fetch(_PS_THEME_DIR_.'collection_popup_existant.tpl'); echo $output; J'ai aussi bien traduit la page dans l'administration !Voilà j'espère que c'était compréhensible :-)Merci de m'éclairer !Bye Bye Link to comment Share on other sites More sharing options...
Broceliande Posted July 11, 2011 Share Posted July 11, 2011 Salut , la réponse est juste ici : $product = new Product($idProduct, true, intval($cookie->id_lang)); $cookie est null , car tu n'as pas placé un global $cookie; au début de ton script ...en résumé : ta 5 eme ligne devrait être : global $smarty, $cookie; et ça devrait rouler .... sauf erreur ou omission ... Link to comment Share on other sites More sharing options...
gonado Posted July 11, 2011 Author Share Posted July 11, 2011 Merci pour la réponse :-)Mais en fait les variables globales de mon fichier sont au début du fichier require_once(dirname(__FILE__).'/config/config.inc.php'); require_once(dirname(__FILE__).'/init.php'); global $smarty, $cookie; Je n'avais montré qu'une partie du code mais j'ai l'impression qu'il récupère bien la langue dans le template car si j'affiche {lang_iso} il me sort le bon code correspond, c'est quand même bizarre ! Je sais pas trop j'avoue ... Link to comment Share on other sites More sharing options...
Broceliande Posted July 11, 2011 Share Posted July 11, 2011 Merci pour la réponse :-)Mais en fait les variables globales de mon fichier sont au début du fichier require_once(dirname(__FILE__).'/config/config.inc.php'); require_once(dirname(__FILE__).'/init.php'); global $smarty, $cookie; Je n'avais montré qu'une partie du code mais j'ai l'impression qu'il récupère bien la langue dans le template car si j'affiche {lang_iso} il me sort le bon code correspond, c'est quand même bizarre ! Je sais pas trop j'avoue ... ben je veux bien te croire , mais tu as bien montré ça : global $smarty; et je n'y trouve pas du tout la globale cookie... Donc tu as peut être montré une mauvaise version du code mais pas juste une partie , hein ? Alors bon du coup , je vois plus trop , mais juste une question : pourquoi $smarty->fetch() au lieu de $smarty->display() ?? Link to comment Share on other sites More sharing options...
Broceliande Posted July 11, 2011 Share Posted July 11, 2011 Adit : parce que je n'ai pas été très clair , mais $smarty->fetch() attend 3 paramètres en théorie , et ne sert pas à plus de choses que ça dans ton cas car : $output = $smarty->display(...) ; echo $output; est ce que l'on utilise plus généralement , du coup sans tester ni avoir le temps de le faire , c'est ce qui me vient ... Link to comment Share on other sites More sharing options...
gonado Posted July 11, 2011 Author Share Posted July 11, 2011 J'utilisais le fetch car sinon il m'affichait les deux templates dans la variable $output.Par contre ce que je viens de me rendre compte et merci c'Est que en remplacant fetch par display il m'affiche la bonne langue mais il m'affiche les 2 templates à la suite : $output = $smarty->display(_PS_THEME_DIR_.'collection_popup.tpl'); if ($samepdtadd) $output = $smarty->display(_PS_THEME_DIR_.'collection_popup_existant.tpl'); echo $output; Alors que si $samepdtadd est true il devrait écraser $output par l'autre template ...Mais cool merci je comprends pourquoi maintenant :-) Link to comment Share on other sites More sharing options...
gonado Posted July 11, 2011 Author Share Posted July 11, 2011 bon finalement je l'ai écris comme ça if ($samepdtadd) $output = $smarty->display(_PS_THEME_DIR_.'collection_popup_existant.tpl'); else $output = $smarty->display(_PS_THEME_DIR_.'collection_popup.tpl'); Mais je voulais pas faire de else et j'aime bien comprendre pourquoi ca fonctionne pas comme c'était avant ... mais en tout cas merci du coup de main ! Link to comment Share on other sites More sharing options...
gonado Posted July 11, 2011 Author Share Posted July 11, 2011 et avec le fetch ca avait au moins le mérite de marcher sans le else mais je perdais les infos de langue ! Link to comment Share on other sites More sharing options...
Broceliande Posted July 11, 2011 Share Posted July 11, 2011 hmm , là le truc c'est que je trouve aucune référence à $samepdtadd .... dans ton php , avant son affichage ...Elle devrait donc même être toute le temps à false , encore que ... Bon bref il te reste à corriger sa valeur , ici il est clair qu'elle est tout le temps à true ... et je te demande même pas à quoi elle te sert lol Link to comment Share on other sites More sharing options...
gonado Posted July 11, 2011 Author Share Posted July 11, 2011 la variable est affecté avant if ($add and isset($idProduct)) { if ($tabCollection) $tabCollectionArray = object_to_array(json_decode($tabCollection)); else $tabCollectionArray = array(); $samepdtadd = false; foreach($tabCollectionArray as $key=>$val) { if($key == intval($idProduct)) $samepdtadd = true; } if (!$samepdtadd) { $tabCollectionArray[intval($idProduct)] = date('Y-m-d H:i:s'); //On met à jour la table ps_collection_product Db::getInstance()->AutoExecute(_DB_PREFIX_.'collection_product', array( 'id_guest' => intval($cookie->id_guest), 'id_product' => intval($idProduct), 'date_add' => pSql(date('Y-m-d H:i:s')) ), 'INSERT' ); } $cookie->__set("collection", json_encode($tabCollectionArray)); arsort($tabCollectionArray); $idsProduct = array(); foreach($tabCollectionArray as $key=>$val) { $idsProduct[] = $key; } $idsProducts = implode(",", $idsProduct); $cookie->__set("collectionIds", $idsProducts); } mais sans ça de toute façon même si la variable est à true ca devrait mettre que le output de collection_popup_existant.tpl et si false mettre que le output de collection_popup.tpl et pas les deux ! Link to comment Share on other sites More sharing options...
Broceliande Posted July 11, 2011 Share Posted July 11, 2011 Ah ben oui effectivement , l'un ou l'autre mais pas les deux en même temps ....Vide donc ton cache juste pour voir : /tools/smarty/compile , /cache , / themes/nomdutheme/cache , juste par acquis de connscience mais bon ... Là à cette heure je sais plus rien Link to comment Share on other sites More sharing options...
gonado Posted July 11, 2011 Author Share Posted July 11, 2011 j'ai essayé mais sans succès :-(Pas grave je vais me coucher ... j'ai trouvé une solution grâce à toi et pour le reste je regarderais demain merci merci merci et bonne nuit :-) Link to comment Share on other sites More sharing options...
Broceliande Posted July 11, 2011 Share Posted July 11, 2011 Ah ben oui effectivement , l'un ou l'autre mais pas les deux en même temps ....Vide donc ton cache juste pour voir : /tools/smarty/compile , /cache , / themes/nomdutheme/cache , juste par acquis de connscience mais bon ... Là à cette heure je sais plus rien Ne cherche pas .. je m'édite c'est pas bon signe lol ...L'appel à ->display suffit à déclancher la sortie .... ça explique que tu ais un affichage double .L'usage de fetch était la bonne approche .Sauf que , essaye plûtot comme ça : $output=Module::display('/pathtomontpl/montheme.tpl') ; plutôt que d'appeler la fonction fetch directement ... Link to comment Share on other sites More sharing options...
gonado Posted July 12, 2011 Author Share Posted July 12, 2011 Alors le problème avec ce code : $output=Module::display('/pathtomontpl/montheme.tpl') ; C'est que ca met positionne directement le template dans le dossier des modules, mais finalement ca m'a aidé et j'ai trouvé comment faire alors voilà si ca peut en intéresser d'autres : $output = display(_PS_THEME_DIR_.'collection_popup.tpl'); if ($samepdtadd) $output = display(_PS_THEME_DIR_.'collection_popup_existant.tpl'); echo $output; et j'ai crée la fonction display sur ma page : function display($resource_name, $cache_id = null, $compile_id = null) { global $smarty; $smarty->currentTemplate = substr(basename($resource_name), 0, -4); return $smarty->fetch($resource_name, $cache_id, $compile_id, false); } Car la fonction display de Smarty.class.php renvoi automatiquement l'affichage sans choisir de pouvoir stocker dans une variable ou pas.Donc voilà problème résolu et de la bonne manière je pense :-)merci broceliande 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