Giả sử hệ thống Drupal có module mặt định là user, module này làm nhiệm vụ quản lý việc đăng nhập, đăng kí, phục hồi mật khẩu cho user.
Mặt định form đăng nhập của user như sau:
Thay đổi form đăng nhập này bằng cách thay đổi các trường nhập liệu khác (elements) như sau:
Mà không thay đổi code của module user (đảm bảo cho việc nâng cấp lên các phiên bản mới của nhân Drupal).
Với yêu cầu như trên Drupal cung cấp cho người phát triển một cơ chế để thực hiện các yêu cầu đó và được gọi chung là Form API (có nhiều tính năng khác).
Form API này có hook_form_alter() dùng để thay đổi bất cứ một form nào đó (phân biệt qua id của form gọi là form_id) trước khi form đó được validate và submit.
Để minh họa cách làm việc của hook_form_alter() ta lấy ví dụ là với module logintoboggan của cộng đồng phát triển Drupal (module này rất phổ biến).
Cơ chế làm việc của hook_form_alter() như sau:
Minh họa cơ chế làm việc của hook_form_alter() trong module logintoboggan:

Ban đầu module user tạo ra form user_login (F1), nhưng khi module logintoboggan được cài vào hệ thống thì khi module user chạy thì form được thay đổi thành form user_login (đã được thay đổi F2). Quá trình thay đổi này được thực hiên qua hook_form_alter() (xem ở hook_form_alter trên trang http://api.drupal.org, xem hình minh họa phía trên).
Hook này có nhiệm vụ khi form được tạo ra, và trước khi được submit để xử lí thì ta có thể thay đổi các elements trong form và cách xử lí các dữ liệu khi form được thay đổi.
Xem thêm về Form API ở Forms API Quickstart Guide | Drupal API và sơ đồ hoạt động của Form API ở đây Form Workflow Illustration | drupal.org.
Vậy việc thông qua hook_form_alter() mà ta không cần sửa code trực tiếp trong module user nhưng vẫn có thể thay đổi được cấu trúc form và cách xử lí dữ liệu khi form được thay đổi.
Với cơ chế làm việc này ta có thể mở rộng hệ thống một cách dễ dàng bằng cách viết các module mới có thể phủ định, mở rộng và điều hướng làm việc của các module có sẳn mà không trực tiếp thay đổi code trong module đã có.
Sao cái theme xấu quá :(
Sao cái theme xấu quá :(
Đang làm theme mới
Đang làm cái theme lại, nhưng dùng theme galand một cột thấy cũng ok mà, để chỉnh typo và một số thứ nữa là được mà. :">
Vậy làm nhanh nhanh đi anh
Vậy làm nhanh nhanh đi anh :">
Làm sơ bộ xong rầu đó :">
Làm sơ bộ xong rầu đó :">
Add your comment