it-swarm.asia

كيفية إرسال متغير من ملف .php إلى ملف. js؟

آمل أن يتمكن شخص ما من مساعدتي. المشكلة هي التالية: 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؟

39
Alexey

يجب عليك استخدام 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 لأنها فوضى مساحة الاسم العامة . أيضًا ، إذا تم تشغيل التعليمات البرمجية الخاصة بك عند تحميل الصفحة ، فراجع قسم "السلوكيات" في إدارة جافا سكريبت في Drupal 7 الوثيقة (الصفحة بأكملها تستحق القراءة).

67
Pierre Buyle

في ملف 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 ، واستخدامه.

17
Himanshu Pathak

من أجل دروبال 8 ، drupal_add_js() تمت إزالته (تم إهماله في Drupal 7 بالفعل) = > انظر هذا لمزيد من المعلومات .

طريقة إرسال PHP إلى جافا سكريبت موصوفة تمامًا بواسطة إجابة @ 4k4 على سؤال مشابه.

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