Modifica di un file JS con i dati dalle impostazioni del plugin


9

Ho un plugin che, tra le altre cose, ha un file javascript che richiede alcune impostazioni specifiche dell'utente. Quale sarebbe il modo migliore per ottenere queste impostazioni in JavaScript dai parametri delle impostazioni del plugin?

In altre parole, se inserisco quelle impostazioni nella pagina delle impostazioni in cui l'utente può inserirle, come potrei essere in grado di ottenere quei valori in javascript? Dovrei usare qualcosa per aggiungere alcuni tag di script e impostarli tramite PHP ad ogni caricamento della pagina? L'impostazione di un cookie sarebbe un modo migliore per farlo?


2
Questa è davvero una bella domanda che ho intenzione di porre. Grazie per averlo chiesto!
MikeSchinkel,

Risposte:


10

meglio è, usi le funzioni di WP per questo, un esempio per multilingua:

    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;
    }

usa questo nel file 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 );

});

Vedi anche il post di Otto


Non ho capito bene il tuo codice ma ho trovato il link molto utile.
Ryan Elkins,

1
Questo è davvero eccellente, grazie! Mi chiedo come farlo da molto tempo; grazie! Avrei voluto chiederlo nella lista dei wp-hacker ma non l'ho mai fatto. Grazie ancora.
MikeSchinkel,

1
Puoi vedere sul mio ultimo plugin post2media ( wordpress.org/extend/plugins/post2media ) per vedere un esempio sul plugin live; il plugin non ha molta fonte e penso che questo sia ottimo per la fonte di lettura e capire la soluzione.
bueltge

1
Ecco un esempio più semplice che arriva alle basi (hai molto da fare nel tuo esempio): prelovac.com/vladimir/…
Viper007Bond

1

Ci sono un paio di modi in cui potresti farlo, uno dei quali ho già fatto prima, l'altro che non ho fatto, ma ho usato per i file di configurazione XML.

Il primo è quello di includere le variabili in un tag di script all'interno dell'intestazione o del piè di pagina WP, prima del tag di script in cui si include il file JS, ad esempio:

<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'altra alternativa sarebbe quella di includere JS all'interno di un file PHP che è incluso all'interno di un tag script.

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

All'interno di questo file dovresti includere il tuo javascript e, come PHP lo analizzerebbe, saresti in grado di includere le chiamate PHP in modo simile a quello sopra, semplicemente facendo eco ai dati / opzioni richiesti. Una cosa da notare è che potrebbe essere necessario impostare le intestazioni per l'output come text/javascript.

Personalmente preferisco di gran lunga il primo metodo, ed è quello che uso quando ho impostazioni modificabili dall'utente che influiscono sui file javascript.


Bel commento. Questo è esattamente quello che ho fatto. OTOH, @bueltge ha la risposta che probabilmente tutti stavamo cercando; So di averlo fatto.
MikeSchinkel,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.