Je dois passer une var php à un script jQuery. Ils sont dans des fichiers séparés, un fichier en code php et un autre fichier en scripts jQuery. Y a-t-il un moyen de le faire? J'utilise Joomla 3.4.1. Je dois juste obtenir la version de Joomla dans le script jQuery.
Javascript a des variables globales: http://www.w3schools.com/js/js_scope.asp
dans votre fichier php que vous appelez: JFactory :: getDocument (); et vous pouvez maintenant ajouter du javascript à la page en cours avec addScriptDeclaration ()
Dans cet exemple, nous déclarons une variable myJoomlaVersion
<$php
$jdocument = JFactory::getDocument();
$jversion = new JVersion();
$short = $jversion->getShortVersion();
// Add Javascript
$jdocument->addScriptDeclaration(' var myJoomlaVersion = '.$short ); ?>
Plus d'infos sur "Insérer des scripts inline depuis un PHP") https://docs.joomla.org/J3.x:Adding_JavaScript_and_CSS_to_the_page
Vous pouvez maintenant utiliser cette variable dans votre javascript.
Après avoir répondu à cette question, Joomla a introduit dans la version 3.5 un autre moyen de transmettre des variables à javascript, à l'aide de la méthode addScriptOptions()
de la classe Joomla Document
. J'ajoute donc ceci pour que les autres personnes intéressées par cette question soient informées de cette alternative.
Dans votre fichier php, vous pouvez écrire par exemple:
$phpvars = array('alpha' => 1, 'beta' => 'test', 'gamma' => null);
$document = JFactory::getDocument();
$document->addScriptOptions('myvars', $phpvars);
Ensuite, dans votre javascript, vous pouvez récupérer les valeurs en utilisant:
var jsvars = Joomla.getOptions('myvars');
console.log(jsvars);
qui affichera sur la console du navigateur la structure Javscript Object:
{alpha: 1, beta: "test", gamma: null}
Vous pouvez évidemment utiliser cela plusieurs fois dans votre code, en utilisant différentes clés (la clé étant 'myvars'
dans l'exemple ci-dessus).
Vous pouvez y parvenir en utilisant une fonction globale.
Donc, dans votre fichier JS, vous feriez quelque chose comme ça:
<script>
var myFunction;
jQuery(document).ready(function($){
myFunction = function(version)
{
console.log(version);
// You have the version here
}
});
</script>
Ensuite, dans votre default.php, vous pouvez obtenir la version de Joomla et appeler la fonction de la manière suivante:
<?php
$jversion = new JVersion();
$short = $jversion->getShortVersion();
?>
<script>
jQuery(document).ready(function($){
myFunction('<?php echo $short; ?>');
});
</script>
J'espère que cela t'aides