it-swarm-vi.com

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ơ

Đ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

9
silkAdmin

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.

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 [#value] Của một mục 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 và Tôi không biết nếu bạn có thể làm điều đó trong một chức năng tiền xử lý

6
iStryker

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 dễ dàng, dễ dàng để ẩn trường biểu mẫu (hoặc bất kỳ yếu tố kết xuất nào khác). Các element-hidden lớp được định nghĩa trong system.base.css.

5
Chaulky