Làm cách nào tôi có thể sửa đổi biểu mẫu đăng nhập bằng hook_form_alter ()?


7

Tôi đang cố gắng thay đổi hình thức đăng nhập bằng mã sau đây:

function git_form_alter(&$form, $form_state, $form_id) {
  $forms = array(
    'user_login_block' => 'user-login-form',
    'user_login' => 'user-login'
  );
  if (array_key_exists($form_id, $forms)) {
       //my altering code
    }
}

Tôi đã nhận được điều này từ mô-đun openidselector giới thiệu một số tiện ích JavaScript và ít nhiều là những gì tôi đang cố gắng thực hiện.
Khi tôi truy cập mysite / người dùng / đăng nhập, nó không gọi khối nơi tôi phải thay đổi biểu mẫu. Nó chỉ đơn giản là không gọi hook_form_alter().

Một điều khác là với biểu mẫu đăng ký, hoặc bất kỳ hình thức nào khác, đang gọi hook.

Bất cứ ai có thể cho tôi biết tôi có thể làm gì? Làm thế nào có thể openidselector sử dụng cùng một phương thức, nhưng trong mô-đun đó, mã hoạt động, trong khi nó không hoạt động trong mã của tôi?

Câu trả lời:


6

Khi tôi truy cập mysite / người dùng / đăng nhập, nó không gọi khối nơi tôi phải thay đổi biểu mẫu. Nó chỉ đơn giản là không gọi hook_form_alter ().

example.com/user/login không hiển thị khối đăng nhập người dùng; Nó hiển thị các hình thức đăng nhập. Mã của bạn sẽ hoạt động, ngay cả khi tôi muốn làm cho mã đơn giản hơn (nếu bạn không sử dụng "biểu mẫu đăng nhập người dùng" theo bất kỳ cách nào).

function git_form_alter(&$form, $form_state, $form_id) {
  if ($form_id == 'user_login_block' || $form_id == 'user_login') {
    // …
  }
}

Về lý do tại sao mã không hoạt động, tôi có thể nghĩ ra các lý do sau:

  • Tên hook không khớp với tên ngắn được sử dụng cho mô-đun; ví dụ, tên viết tắt của mô-đun là "git_form" và bạn đang sử dụng git_form_alter()để thực hiện hook_form_alter()khi nào cần git_form_form_alter().
  • Bạn đang chỉnh sửa một mô-đun được kích hoạt. Trong trường hợp này, khi bạn thêm một hook mới vào mã, bạn cũng cần xóa bộ đệm được sử dụng bởi Drupal vì Drupal lưu trữ danh sách các hook được thực hiện bởi các mô-đun của bên thứ ba.
  • Các mô-đun không được kích hoạt.

trong thông tin tôi đã xác định tên = GIT và tên sắp xếp là git. vấn đề là ở đây: Tôi đã thêm một hook mới với mô-đun được kích hoạt :) Xóa bộ nhớ cache không giải quyết được, tôi phải vô hiệu hóa nó và kích hoạt lại. cảm ơn rất nhiều
PartySoft

Cảm ơn bạn đã chỉ ra rằng tôi phải xóa bộ nhớ cache Tôi đang tìm kiếm lý do tại sao nó không hoạt động và sau đó tôi tìm thấy câu trả lời của bạn +1!
FLY

0

Mã của bạn là tốt, và nó hoạt động tốt. Ít nhất là phần này mà bạn đã thể hiện.

Tôi giả sử rằng bạn đã đặt nó trong mô-đun 'git' và mô-đun được bật? Bạn có bất kỳ mã nào (ở đó hoặc ở bất kỳ nơi nào khác) có thể phá vỡ dòng chảy và ngăn hook của bạn thực thi không?


có mô-đun của tôi được kích hoạt và được gọi là git. Tôi có các chức năng khác trong đó hoạt động tốt.
PartySoft
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.