web-gelistirme-sc.com

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

Umarım birisi bana yardım edebilir. Sorun şu: 1) Ben php.tpl şablon dosyasına göndermek için değişken atamak modülü var

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

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

<?php print $testvar?>

2) .js dosyasını ayırdım .js dosyasının içindeki bu değişkenliğe nasıl erişebilirim?

.Js dosyası .php.tpl içinde 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ılırsa aynı nasıl yapılır?

39
Alexey

Modülünüzde drupal_add_js() kullanmalısınız, .tpl.php:

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

Ve JavaScript'inizde Drupal.settings.YOURMODULE.testvar:

alert(Drupal.settings.YOURMODULE.testvar);

Genel değişkenlerin doğrudan kullanımı (kod örneğinizde önerildiği gibi), genel ad alanını karıştırın olduğu için JavaScript'te önerilmez. Ayrıca, kodunuz sayfa yüklenirken tetiklenirse, JavaScript'i Drupal 7 belgeselde (tüm sayfanın okumaya değer) bölümündeki "Davranışlar" bölümünü kontrol edin. .

67
Pierre Buyle

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 dosyasında aşağıdakini 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.

17
Himanshu Pathak

Drupal 8 için drupal_add_js() kaldırıldı (Drupal 7) = > daha fazla bilgi için buna bakın .

Benzer bir soruya PHP bilgileri Javascript'e göndermenin yolu mükemmel şekilde açıklanmıştır @ 4k4'ün cevabı tarafından .

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, bunlar aşağıdaki gibi 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);
5
Florian Müller