florent33 Posted September 25, 2012 Share Posted September 25, 2012 (edited) Bonjour à tous, Grâce à la nouvelle version de prestashop, je cherche à créer une boutique par département en France. Mon objectif est de les répertorier sur une carte de France avec la possibilité de cliquer sur les départements pour lesquels les boutiques sont activées. J'ai déjà réalisé la carte en elle-même (en JS). Je souhaiterais maintenant automatiser l'affichage en fonction de la valeur de l'attribut 'active' de chaque boutique de la table ps_shop. J'ai donc commencé par créé la classe CarteFrance : <?php if (!defined('_PS_VERSION_')) exit; class CarteFrance extends Module { public function __construct() { $this->name = 'CarteFrance'; $this->tab = 'front_office_features'; $this->version = 1.0; $this->author = 'author'; $this->need_instance = 0; parent::__construct(); $this->displayName = $this->l('Carte de France'); $this->description = $this->l('Carte de France répertoriant toutes les boutiques'); } public function install() { if (parent::install() == false OR !$this->registerHook('displayHome')) return false; return true; } private function _getShopOn() { $results = Db::getInstance()->ExecuteS(' SELECT * FROM '._DB_PREFIX_.'shop WHERE active = true'); $this->smarty->assign('shopOn', $results); return true; } private function _getShopOff() { $results = Db::getInstance()->ExecuteS(' SELECT name FROM '._DB_PREFIX_.'shop WHERE active = false'); $this->smarty->assign('shopOff', $results); return true; } public function hookDisplayHome() { if(!$this->_getShopOn()) return; if(!$this->_getShopOff()) return; return $this->display(__FILE__, 'CarteFrance.tpl'); } } ?> Puis mon fichier tpl : <script src="{$smarty.const._MODULE_DIR_}CarteFrance/js/test.js" charset="utf-8" ></script> Et voici le contenu du fichier test.js qui est appelé dans mon tpl : <script type="text/javascript"> window.onload = function(){ for (var i=0; i<{shopOn.length}; i++) { alert({$shopOn[i].name}); } }; </script> Pour le moment, j'essaie simplement de récupérer le nom des boutiques activées dans le fichier js mais je n'y arrive pas (en php aucun soucis, j'arrive bien à tout afficher). Voilà tout, j'espère avoir bien expliqué mon problème. Merci d'avance pour votre aide Edited September 25, 2012 by florent33 (see edit history) Link to comment Share on other sites More sharing options...
florent33 Posted September 25, 2012 Author Share Posted September 25, 2012 up Link to comment Share on other sites More sharing options...
Christophe W. Posted September 25, 2012 Share Posted September 25, 2012 Salut, Je pense que les variables ne passent pas d'un template vers un fichier JS. Essayes en mettant ton script JS dans ton fichier de template pour voir. Link to comment Share on other sites More sharing options...
florent33 Posted September 25, 2012 Author Share Posted September 25, 2012 Merci pour ta réponse. La variable est envoyée par la classe et non par le tpl. En somme, je cherche simplement à afficher dans une alerte le nom des boutiques activées. J'ai déjà essayé d'inclure le js dans mon tpl mais d'autres soucis interviennent. Link to comment Share on other sites More sharing options...
jmaumene Posted September 25, 2012 Share Posted September 25, 2012 (edited) Tu melanges le JS et smarty: $this->smarty->assign('shopOn', $results); tu définie une variable smarty shopOn mais il faut lui faire un traitement smarty et pas javascript Essai plutot : $this->smarty->assign('shopOn',json_encode($result); <script type="text/javascript"> shopOn = {$shopOn} window.onload = function(){ for (var i=0; i<shopOn.length; i++) { alert({shopOn[i].name}); } }; </script> Edited September 25, 2012 by webaide (see edit history) Link to comment Share on other sites More sharing options...
florent33 Posted September 25, 2012 Author Share Posted September 25, 2012 Voici ce que me retourne Firebug : Link to comment Share on other sites More sharing options...
jmaumene Posted September 25, 2012 Share Posted September 25, 2012 (edited) il faut enlever le {literal} et corriger le code Edited September 25, 2012 by webaide (see edit history) Link to comment Share on other sites More sharing options...
florent33 Posted September 25, 2012 Author Share Posted September 25, 2012 même erreur ... Link to comment Share on other sites More sharing options...
jmaumene Posted September 25, 2012 Share Posted September 25, 2012 (edited) vous pouvez me copier le code affiché dans la source html Edited September 25, 2012 by webaide (see edit history) Link to comment Share on other sites More sharing options...
florent33 Posted September 25, 2012 Author Share Posted September 25, 2012 Voila le html : <script src="/modules/CarteFrance/js/test.js" charset="utf-8"> <script type="text/javascript"> shopOn = {$shopOn}; window.onload = function(){ for (var i=0; i<shopOn.length; i++) { alert({shopOn[i].name}); } }; </script> </script> Link to comment Share on other sites More sharing options...
jmaumene Posted September 25, 2012 Share Posted September 25, 2012 (edited) il doit y avoir un {literal} dans le TPl qu'il faut enlever, car il ne devrai pas afficher shopOn = {$shopOn} mais shopOn = un truc comme ca : [{"id":"1","name":"test"},{"id":"2","name":"test2"}] et il faut enlever les acollades dans le alert et on ne met pas un <script> dans une autre balise <script> Edited September 25, 2012 by webaide (see edit history) Link to comment Share on other sites More sharing options...
florent33 Posted September 25, 2012 Author Share Posted September 25, 2012 Pour que shopOn m'affiche un truc comme tu as dit, on est obligé de suivre le conseil de Christophe W., c'est à dire mettre le js dans le tpl. J'obtiens alors le nom des boutiques activées ... Un grand merci à vous 2 ! Je continue le développement de ma carte ... Je posterai le rendu final. Link to comment Share on other sites More sharing options...
jmaumene Posted September 25, 2012 Share Posted September 25, 2012 Je pensais que c'etait le cas, en effet, mettre le code dans le JS ne pouvait pas marcher puisqu'on utilise une variable smarty. 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