آمل أن يتمكن شخص ما من مساعدتي. المشكلة هي التالية: 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؟
يجب عليك استخدام 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 الوثيقة (الصفحة بأكملها تستحق القراءة).
في ملف 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 ، واستخدامه.
من أجل دروبال 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);