Memodifikasi file JS dengan data dari pengaturan plugin

9

Saya memiliki plugin yang, antara lain, memiliki file javascript yang memerlukan beberapa pengaturan spesifik pengguna. Apa cara terbaik untuk memasukkan pengaturan tersebut ke javascript dari parameter pengaturan plugin?

Dengan kata lain, jika saya menjadikan pengaturan itu bagian dari halaman pengaturan di mana pengguna dapat memasukkannya, bagaimana saya bisa mendapatkan nilai-nilai itu ke dalam javascript? Apakah saya harus menggunakan sesuatu untuk menambahkan beberapa tag skrip dan mengaturnya melalui PHP pada setiap pemuatan halaman? Apakah pengaturan cookie menjadi cara yang lebih baik untuk melakukan ini?

Ryan Elkins
sumber
2
Ini adalah pertanyaan yang sangat bagus dan satu yang telah saya rencanakan untuk diajukan. Terima kasih telah menanyakannya!
MikeSchinkel

Jawaban:

10

lebih baik adalah, Anda menggunakan fungsi WP untuk ini, contoh untuk multi bahasa:

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

gunakan ini dalam 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 );

});

Lihat juga pos dari Otto

bueltge
sumber
Saya tidak terlalu mengerti kode Anda tetapi saya menemukan tautannya sangat berguna.
Ryan Elkins
1
Ini sangat bagus, terima kasih! Saya telah bertanya-tanya bagaimana melakukan ini untuk waktu yang sangat lama; Terima kasih! Saya sudah lama ingin menanyakannya di daftar wp-hacker tetapi tidak pernah melakukannya. Terima kasih lagi.
MikeSchinkel
1
Anda dapat melihat di plugin post2media terakhir saya ( wordpress.org/extend/plugins/post2media ) untuk melihat contoh di plugin langsung; plugin tidak memiliki banyak sumber dan saya pikir ini bagus untuk sumber baca dan memahami solusinya.
bueltge
1
Berikut adalah contoh sederhana yang membawanya ke dasar (Anda memiliki banyak hal yang terjadi dalam contoh Anda): prelovac.com/vladimir/…
Viper007Bond
1

Ada beberapa cara yang bisa Anda lakukan ini, salah satunya yang pernah saya lakukan sebelumnya, yang lain belum, tapi saya sudah gunakan untuk file konfigurasi XML.

Yang pertama adalah untuk memasukkan variabel dalam tag skrip di dalam WP header atau footer, sebelum tag skrip tempat Anda memasukkan file JS Anda, misalnya:

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

Alternatif lain adalah memasukkan JS ke dalam file PHP yang disertakan di dalam tag skrip.

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

Di dalam file ini Anda akan memasukkan javascript Anda, dan karena PHP akan menguraikannya, Anda akan dapat memasukkan panggilan PHP dengan cara yang mirip dengan di atas, cukup dengan menggemakan data / opsi yang Anda butuhkan. Satu hal yang perlu diperhatikan adalah bahwa Anda mungkin perlu mengatur header untuk output sebagai text/javascript.

Secara pribadi saya lebih suka metode pertama, dan apa yang saya gunakan ketika saya memiliki pengaturan pengguna yang dapat berubah yang mempengaruhi file javascript.

tak seorangpun
sumber
Langgan yang bagus. Inilah tepatnya yang telah saya lakukan. OTOH, @bueltge memiliki jawaban yang mungkin kita semua cari; Saya tahu saya punya.
MikeSchinkel