Modification d'un fichier JS avec les données des paramètres du plugin

9

J'ai un plugin qui, entre autres, a un fichier javascript qui nécessite quelques paramètres spécifiques à l'utilisateur. Quelle serait la meilleure façon d'obtenir ces paramètres en javascript à partir des paramètres de configuration du plugin?

En d'autres termes, si je fais en sorte que ces paramètres fassent partie de la page des paramètres où l'utilisateur peut les saisir, comment serais-je le mieux en mesure d'obtenir ces valeurs en javascript? Dois-je utiliser quelque chose pour ajouter des balises de script et les définir via PHP à chaque chargement de page? La création d'un cookie serait-elle une meilleure façon de procéder?

Ryan Elkins
la source
2
C'est une très bonne question et une que je comptais poser. Merci de le demander!
MikeSchinkel

Réponses:

10

mieux, vous utilisez les fonctions de WP pour cela, un exemple pour le multilingue:

    add_action( 'admin_enqueue_scripts', 'add_scripts' );
    function add_scripts($where) {
        wp_localize_script( 'post2media', 'post2media_strings', $this->localize_vars() );
    }
    function localize_vars() {

        $strings = array(
                'btntext'    => __( 'Link with post', INPSYDE_P2M_TEXTDOMAIN ),
                'txtallnone' => __( 'Include in gallery:', INPSYDE_P2M_TEXTDOMAIN ),
                'txtall'     => __( 'All', INPSYDE_P2M_TEXTDOMAIN ),
                'txtnone'    => __( 'None', INPSYDE_P2M_TEXTDOMAIN ),
                'ttlcb'      => __( 'Include image in this gallery', INPSYDE_P2M_TEXTDOMAIN )
            );

        return $strings;
    }

utilisez ceci dans le fichier js:

jQuery(function ($) {
buttonaddfunc = function() {
    btntext = post2media_strings.btntext;

    reg = /\d+/;
    $( '.savesend > .button' ) . each( function() {
        inputname = $( this ) . attr( 'name' );
        number = reg . exec( inputname );
        $( this ) . after( '<input type="submit" value="' + btntext + '" name="link[' + number + ']" class="button">' );
    } );
    $( '.describe-toggle-on' ).unbind( 'click', buttonaddfunc );
};
$( '.describe-toggle-on' ).bind( 'click', buttonaddfunc );

});

Voir aussi le post d'Otto

bueltge
la source
Je n'ai pas vraiment bien compris votre code mais j'ai trouvé le lien très utile.
Ryan Elkins
1
C'est vraiment excellent, merci! Je me demande comment faire cela depuis très longtemps; Merci! J'avais voulu le demander sur la liste des wp-hackers mais je ne l'ai jamais fait. Merci encore.
MikeSchinkel
1
Vous pouvez voir sur mon dernier plugin post2media ( wordpress.org/extend/plugins/post2media ) pour voir un exemple sur le plugin live; le plugin n'a pas tellement de source et je pense que c'est génial pour lire la source et comprendre la solution.
bueltge
1
Voici un exemple plus simple qui le ramène
Viper007Bond
1

Il y a deux façons de procéder, l'une que j'ai déjà faite, l'autre que je n'ai pas, mais que j'ai utilisée pour les fichiers de configuration XML.

La première consiste à inclure les variables dans une balise de script à l'intérieur de l'en-tête ou du pied de page WP, avant la balise de script dans laquelle vous incluez votre fichier JS, par exemple:

<script type="text/javascript">
    var test = "<?php echo "hello world"; /* the relevant PHP code to echo the data you require */ ?>";
    var slider_type = "<?php echo "nivo"; /* same again */ ?>";
</script>
<script type="text/javascript" src="<?php bloginfo("template_url"); ?>/js/your_js_here"></script>

L'autre alternative serait d'inclure le JS à l'intérieur d'un fichier PHP qui est inclus à l'intérieur d'une balise de script.

<script type="text/javascript" src="<?php bloginfo('template_url'); ?>/javascripts.php"></script>

À l'intérieur de ce fichier, vous incluriez votre javascript et, comme PHP le ferait, vous pourriez inclure les appels PHP de la même manière que ci-dessus, en faisant simplement écho aux données / options dont vous avez besoin. Une chose à noter est que vous devrez peut-être définir les en-têtes pour la sortie en tant que text/javascript.

Personnellement, je préfère de loin la première méthode, et c'est ce que j'utilise lorsque j'ai des paramètres modifiables par l'utilisateur qui affectent les fichiers javascript.

personne
la source
Beau résumé. C'est exactement ce que je fais. OTOH, @bueltge a la réponse que nous cherchions probablement tous; Je sais que je l'ai.
MikeSchinkel