আমি কীভাবে কোনও মডিউলটির জাভাস্ক্রিপ্ট পরিবর্তন করতে পারি?


11

আমার "ওয়েবফর্ম এজেএক্স" মডিউলটির জাভাস্ক্রিপ্ট কোডটি পরিবর্তন করতে হবে। মডিউলটি হ্যাক না করে এবং মডিউল আপডেটের মাধ্যমে এগুলি হারাতে ঝুঁকিপূর্ণ ছাড়া কি এটি সম্ভব?

উত্তর:


19

আপনি একটি মডিউলে hook_js_alter () ব্যবহার করতে পারেন । উদাহরণস্বরূপ, এই কোডটি jquery_update ডিরেক্টরিতে উপস্থিত ফাইলের সাথে দ্রুপাল দ্বারা ব্যবহৃত jQuery লাইব্রেরি প্রতিস্থাপন করে।

function jquery_update_js_alter(&$javascript) {
  // Swap out jQuery to use an updated version of the library.
  $javascript['misc/jquery.js']['data'] = drupal_get_path('module', 'jquery_update') . '/jquery.js';
} 

একই কাজটি ইনলাইন জাভাস্ক্রিপ্ট কোডের জন্যও করা যায়। পার্থক্যগুলি হ'ল:

  • পরিবর্তে 'misc/jquery.js', প্রথম সূচকটি একটি সংখ্যা
  • $javascript[$index]['data'] জাভাস্ক্রিপ্ট কোড থাকবে

এর অর্থ এই যে আপনাকে প্রথমে জাভাস্ক্রিপ্ট কোডটি প্রতিস্থাপনের জন্য এন্ট্রিটি সন্ধান করতে হবে এবং তারপরে এটি পরিবর্তন করতে হবে। নিম্নলিখিত কোড এই ক্ষেত্রে কাজ করা উচিত।

function mymodule_js_alter(&$javascript) {
  $old_code = 'The code to alter';
  $new_code = 'The new code';

  foreach ($javascript as $index => $info) {
    if (is_numeric($index) && $info['data'] == $old_code) {
      $javascript[$index]['data'] = $new_code;
      break;
    }
  }
}

বিকল্প হিসাবে, যদি আপনার কোনও মডিউল দ্বারা প্রয়োগ করা লাইব্রেরি পরিবর্তন করতে হয়, আপনি hook_library_alter () প্রয়োগ করতে পারেন । উদাহরণস্বরূপ, এটি jQuery আপডেট মডিউলটির সর্বশেষতম সংস্করণ দ্বারা প্রয়োগ করা কোড ।

function jquery_update_library_alter(&$javascript, $module) {

  // We are updating just the system module. For all other cases we return.
  if ($module != 'system') {
    return;
  }

  $path = drupal_get_path('module', 'jquery_update');

  // Make sure we inject either the minified or uncompressed version as desired.
  $min = variable_get('jquery_update_compression_type', 'min') == 'none' ? '' : '.min';
  $cdn = variable_get('jquery_update_jquery_cdn', 'none');

  // Replace jQuery with the latest version.
  $version = variable_get('jquery_update_jquery_version', '1.5');
  jquery_update_jquery_replace($javascript, $cdn, $path, $min, $version);

  // Replace jQuery UI with CDN or local files. If from a CDN include all of jQuery UI.
  jquery_update_jqueryui_replace($javascript, $cdn, $path, $min);

  // Replace the jQuery Cookie plugin.
  $javascript['cookie']['js']['misc/jquery.cookie.js']['data'] = $path . '/replace/ui/external/jquery.cookie.js';
  // Noting the version based on git commit as no version number is available.
  $javascript['cookie']['version'] = '67fb34f6a866c40d0570';

  // Replace jQuery Form plugin.
  $javascript['jquery.form']['js']['misc/jquery.form.js']['data'] = $path . '/replace/misc/jquery.form' . $min . '.js';
  $javascript['jquery.form']['version'] = '2.69';

  // Replace files for jQuery 1.7 and up
  if (version_compare($version, '1.7', '>=')) {
    $javascript['drupal.states']['js']['misc/states.js']['data'] = $path . '/replace/misc/1.7/states.js';
  }
}

এটি ড্রুপাল কোর দ্বারা ব্যবহৃত জাভাস্ক্রিপ্ট কোডের জন্যও বৈধ, যেহেতু Java জাভাস্ক্রিপ্ট ফাইলগুলির জন্য, সিস্টেম মডিউল হুক_লাইবারি () প্রয়োগ করে । ( সিস্টেম_লাইবারি দেখুন () ।)

hook_js_alter()যে কোনও জাভাস্ক্রিপ্ট ফাইল / কোডের জন্য এমনকি ড্রুপাল কোর দ্বারা ব্যবহৃত ফাইলগুলির জন্যও ব্যবহার করা যেতে পারে। মধ্যে hook_js_alter()এবং hook_library_alter(), এটা আধুনিক বাস্তবায়ন যখন জাভাস্ক্রিপ্ট ফাইল লাইব্রেরি রূপে উন্মুক্ত বাঞ্ছনীয়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.