web-dev-qa-db-fra.com

Passer var au script jQuery

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.

3
n.h.

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.

4

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

4
Robbie Jackson

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

1
Lodder