it-swarm-id.com

bagaimana cara mengirim variabel dari file .php ke file .js?

Saya harap seseorang dapat membantu saya. Masalahnya adalah yang berikut: 1) Saya memiliki modul di mana menetapkan variabel untuk mengirim ke file template php.tpl

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

Variabel ini dapat ditampilkan dalam file php.tpl seperti

<?php print $testvar?>

2) Saya telah memisahkan file .js Bagaimana saya bisa mendapatkan akses ke file dalam .js yang dapat diperbarui ini?

Saya tahu bagaimana jadinya jika file .js ada di dalam .php.tpl:

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

Masalahnya adalah bagaimana melakukan hal yang sama jika kedua file .js dan .php.tpl ini dipisahkan?

39
Alexey

Anda harus menggunakan drupal_add_js() dalam modul Anda, tidak perlu menampilkan variabel dalam .tpl.php Anda:

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

Dan dalam JavaScript Anda, Anda dapat mengakses nilai dalam Drupal.settings.YOURMODULE.testvar:

alert(Drupal.settings.YOURMODULE.testvar);

Penggunaan langsung variabel global (seperti yang disarankan dalam sampel kode Anda) adalah praktik yang tidak disarankan dalam JavaScript seperti itu mengacaukan namespace global . Juga, jika kode Anda dipicu pada pemuatan halaman, periksa bagian "Perilaku" di Mengelola JavaScript di Drupal 7 dokumentasi (seluruh halaman layak dibaca).

67
Pierre Buyle

Dalam file MODULENAME.module Anda gunakan kode berikut.

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

Dan di MODULENAME.js gunakan yang berikut ini.

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

})(jQuery);

Dengan cara ini, Anda dapat meneruskan variabel PHP ke JavaScript, dan menggunakannya).

17
Himanshu Pathak

Untuk Drupal 8 , drupal_add_js() telah dihapus (sudah ditinggalkan di Drupal 7 sudah) = > lihat ini untuk informasi lebih lanjut .

Cara mengirim PHP informasi ke Javascript dijelaskan dengan sempurna oleh jawaban @ 4k4 ke pertanyaan serupa.

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

Dalam JavaScript, mereka dapat digunakan sebagai berikut:

(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