当前位置: 首页>>技术解读>>正文


如何将.php文件中的变量发送到.js文件?

webfans 技术解读 , , 去评论

问题描述

我希望有人能够帮助我。问题是以下一个: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分开,如何做同样的事情?

最佳解决方案

您应该在模块中使用drupal_add_js(),无需在.tpl.php中输出变量:

drupal_add_js(array('YOURMODULE' => array('testvar' => $testvar)), array('type' => 'setting'));

在您的JavaScript中,您可以访问Drupal.settings.YOURMODULE.testvar中的值:

alert(Drupal.settings.YOURMODULE.testvar);

直接使用全局变量(如代码示例中所示)是JavaScript中不鼓励的做法,因为它是clutter the global namespace。此外,如果您的代码是在页面加载时触发的,请检查Managing JavaScript in Drupal 7文档中的”Behaviors”部分(整个页面值得一读)。

次佳解决方案

在MODULENAME.module文件中,使用以下代码。

$testVariable = 'himanshu';
drupal_add_js(array('MODULENAME' => array('testvar' => $testVariable)), array('type' => 'setting'));
drupal_add_js(drupal_get_path('module', 'MODULENAME') . '/MODULENAME.js');

在MODULENAME.js中使用以下一个。

(function($) {
  Drupal.behaviors.MODULENAME = {
    attach: function (context, settings) {
      alert(settings.MODULENAME.testvar);
    }
  };

})(jQuery);

通过这种方式,您可以将PHP变量传递给JavaScript,并使用它。

第三种解决方案

对于Drupal 8,删除了drupal_add_js()(已在Drupal 7中弃用)=> see this for further information

将PHP信息发送到Javascript的方式完美地描述了by @4k4’s answer到类似的问题。

return [
  '#theme' => 'item_list',
  '#list_type' => 'ul',
  '#items' => $my_items,
  '#attributes' => ['class' => 'some_class'],
  '#attached' => [
    'library' => ['my_module/my_library'],
    'drupalSettings' => [
      'my_library' => [
        'some_variable1' => $value,        // <== Variables passed
        'another_variable' => $take_this,  // <== 
      ],
    ],
  ],
];

在JavaScript中,它们可以按如下方式使用:

(function ($, Drupal, drupalSettings) {
  Drupal.behaviors.my_library = {
    attach: function (context, settings) {

      alert(drupalSettings.my_library.some_variable); //alerts the value of PHP's $value

    }
  };
})(jQuery, Drupal, drupalSettings);

参考资料

本文由朵颐IT整理自网络, 文章地址: https://duoyit.com/article/2491.html,转载请务必附带本地址声明。