Hướng dẫn sử dụng hook_form_alter trong drupal

Cách sử dụng hook_form_alter cũng giống như bất kỳ hook nào trong drupal. Để sử dụng hook thì các bạn cần tạo một module. Sau đó, bạn thêm hook vào file .module của module vừa tạo. Nội dung bài này, mình sẽ chi tiết hơn cho các bạn về cách sử dụng hook. Mình lấy hook_form_alter làm ví dụ. Ở bài trước, mình đã nói về cơ chế sử dụng hook trong drupal rồi. Tuy nhiên, có thể một số bạn vẫn chưa hiểu nên bài này mình sẽ lấy luôn ví dụ cụ thể

Đầu tiên, các bạn cần biết chức năng của hook là gì đã. Với hook_form_alter. Trong phần giới thiệu của trang drupal: https://api.drupal.org/api/drupal/modules%21system%21system.api.php/7. hook_form_alter có tác dụng như này: Perform alterations before a form is rendered. Có nghĩa là thực hiện việc thay đổi trước khi form được tạo ra. Hay các bạn hiểu nôm na là: hook_form_alter tác dụng tùy chỉnh 1 form bất kỳ trong drupal theo ý muốn của bạn. Nếu bạn đã làm việc với drupal thì sẽ biết trong drupal có rất nhiều form đúng không? Form tạo node mới, form comment, form đăng ký user ...

1 . Chúng ta sẽ lấy ví dụ cụ thể luôn nhé. Sẽ tiến hành tùy chỉnh form tạo node trong drupal.

Form tạo node mới có dạng.

Hướng dẫn sử dụng hook_form_alter trong drupal

Bây giờ, chúng ta sẽ custom, chỉnh sửa form này đi 1 tý. Ví dụ: ta muốn thêm ô nhập tác giả dưới title chẳng bạn. 

Các bước thực hiện sẽ như sau:

  • Bước 1: Tạo module

Các bạn tạo ra 1 moudle tên là custom nhé. Tạo xong nhớ install nó lên. Không cài lên thì tất nhiên là web sẽ không nhận gì hết

  • Bước 2. Mở file custom.module lên và thêm đoạn code sau vào

 

function custom_form_alter(&$form, &$form_state, $form_id){

    $form['tac_gia'] = array(

        '#type' => 'textfield',

        '#title' => t('Tác giả'),

        '#weight' => -4,

    );

}

 

Lúc đó form tạo node sẽ có thểm 1 ô nhập tác giả mới

Hướng dẫn sử dụng hook_form_alter trong drupal

Mình giải thích thêm 1 chút:

  • '#type': ở đây các bạn chọn textfield vì chúng ta cần ô nhập. Phần này bắt buộc phải có khi tạo form. Trong drupal có rất nhiều kiểu form: Nào là ô nhập 1 dòng, nhiều dòng, checkbox, select.... các bạn có thể tham khảo thư viện của drupal. https://api.drupal.org/api/drupal/developer!topics!forms_api_reference.html/7
  • '#title': Dùng để hiển thị tiêu đề cho form bạn cần thêm vào
  • '#weight': nghĩa là độ cao. Trong form tạo node bạn thấy có rất nhiều form con đúng không? nào là form title, form tags, form body.... Bạn muốn tùy chỉnh vị trí form tác giả thêm vào nào ở vị trí thì đặt weight cho nó. Ví dụ: bạn muốn form tác giả nằm trên title thì đặt '#weight' => -5. Tương tự, bạn hãy thử xem nhé

Vậy là bạn đã chỉnh sửa được form tạo node rồi . 

2. Sử dụng hook_form_alter để thiết lập bỏ bắt buộc với trường tiêu đề.

Bình thường khi tạo node mới, tiêu đề là phần bắt buộc phải không? Nghĩa là bạn phải nhập tiêu đề thì drupal mới cho bạn tạo node mới. Tuy nhiên, trong 1 số trường hợp, tùy vào bài toán của bạn. Bạn không muốn tiêu đề là trường bắt buộc nữa. Thì bạn làm như sau: 

Mở file custom.module ra. Thêm đoạn code sau vào:

 

function custom_form_alter(&$form, &$form_state, $form_id){

  $form['subject']['#required'] = FALSE;

}

 

Lúc đó, bạn không cần nhập tiêu đề nữa. Drupal cho phép bạn tạo node mới mà không có tiêu đề.

Chú ý: trong 1 module bạn chỉ được gọi mỗi hook 1 lần. Nếu gọi nhiều lần là lỗi. Điều này là đương nhiên. Vì bản chất hook là function. Trong 1 file mà bạn gọi nhiều hàm thì lỗi là phải rồi

 

Kết luận: Bài này, mình đã chi tiết cho các bạn cách sử dụng hook_form_alter. Đọc đến đây, bạn đã làm được rồi phải không? Cơ chế sử dụng hook trong drupal đều như nhau. Bạn chỉ cần biết sử dụng hook_form_alter thì bạn sẽ biết cách sử dụng tất cả các hook còn lại. Nhớ rằng, mỗi hook thực hiện 1 chức năng khác nhau. Để biết chức năng của hook thì các bạn vào phần api hook của drupal để xem. Bài viết đến đây đã kết thúc. Nếu bạn còn chỗ nào chưa hiểu, hãy để lại comment bên dưới. Mình sẽ trợ giúp bạn. Xin cảm ơn vì đã theo dõi bài viết