Хорошей практикой является размещение всех ваших данных в статических строках в ваших 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
чище. Надеемся, что вы можете использовать эту функцию в своем собственном коде и пользоваться ее преимуществами.
Я надеюсь, вам понравилась эта статья. Я высоко ценю любые отзывы, комментарии и предложения.
Будете ли вы использовать это в одном из ваших проектов? Поделитесь своими мыслями ниже!