Değişken .php dosyasından .js dosyasına göndermek nasıl?


37

Umarım biri bana yardım edebilir. Sorun şudur: 1) php.tpl şablon dosyasına göndermek için bir değişkeni atadığı bir modül var

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

Bu değişken php.tpl dosyasında olduğu gibi gösterilebilir

<?php print $testvar?>

2) .js dosyasından ayrıldım .js dosyasındaki bu değişkene nasıl erişebilirim?

.Js dosyası içinde .php.tpl ise nasıl olacağını biliyorum:

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

Sorun, bu iki dosya .js ve .php.tpl ayrılmışsa aynı işlemi yapmaktır.


2
Bir değişkeni kör bir şekilde Javascript’e eklemeyin. Javascript meta karakterleri (özellikle tek tırnaklar) varsa, sözdizimi hatalarına neden olursunuz. Do var myVar = <?php echo json_encode($testvar) ?>;bakılmaksızın PHP VAR veri tipi / içerik sizin için bu tür sorunların ilgilenecek olan.

Drupal 7 listesi js ipuçları ve püf noktaları browse-tutorials.com/tutorial/javascript-drupal-7
ram4nd

Yanıtlar:


65

drupal_add_js()Modülünüzde kullanmanız gerekir, değişkenini çıktıya gerek yoktur .tpl.php:

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

JavaScript'inizde, aşağıdaki değere erişebilirsiniz Drupal.settings.YOURMODULE.testvar:

alert(Drupal.settings.YOURMODULE.testvar);

Genel değişkenlerin doğrudan kullanımı (kod örneğinizde önerildiği gibi), küresel ad alanını karıştırdığı için JavaScript'te cesareti kırılmış bir uygulamadır . Ayrıca, kodunuz sayfa yüklendiğinde tetiklenirse, Drupal 7 belgelerinde JavaScript'i Yönetme bölümündeki "Davranışlar" bölümüne bakın (tüm sayfa okunmaya değer).


17

MODULENAME.module dosyanızda aşağıdaki kodu kullanın.

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

Ve MODULENAME.js'de aşağıdakileri kullanın.

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

})(jQuery);

Bu şekilde, PHP değişkeninizi JavaScript'e aktarabilir ve kullanabilirsiniz.


İşlev ne yapar ve ne zaman tetiklenir? Neden doğrudan Drupal.settings.YOURMODULE.testvar'ı kullanmıyorsunuz?
inanılmaz

5

İçin Drupal 8 , drupal_add_js()(zaten Drupal 7 kullanımdan kaldırıldı) çıkarıldı => Daha fazla bilgi için bu bkz .

PHP bilgilerini Javascript'e göndermenin yolu @ 4k4'ün benzer bir soruya cevabı ile mükemmel bir şekilde tarif edilmiştir .

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’te şu şekilde kullanılabilir:

(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);

*.libraries.ymlOrada da tanımlanmış bir bağımlılık olması gerektiğini söylemeye değer - core/drupalSettings.
leymannx
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.