Jump to content

Carte répertoriant les boutiques activées


florent33
 Share

Recommended Posts

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 by florent33 (see edit history)

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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 by webaide (see edit history)

Share this post


Link to post
Share on other sites

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>

Share this post


Link to post
Share on other sites

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 by webaide (see edit history)

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
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
 Share

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More