Câu trả lời:
Bạn có thể sử dụng hook_js_alter () trong một mô-đun. Ví dụ, mã này thay thế thư viện jQuery được sử dụng bởi Drupal với tệp có trong thư mục jquery_update.
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';
}
Điều tương tự có thể được thực hiện cho mã JavaScript nội tuyến. Sự khác biệt là:
'misc/jquery.js'
, chỉ số đầu tiên là một con số$javascript[$index]['data']
sẽ chứa mã JavaScriptĐiều này có nghĩa là trước tiên bạn phải tìm mục nhập cho mã JavaScript để thay thế và sau đó thay đổi nó. Các mã sau đây nên làm việc trong trường hợp này.
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;
}
}
}
Thay vào đó, nếu bạn cần thay đổi thư viện được thực hiện bởi một mô-đun, bạn có thể triển khai hook_l Library_alter () . Ví dụ, đây là mã được triển khai bởi phiên bản mới nhất của mô-đun Cập nhật 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';
}
}
Điều này cũng hợp lệ đối với mã JavaScript được sử dụng bởi lõi Drupal, vì đối với các tệp JavaScript đó, mô-đun Hệ thống thực hiện hook_l Library () . (Xem system_l Library () .)
hook_js_alter()
có thể được sử dụng cho bất kỳ tệp / mã JavaScript nào, ngay cả đối với các tệp được sử dụng bởi lõi Drupal. Giữa hook_js_alter()
và hook_library_alter()
, tốt hơn là thực hiện cái sau, khi các tệp JavaScript được hiển thị dưới dạng thư viện.