it-swarm-vi.com

Làm cách nào để ẩn trường người dùng tùy chỉnh trong hồ sơ người dùng?

Trong Drupal 7, cách tốt nhất để ngăn chặn bất kỳ người dùng không phải quản trị viên nào thay đổi trường hồ sơ người dùng tùy chỉnh là gì?

Trường hợp sử dụng: Tôi đã tạo trường người dùng có tên "ID khách hàng" mà tôi không muốn người dùng (bất kỳ khách hàng thực tế nào của tôi) thay đổi. Trường tồn tại để tham khảo của riêng tôi và để sử dụng theo chương trình trong các mô-đun khác. Tôi không phiền khi người dùng nhìn thấy ID khách hàng, nhưng họ không thể chỉnh sửa nó.

Tôi có nên ghi đè mẫu trang cho trang hồ sơ người dùng không? Nếu vậy, làm thế nào mẫu được thay đổi để làm cho một trường chỉ đọc hoặc vô hình?

Cảm ơn bạn rất nhiều vì đã giúp đỡ của bạn!

Chris

19
ctlarsen

Tôi nghĩ Quyền trường là những gì bạn đang tìm kiếm. Đây là một trích dẫn về nó (từ trang dự án của mô-đun):

... Cho phép quản trị viên trang web đặt quyền cấp trường để chỉnh sửa, xem và tạo các trường trên bất kỳ thực thể nào.

Tính năng :

  • Cho phép quyền trường trên bất kỳ thực thể nào, không chỉ các nút.
  • Quyền truy cập trường dựa trên vai trò cho phép xem khác nhau theo mẫu dựa trên quyền truy cập của người dùng.
  • Quyền cấp độ tác giả cho phép xem và chỉnh sửa các trường dựa trên ai là chủ sở hữu thực thể.
  • Quyền cho từng lĩnh vực không được bật theo mặc định. Thay vào đó, quản trị viên có thể kích hoạt các quyền này một cách rõ ràng cho các trường có tính năng này là cần thiết.
  • Tổng quan về quyền của trường
17
pasine

Để ẩn trường khỏi biểu mẫu hồ sơ người dùng, bạn có thể đặt #access thuộc tính của một trường thành FALSE bằng cách sử dụng hook_form_FORMID_alter .

Đoạn mã sau ẩn trường field_organisation từ mẫu hồ sơ người dùng cho người không phải quản trị viên:

function YOURCUSTOMMODULE_form_user_profile_form_alter(&$form, &$form_state, $form_id) {
  $current_user = user_uid_optional_load();
  if($current_user->uid != 1) {
    $form['field_organisation']['#access'] = FALSE;
  }
}

Xem thêm câu hỏi tương tự này trên drupalanswers

Bạn cũng có thể ẩn trường khỏi trang hồ sơ người dùng (không phải biểu mẫu) bằng cách sử dụng template_pre process_user_profile

Đoạn mã sau ẩn trường field_organisation từ trang người dùng cho người không phải quản trị viên:

function YOURCUSTOMMODULE_preprocess_user_profile(&$vars) {
  $current_user = user_uid_optional_load();
  if($current_user->uid != 1) {
    unset($vars['user_profile']['field_organisation']);
  }
}
5
batigolix

Có vẻ như có một mô-đun có tên http://drupal.org/project/user_readonly "Mô-đun cho phép quản trị viên ngăn chặn sửa đổi các trường tài khoản/hồ sơ người dùng. Quản trị viên có thể chọn trường nào sẽ là không được phép, hoặc lĩnh vực nào sẽ được cho phép. "

1
Jayesh Jose