Cách ẩn và / hoặc ngăn truy cập vào các trường trong một biểu mẫu, chẳng hạn như group_audience cho các nhóm hữu cơ


9

Điều này đã gây rắc rối cho tôi trong một thời gian .. Khi tôi cố gắng ẩn các trường như trường đối tượng nhóm hoặc cài đặt xuất bản từ một biểu mẫu, khi xác thực, biểu mẫu đặt cả hai trường này thành một giá trị null, mặc dù giá trị tự động là đã được tuyên bố chính xác.

Tôi đã cố gắng sử dụng Vô hình, #access, bỏ đặt ẩn không có tác dụng! Điều này rất rắc rối vì đối với dự án hiện tại của tôi, người dùng chỉ có thể chỉnh sửa các bit nhỏ trong hồ sơ của họ, ví dụ như địa chỉ hoặc hình ảnh, vì vậy nếu tôi ẩn đối tượng nhóm, người dùng sẽ bị loại khỏi nhóm mà anh ta thuộc về biên tập.

Tôi đã kết thúc bằng cách sử dụng mã dưới đây để ẩn các trường này trong khi vẫn giữ người dùng trong nhóm của họ.

$variables['user_edit_about']['group_audience']= $temp['group_audience'];       
$variables['user_edit_about']['group_audience']['#prefix'] = '<div style="display:none;">';
$variables['user_edit_about']['group_audience']['#suffix'] = '</div>';

Bất cứ ai sẽ nghĩ ra một cách tốt hơn để đạt được điều này?

Cảm ơn


Câu trả lời này không hoàn hảo vì sử dụng vẫn có thể thay đổi giá trị với thao tác DOM
iStryker

Câu trả lời:


6

Biên tập:

Ok tôi đã tìm ra nó. Đặt cái này trong mô-đun tùy chỉnh của bạn:

function example_form_alter(&$form, &$form_state, $form_id) {
    if($form_id == 'story_node_form') {
        $form['title']['#value'] = 'hot stuff';
        $form['title']['#access'] = FALSE;

    }
}

Điều này sẽ đặt tiêu đề của nút câu chuyện thành 'nội dung nóng' và nó sẽ KHÔNG được hiển thị trên trang vì #access = FALSE;

Bạn có thể thêm điều khiển chi tiết hơn bên trong hook_form_alter () như

  global $user;

  // Check to see if $user has does not have the administrator role.
  if (!in_array('administrator', array_values($user->roles))) {
    $form['title']['#access'] = FALSE;
  }

Điều này hoạt động cho Drupal 6 & 7.

Câu trả lời cũ (bỏ qua):

Đã được một lúc kể từ khi tôi làm một cái gì đó như thế này, vì vậy tôi có thể đã sai. Nếu bạn đặt mục [#value]của biểu mẫu, nó sẽ không hiển thị trên biểu mẫu.

Tôi đã làm điều này trong Drupal 6, hook_form_alter()trong một mô-đun tùy chỉnh. Tôi không biết liệu nó có hoạt động trong Drupal 7 không và tôi không biết liệu bạn có thể làm điều đó trong chức năng tiền xử lý không


Cảm ơn câu trả lời của bạn, mặc dù rất tiếc, nó không hoạt động trong trường hợp của tôi, các trường biểu mẫu đã có #value được nộp trước khi chúng là các biểu mẫu chỉnh sửa
SilkAdmin

@silkAdmin Vui lòng xem các chỉnh sửa mới
iStryker

Cảm ơn Stryker đã dành thời gian để tìm hiểu về vấn đề đó, mặc dù sự kiện kỹ thuật trên của bạn không hoạt động để ẩn các trường, có vẻ như giá trị mặc định cũng không được tính đến khi gửi. Vì vậy, tôi kết thúc với việc người dùng vẫn bị loại khỏi nhóm của họ ở mỗi lần chỉnh sửa hồ sơ. Cho đến nay chỉ có thủ thuật hậu tố #prefix # dường như làm cho nó hoạt động bình thường.
lụaAdmin

do $ form ['title'] ['# value'] = $ form ['title'] ['# default_value']
iStryker

5

Bạn cũng có thể chỉ cần thêm lớp CSS 'ẩn phần tử' vào phần tử biểu mẫu

$form['user_edit_about']['group_audience']['#attributes']['class'][] = 'element-hidden';

Như iStryker đã đề cập trước đây, vẫn có thể thay đổi giá trị thông qua thao tác DOM. Tuy nhiên, đây là một cách hay, dễ dàng để ẩn trường biểu mẫu (hoặc bất kỳ phần tử kết xuất nào khác). Các element-hiddenlớp được định nghĩa trong system.base.css.


Bạn ơi, bạn đã cứu tôi. Cảm ơn. Tất cả các phương thức khác mà tôi thấy không xuất ra các phần tử trên biểu mẫu. Trong trường hợp của tôi, tôi muốn ẩn các phần tử biểu mẫu trong một mô-đun đóng góp, dự kiến ​​các phần tử đó sẽ ở dạng nếu không nó không hoạt động đúng. Sửa lỗi CSS của bạn ẩn các yếu tố không mong muốn nhưng mọi thứ vẫn hoạt động. Cảm ơn vì cũng lưu ý rằng đây không phải là "chống hacker" và chỉ hoạt động bất cứ khi nào bạn cần là đơn giản hóa giao diện bạn trình bày cho người dùng biên tập viên đáng tin cậy.
Mario Awad
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.