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


20

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

Câu trả lời:


17

Tôi nghĩ rằng Quyền hạn 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.

Các tính năng :

  • Cho phép trường trên bất kỳ thực thể nào, không chỉ các nút.
  • Quyền của 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

Cảm ơn, không! Tôi đã cài đặt mô-đun Cấp phép Trường (phiên bản alpha mới nhất, điều này khiến tôi hơi lo lắng, nhưng bất cứ điều gì) và nó sẽ ẩn trường khỏi người dùng khi người dùng xem hồ sơ của anh ta. Sau khi thử nghiệm với tất cả các cài đặt của mô-đun, dường như không có cách nào để làm cho trường hiển thị nhưng chỉ đọc. Không phải là một yêu cầu tuyệt đối, nhưng sẽ tốt đẹp để có.
ctlarsen

Đặt trường hiển thị có nghĩa là trường văn bản được hiển thị dưới dạng văn bản thuần túy. Nếu bạn muốn giữ trường văn bản và đặt nó ở chế độ chỉ đọc, tôi đoán bạn phải sử dụng hook_form_alter trên biểu mẫu của mình.
pasine

Cảm ơn một lần nữa, không. Tôi sẽ đi theo tuyến hook_form_alter và xem nơi sẽ đưa tôi đến. Có vẻ như đó là cách tốt nhất để đi.
ctlarsen

Mô-đun Field Permissionshoạt động tốt với Drupal 8 nhưng bạn chỉ có thể ẩn các trường tùy chỉnh (tôi cần phải cung cấp tên người dùng)
Sébastien Gicquel

5

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

Đoạn mã sau ẩn trường field_organisationkhỏi biểu 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ự 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 template_pre process_user_profile

Đoạn mã sau ẩn trường field_organisationkhỏi trang người dùng cho những người không phải là 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']);
  }
}

1

Dường 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ẽ không được phép hoặc trường nào sẽ không được phép được phép. "

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.