Cập nhật jquery cho Drupal 7.x

jQuery hiện nay đã nâng lên 1.8 nhưng drupal 7.15 (mới nhất) thì vẫn lẹt đẹt ở 1.4.4. Nếu người dùng không cần nhiều hiệu ứng javascript mới thì điều này không ảnh hưởng gì nhiều, nhưng nếu muốn sử dụng những plugin mới nhất của jquery thì đây lại là một trở ngại lớn. Ví dụ, nhưng plugin gần đây hay sử dụng method "on" để gắn sự kiện cho các đối tượng thay cho "bind", nhưng "on" chỉ mới được đưa vào từ jquery 1.7 trở lên. Thêm vào đó khi load javascript, nếu 1 dòng lệnh nào đó bị lỗi thì làm cho những đoạn phía sau chết theo, ảnh hưởng đến những đối tượng khác trong trang.

Để giải quyết vấn đề này, đa số cài đặt thêm module jquery_update (http://drupal.org/project/jquery_update). Module này sẽ tự động load thư viện jquery, jqueryUI (đi kèm) của nó hoặc từ các CDN như google, microsoft thay vì để drupal tự load jquery của mình. Tuy nhiên phiên bản mới nhất của module này cũng chỉ mới cập nhật tới jquery 1.5.2jqueryUI 1.8.11 mà thôi. Do đó để có thể cập nhật phiên bản mới nhất với module này, người dùng có thể có các lựa chọn sau:
- Download và chép đè thư viện mới nhất của jquery vào thư mục của module (sites\all\modules\jquery_update\replace)
- Chỉnh code của module để sử dụng thư viện từ các CDN.
+ Mở file \sites\all\modules\jquery_update\jquery_update.module
+ Tìm đến function jquery_update_jquery_replacejquery_update_jqueryui_replace
+ Thay đường dẫn của jquery mới nhất trên CDN google hoặc microsoft

Thế nhưng module này cũng có một nhược điểm. Drupal 7 được thiết kế với jquery 1.4.4, cả ở front end lẫn back end. Với module jquery update, ta giải quyết được vấn đề cập nhật jquery ở front end nhưng vô tình lại làm ảnh hưởng đến back end. Ví dụ bạn có thể vào phần chỉnh view, lúc chọn fields để hiển thị trên view, nhất là với những field dài như Image thì scrollbar của popup sẽ bị mất, khi nhấn Rewrite the output of this field thì cũng không thấy textbox để điền, bên cạnh đó thì các nút bấm Apply ở dưới cũng biến mất. Như vậy ta phải chỉnh một chút module jquery để nó không thay đổi jquery phần admin.
- Mở file \sites\all\modules\jquery_update\jquery_update.module
- Tìm đến function jquery_update_library_alter
- Thêm vào điều kiện

if (!path_is_admin(current_path())) {
$path = drupal_get_path('module', 'jquery_update');

...
// Replace jQuery Form plugin.
$libraries['jquery.form']['js']['misc/jquery.form.js']['data'] = $path . '/replace/misc/jquery.form.js';
$libraries['jquery.form']['version'] = '2.67';
}

Điều kiện trên sẽ xét đường dẫn trước khi thực hiện thay thế thư viện jquery. Nếu đang ở trong các trang của admin thì vẫn để drupal load thư viện của mình, ngược lại thì sử dụng bản jquery mới nhất đã khai báo ở trên.

Với những điều chỉnh trên thì từ nay ta có thể vừa sử dụng được những plugin mới nhất của jquery đồng thời vừa không làm ảnh hưởng đến giao diện phần admin nữa.