Jump to content

Passage de variable PHP d'un module vers Javascript


Recommended Posts

Bonjour,

 

J'adapte actuellement un module à partir de celui de "Homeslider"

 

Je reste confronté à la définition de variable PHP dans mon javascript qui doit s'afficher sur le front.

 

J'essaye donc de définir par exemple :

 

var scorepartner = '.$partner->score[$language['id_lang']].'

ou

var scorepartner = '$partner.score'

 

Directement dans mon fichier .php entre les différentes balises scripts.

 

 <script type="text/javascript" src="'.__PS_BASE_URI__.'js/jquery/jquery-ui.will.be.removed.in.1.6.js"></script>
  <script type="text/javascript" src="jscript/yahoo-dom-event.js"></script>
<script type="text/javascript" src="jscript/connection-min.js"></script>
<script type="text/javascript" src="jscript/animation-min.js"></script>
<script type="text/javascript" src="jscript/ratings.js"></script>

 <script type="text/javascript">

  $(function() {
var $myPartners = $("#partners");
$myPartners.sortable({
 opacity: 0.6,
 cursor: "move",
 update: function() {
  var order = $(this).sortable("serialize") + "&action=updatePartnersPosition";
  $.post("'._PS_BASE_URL_.__PS_BASE_URI__.'modules/'.$this->name.'/ajax_'.$this->name.'.php?secure_key='.$this->secure_key.'", order);
  }
 });
$myPartners.hover(function() {
 $(this).css("cursor","move");
 },
 function() {
 $(this).css("cursor","auto");
});
  });
 </script>';

private function _prepareHook()
{
 $partner2 = array(
  'width' => Configuration::get('HOMEPARTNER_WIDTH'),
  'height' => Configuration::get('HOMEPARTNERR_HEIGHT'),
  'speed' => Configuration::get('HOMEPARTNER_SPEED'),
  'pause' => Configuration::get('HOMEPARTNER_PAUSE'),
  'loop' => Configuration::get('HOMEPARTNER_LOOP'),
 );

 

 

J'ai essayé également de définir la variable dans le fichier .js de la manière suivante :

 

var scorepartner = '<?php echo "$partner.score" ; ?>';

 

Les deux premières solutions ne m'affichent plus aucun résultat sur le front (le script est mis en échec).

 

La 3ème j'ai mon code qui s'affiche sur la variable au format texte.

 

Si quelqu'un à une idée de l'endroit et de la manière dont je dois m'y prendre pour faire cette déclaration ?

 

Merci pour vos éclaircissements !

Link to comment
Share on other sites

Il s'agit juste de bouts de code où j'ai du script ;)

 

private function _prepareHook()
{
 $partner2 = array(
  'width' => Configuration::get('HOMEPARTNER_WIDTH'),
  'height' => Configuration::get('HOMEPARTNERR_HEIGHT'),
  'speed' => Configuration::get('HOMEPARTNER_SPEED'),
  'pause' => Configuration::get('HOMEPARTNER_PAUSE'),
  'loop' => Configuration::get('HOMEPARTNER_LOOP'),
 );
 $partners = $this->getPartners(true);
 if (!$partners)
  return false;
 $this->smarty->assign('block_partner_ratings_partner', $partners);
 $this->smarty->assign('block_partner_ratings', $partner2);
 return true;
}
public function hookleftColumn()
{
 if(!$this->_prepareHook())
  return;
 $this->context->controller->addJS($this->_path.'js/jquery.bxSlider.min.js');
 $this->context->controller->addCSS($this->_path.'bx_styles.css');
 $this->context->controller->addJS($this->_path.'js/homeslider.js');
 $this->context->controller->addJS($this->_path.'jscript/yahoo-dom-event.js');
 $this->context->controller->addJS($this->_path.'jscript/connection-min.js');
 $this->context->controller->addJS($this->_path.'jscript/animation-min.js');
 $this->context->controller->addJS($this->_path.'jscript/ratings.js');
 return $this->display(__FILE__, 'homepartner.tpl');
}

Link to comment
Share on other sites

Bonjour,

 

Mets SMARTY_DEBUG_CONSOLE à true dans le config.inc.php et a l'url qui affiche ton module ajoute

?SMARTY_DEBUG

(pas trouvé pour Prestashop 1.5 :huh:

 

Tu auras une pop up avec toutes les variables transmises à Smarty et tu pourras vérifier si tu passes bien les infos.

Link to comment
Share on other sites

La méthode pour avoir des variables exploitables en javascript :

 

Dans le tpl du module créé (avant ton script qui a besoin de ces variables)

<script type="text/javascript">
  var scorepartner = {$scorepartner};
</script>

Dans le php du module

$this->smarty->assign('scorepartner', $scorepartner);

C'est comme ça que prestashop transmets les tokens et autres à toutes les pages.

Link to comment
Share on other sites

Le debug est activable directement dans l'onglet performance du back sur sur la v1.5 ;)

 

Merci du tuyau en tous cas !

 

Après l'avoir fait, j'ai pas mes variables principales qui s'y affichent, comme $partner.score, $homepartner.width, $partner.url ... sauf que je les utilise sur mon fichier .tpl et j'ai le résultat demandé.

 

Le truc c'est bien pour implanté ces variables dans mon fichier .js principal pour exploiter les données et ajouter quelques infos sur l'élément qui est créer par le javascript qui je le rappel, pour le moment fonction, mais j'aimerais ajouter un titre au lien qui se forme par javascript en utilisant cette variable créée.

 

var scorepartner = '<?php echo "$partner.score" ; ?>';
...
var a = document.createElement('a');
	    a.title = scorepartner;
...

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