.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) ?>;যা আপনার জন্য পিএইচপি বর্ণের ডেটা-টাইপ / বিষয়বস্তু নির্বিশেষে এ জাতীয় কোনও সমস্যার যত্ন নেবে Do

উত্তর:


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

গ্লোবাল ভেরিয়েবলের সরাসরি ব্যবহার (আপনার কোড নমুনায় প্রস্তাবিত হিসাবে) এটি জাভাস্ক্রিপ্টে নিরুৎসাহিত অনুশীলন হিসাবে এটি বিশ্বব্যাপী নেমস্পেসকে বিশৃঙ্খল করে । এছাড়াও, যদি আপনার কোডটি পৃষ্ঠা লোডে ট্রিগার করা হয় তবে ড্রুপাল 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);

এইভাবে, আপনি আপনার পিএইচপি ভেরিয়েবলটি জাভাস্ক্রিপ্টে পাস করতে পারেন এবং এটি ব্যবহার করতে পারেন।


ফাংশনটি কী করে এবং কখন এটি ট্রিগার হয়? সরাসরি দ্রুপাল.সেটিংস ব্যবহার করবেন না কেন? আপনার বিদ্যুৎ.পরে?
অবিশ্বাস্য

5

জন্য Drupal এর 8 , drupal_add_js()সরানো হয়েছে (এটা Drupal এর 7 ইতিমধ্যেই অবচিত হয়েছে) => আরও তথ্যের জন্য এই দেখতে

জাভাস্ক্রিপ্টে পিএইচপি তথ্য প্রেরণের উপায় @ 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
লেইম্যানেক্স
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.