Хорошей практикой является размещение всех ваших данных в статических строках в ваших PHP-файлах. Если вам позже понадобится использовать некоторые данные в JavaScript, то хорошей практикой будет также поместить ваши данные в качестве атрибутов data-* в ваш HTML. Но в некоторых определенных сценариях у вас нет другого выбора, кроме как передавать строки непосредственно в код JavaScript.
Если вы включаете библиотеку JavaScript, и вы обнаружили, что инициализируете объект JavaScript внутри вашего header.php затем присваиваете данные его свойствам, то эта статья для вас.
Эта статья научит вас, как правильно передавать данные PHP и статические строки в вашу библиотеку JavaScript.
Почему нужно передавать данные в JavaScript
Позвольте мне проиллюстрировать некоторые типичные сценарии необходимости передачи данных в JavaScript. Например, иногда нам нужно вставить эти значения в ваш код JavaScript:
- URL домашней страницы, администратора, плагина, темы или ajax,
- Переводимые струны, или
- Тема или вариант WordPress.
Общий способ передачи данных
Допустим, у нас есть файл jQuery с именем myLibrary.js который мы включим в наш сайт WordPress:
var myLibraryObject; (функция ($) { «использовать строгое»; myLibraryObject = { home: '', // заполните это позже pleaseWaitLabel: '', // заполнить использовать это позже someFunction: function () { // код, который использует свойства выше } } });
Мы ставим его в файл functions.php со следующим кодом:
|
1
|
wp_enqueue_script( ‘my_js_library’, get_template_directory_uri() . ‘/js/myLibrary.js’ );
|
Теперь вопрос в том, как мы можем заполнить home и, pleaseWaitLabel свойства? Вы могли бы инстинктивно добавить что-то подобное в ваш header.php чтобы получить нужные данные:
|
01
02
03
04
05
06
07
08
09
10
11
12
|
<script>
(function( $ ) {
«use strict»;
$(function() {
myLibraryObject.home = ‘<?php echo get_stylesheet_directory_uri() ?>’;
myLibraryObject.pleaseWaitLabel = ‘<?php _e( ‘Please wait…’, ‘default’ ) ?>’;
});
}(jQuery));
</script>
|
Это работает как задумано; Тем не менее, WordPress предоставил нам лучший и более короткий способ сделать это.
Путь WordPress
Рекомендуемый способ передачи данных в JavaScript — использование функции wp_localize_script . Эта функция предназначена для использования после постановки сценария в очередь с помощью wp_enqueue_scripts .
|
1
|
wp_localize_script( $handle, $objectName, $arrayOfValues );
|
Вот параметры:
-
$handle. Дескриптор сценария в очереди для привязки значений к -
$objectName. Объект JavaScript, который будет содержать все значения $ arrayOfValues -
$arrayOfValues. Ассоциативный массив, содержащий имя и значения для передачи в скрипт
После вызова этой функции переменная $objectName станет доступной в указанном сценарии.
Реализация wp_localize_script
Давайте настроим предыдущий пример, чтобы использовать наш новый метод передачи данных. Сначала мы ставим скрипт в очередь, затем вызываем wp_localize_script в нашем functions.php :
|
1
2
3
4
5
6
7
|
wp_enqueue_script( ‘my_js_library’, get_template_directory_uri() . ‘/js/myLibrary.js’ );
$dataToBePassed = array(
‘home’ => get_stylesheet_directory_uri(),
‘pleaseWaitLabel’ => __( ‘Please wait…’, ‘default’ )
);
wp_localize_script( ‘my_js_library’, ‘php_vars’, $datatoBePassed );
|
Теперь наши значения home и pleaseWaitLabel теперь доступны в нашей библиотеке jQuery через переменную php_vars .
Поскольку мы использовали wp_localize_script , нам не нужно ничего запускать в нашем header.php и мы можем безопасно удалить содержимое <script> :
Мы также можем удалить дополнительные свойства из нашего скрипта jQuery. Теперь это можно упростить до этого:
var myLibraryObject; (функция ($) { «использовать строгое»; myLibraryObject = { someFunction: function () { // код, который использует php_vars.home и php_vars.pleaseWaitLabel } } } (JQuery));
Вывод
Используя wp_localize_script , наш код становится проще, а наш header.php чище. Надеемся, что вы можете использовать эту функцию в своем собственном коде и пользоваться ее преимуществами.
Я надеюсь, вам понравилась эта статья. Я высоко ценю любые отзывы, комментарии и предложения.
Будете ли вы использовать это в одном из ваших проектов? Поделитесь своими мыслями ниже!