it-swarm-vi.com

Làm thế nào để gửi biến từ tệp .php sang tệp .js?

Tôi hy vọng ai đó có thể giúp tôi. Vấn đề là như sau: 1) Tôi có mô-đun trong đó gán một biến để gửi đến tệp mẫu php.tpl

<?php
...
$testvar="Hello from alex!";
$variables['testvar'] = $testvar; 
...
?>

Biến này có thể được hiển thị trong tệp php.tpl như

<?php print $testvar?>

2) Tôi đã tách tệp .js Làm cách nào tôi có thể truy cập vào tệp biến đổi này trong tệp .js?

Tôi biết nó sẽ như thế nào nếu tệp .js nằm trong .php.tpl:

<?php
$testvar="Hello from alex!";
?>
<script type="text/javascript">
var myVar = '<?php print $testvar?>';
</script>

Vấn đề là làm thế nào để làm như vậy nếu hai tệp .js và .php.tpl được tách ra?

39
Alexey

Bạn nên sử dụng drupal_add_js() trong mô-đun của mình, không cần phải xuất biến trong .tpl.php:

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

Và trong JavaScript của bạn, bạn có thể truy cập giá trị trong Drupal.settings.YOURMODULE.testvar:

alert(Drupal.settings.YOURMODULE.testvar);

Việc sử dụng trực tiếp các biến toàn cục (như được đề xuất trong mẫu mã của bạn) là một cách thực hành không được khuyến khích trong JavaScript vì nó làm lộn xộn không gian tên toàn cầ . Ngoài ra, nếu mã của bạn được kích hoạt khi tải trang, hãy kiểm tra phần "Hành vi" trong Quản lý JavaScript trong Drupal 7 documention (toàn bộ trang đáng đọc).

67
Pierre Buyle

Trong tệp MODULENAME.module của bạn sử dụng mã sau đây.

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

Và trong MODULENAME.js sử dụng cái sau.

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

})(jQuery);

Theo cách này, bạn có thể chuyển biến PHP của mình sang JavaScript và sử dụng nó.

17
Himanshu Pathak

Drupal 8 , drupal_add_js() đã bị xóa (nó không được dùng trong Drupal 7) = > xem phần này để biết thêm thông tin .

Cách gửi PHP thông tin tới Javascript được mô tả hoàn hảo bằng câu trả lời của @ 4k4 cho một câu hỏi tương tự.

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,  // <== 
      ],
    ],
  ],
];

Trong JavaScript, chúng có thể được sử dụng như sau:

(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);
5
Florian Müller