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

14 авг. 2010 г., 22:02:03
Просмотры: 2.38K
Голосов: 9

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

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

1
Комментарии

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

MikeSchinkel MikeSchinkel
15 авг. 2010 г. 00:46:34
Все ответы на вопрос 2
5
10

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

    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'    => __( 'Связать с записью', INPSYDE_P2M_TEXTDOMAIN ),
                'txtallnone' => __( 'Включить в галерею:', INPSYDE_P2M_TEXTDOMAIN ),
                'txtall'     => __( 'Все', INPSYDE_P2M_TEXTDOMAIN ),
                'txtnone'    => __( 'Ничего', INPSYDE_P2M_TEXTDOMAIN ),
                'ttlcb'      => __( 'Включить изображение в эту галерею', 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 );

} );

Также смотрите пост от Otto

14 авг. 2010 г. 22:43:40
Комментарии

Я не очень хорошо понял ваш код, но ссылка оказалась очень полезной.

Ryan Elkins Ryan Elkins
14 авг. 2010 г. 23:26:07

Это действительно отлично, спасибо! Я давно задавался вопросом, как это сделать; большое спасибо! Я хотел спросить об этом в списке рассылки wp-hackers, но так и не собрался. Еще раз спасибо.

MikeSchinkel MikeSchinkel
15 авг. 2010 г. 00:52:15

Вы можете посмотреть в моем последнем плагине post2media (http://wordpress.org/extend/plugins/post2media/) живой пример работы плагина; плагин содержит не так много исходного кода, и я думаю, это отлично подходит для чтения кода и понимания решения.

bueltge bueltge
15 авг. 2010 г. 13:01:46

Вот более простой пример, который охватывает основы (в вашем примере слишком много всего): http://www.prelovac.com/vladimir/best-practice-for-adding-javascript-code-to-wordpress-plugin

Viper007Bond Viper007Bond
17 авг. 2010 г. 05:55:13

Поскольку ссылка нерабочая, вот оригинальная статья: https://web.archive.org/web/20190422164736/http://ottopress.com/2010/dont-include-wp-load-please/ и еще одна очень полезная: https://web.archive.org/web/20190429195119/http://ottopress.com/2010/passing-parameters-from-php-to-javascripts-in-plugins

Maxime Maxime
27 июл. 2020 г. 14:43:59
1

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

Первый способ — включить переменные в тег script внутри шапки или подвала WordPress, перед тегом script, где подключается ваш JS-файл, например:

<script type="text/javascript">
    var test = "<?php echo "hello world"; /* соответствующий PHP-код для вывода нужных данных */ ?>";
    var slider_type = "<?php echo "nivo"; /* аналогично */ ?>";
</script>
<script type="text/javascript" src="<?php bloginfo("template_url"); ?>/js/your_js_here"></script>

Другой вариант — включить JS внутри PHP-файла, который подключается через тег script.

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

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

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

14 авг. 2010 г. 22:25:09
Комментарии

Хорошая статья. Именно так я и поступал. С другой стороны, у @bueltge есть ответ, который, вероятно, мы все искали; я точно искал.

MikeSchinkel MikeSchinkel
15 авг. 2010 г. 00:47:59