.php फ़ाइल से .js फ़ाइल में चर कैसे भेजें?


37

मुझे उम्मीद है कि कोई मेरी मदद करने में सक्षम है। समस्या निम्नलिखित है: 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 को अलग करने पर समान कैसे किया जाए?


2
आँख बंद करके जावास्क्रिप्ट में एक चर नहीं गूँजते। यदि कोई भी मेटा मेटाक्रैटर (एकल उद्धरण, विशेष रूप से) है, तो आप वाक्यविन्यास त्रुटियों का परिचय देंगे। वह करें var myVar = <?php echo json_encode($testvar) ?>;जो आपके लिए ऐसे किसी भी मुद्दे का ध्यान रखेगा, जो PHP var के डेटा-टाइप / कंटेंट की परवाह किए बिना होगा।

Drupal 7 js टिप्स और ट्रिक्स की सूची ब्राउज़ करें-tutorials.com/tutorial/javascript-drupal-7
ram4nd

जवाबों:


65

आपको drupal_add_js()अपने मॉड्यूल में उपयोग करना चाहिए , आपके चर को आउटपुट करने की कोई आवश्यकता नहीं है .tpl.php:

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

और अपने जावास्क्रिप्ट में, आप में मूल्य का उपयोग कर सकते हैं Drupal.settings.YOURMODULE.testvar:

alert(Drupal.settings.YOURMODULE.testvar);

वैश्विक चर का प्रत्यक्ष उपयोग (जैसा कि आपके कोड नमूने में सुझाया गया है) जावास्क्रिप्ट में एक हतोत्साहित अभ्यास है क्योंकि यह वैश्विक नाम स्थान को अव्यवस्थित करता है । इसके अलावा, यदि आपका कोड पृष्ठ लोड पर चालू है, तो Drupal 7 डॉक्यूमेंटेशन में प्रबंध जावास्क्रिप्ट में "व्यवहार" अनुभाग की जाँच करें (पूरा पृष्ठ पढ़ने लायक है)।


17

अपने 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 चर को जावास्क्रिप्ट में पारित कर सकते हैं, और इसका उपयोग कर सकते हैं।


फ़ंक्शन क्या करता है और यह कब चालू होता है? सीधे Drupal.settings.YOURMODULE.testvar का उपयोग क्यों नहीं किया जाता है?
अतुल्य

5

के लिए Drupal 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,  // <== 
      ],
    ],
  ],
];

जावास्क्रिप्ट में, उनका उपयोग निम्नानुसार किया जा सकता है:

(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.ymlवहाँ भी एक निर्भरता को परिभाषित किया जाना चाहिए - core/drupalSettings
लीमैनक्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.