Изменение файла JS с данными из настроек плагина

9

У меня есть плагин, который, помимо прочего, имеет файл JavaScript, который требует нескольких пользовательских настроек. Что было бы лучшим способом получить эти настройки в JavaScript из параметров настроек плагина?

Другими словами, если я сделаю эти настройки частью страницы настроек, где пользователь может их ввести, как мне лучше всего получить эти значения в javascript? Должен ли я использовать что-то, чтобы добавлять некоторые теги сценариев и устанавливать их через PHP при каждой загрузке страницы? Будет ли установка cookie лучшим способом сделать это?

Райан Элкинс
источник
2
Это действительно отличный вопрос, который я планировал задать. Спасибо за вопрос!
MikeSchinkel

Ответы:

10

лучше использовать для этого функции WP, например, для мультиязычности:

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

используйте это в 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 );

});

Также см. Сообщение от Отто

bueltge
источник
Я не очень хорошо понял ваш код, но нашел ссылку очень полезной.
Райан Элкинс
1
Это действительно отлично, спасибо! Я очень долго думал, как это сделать; благодарю вас! Я хотел спросить это в списке wp-хакеров, но никогда не делал. Еще раз спасибо
MikeSchinkel
1
Вы можете посмотреть на моем последнем плагине post2media ( wordpress.org/extend/plugins/post2media ), чтобы увидеть пример живого плагина; плагин имеет не так много источников, и я думаю, что это отлично подходит для чтения источника и понимания решения.
Бюлтге
1
Вот более простой пример, который сводит его к основам (у вас много чего происходит в вашем примере): prelovac.com/vladimir/…
Viper007Bond
1

Есть несколько способов сделать это, один из которых я делал раньше, а другой нет, но я использовал для файлов конфигурации XML.

Первый - включить переменные в тег сценария внутри верхнего или нижнего колонтитула WP, перед тегом сценария, куда вы включаете свой файл JS, например:

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

Другой альтернативой может быть включение JS внутрь файла PHP, который включен в тег скрипта.

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

Внутри этого файла вы включили бы свой javascript, и, как бы PHP его проанализировал, вы сможете включать вызовы PHP аналогично описанному выше, просто выводя данные / параметры, которые вам требуются. Стоит отметить, что вам может потребоваться установить заголовки для вывода как text/javascript.

Лично я очень предпочитаю первый метод, который я использую, когда у меня есть изменяемые пользователем настройки, которые влияют на файлы javascript.

никто
источник
Хорошая рецензия. Это именно то, что я делал. OTOH, у @bueltge есть ответ, который мы, вероятно, все искали; Я знаю, что у меня есть.
MikeSchinkel