Я надеюсь, что кто-то сможет мне помочь. Проблема заключается в следующем: 1) У меня есть модуль, в котором назначить переменную для отправки в файл шаблона php.tpl
<?php
...
$testvar="Hello from alex!";
$variables['testvar'] = $testvar;
...
?>
Эта переменная может быть показана в файле php.tpl как
<?php print $testvar?>
2) Я разделил файл .js. Как мне получить доступ к этой переменной внутри файла .js?
Я знаю, как это будет, если файл .js находится внутри .php.tpl:
<?php
$testvar="Hello from alex!";
?>
<script type="text/javascript">
var myVar = '<?php print $testvar?>';
</script>
Проблема в том, как сделать то же самое, если эти два файла .js и .php.tpl разделены?
7
javascript
Алексей
источник
источник
var myVar = <?php echo json_encode($testvar) ?>;
что позаботится о любых таких проблемах для вас, независимо от типа данных / содержимого PHP var.Ответы:
Вы должны использовать
drupal_add_js()
в своем модуле, нет необходимости выводить переменную в вашем.tpl.php
:И в вашем JavaScript вы можете получить доступ к значению в
Drupal.settings.YOURMODULE.testvar
:Прямое использование глобальных переменных (как предложено в вашем примере кода) - нежелательная практика в JavaScript, поскольку она загромождает глобальное пространство имен . Кроме того, если ваш код запускается при загрузке страницы, проверьте раздел «Поведения» в документе « Управление JavaScript в Drupal 7» (стоит прочитать всю страницу).
источник
В вашем файле MODULENAME.module используйте следующий код.
А в MODULENAME.js используйте следующий.
Таким образом, вы можете передать свою переменную PHP в JavaScript и использовать ее.
источник
Для Drupal 8 ,
drupal_add_js()
был удален (он был устаревшим в Drupal 7 уже) => увидеть это для получения дополнительной информации .Способ отправки информации PHP в Javascript прекрасно описывается ответом @ 4k4 на аналогичный вопрос.
В JavaScript их можно использовать следующим образом:
источник
*.libraries.yml
здесь также должна быть определена зависимость- core/drupalSettings
.