Ẩn nhóm trường CCK bằng cách sử dụng #states trong hook_form_alter ()?


9

Tôi có một mô-đun tùy chỉnh và tôi đang cố gắng ẩn nhóm trường CCK bằng cách sử dụng "#states" khi một mục nhất định được chọn trong danh sách chọn thả xuống.

Tôi đã thử sử dụng các trạng thái từ bên trong hook_form_alter (), như vậy:

$form['group_mygroup']['#states']['invisible'] = array(
  ':input[name="field_trigger[' . LANGUAGE_NONE. ']"]' => array( 'value' => 'hide' ),
);

Điều này dường như không làm gì cả.

Tôi đã xem xét việc thay đổi trọng lượng của mô-đun của mình theo các trang web khác nhau như http://proofgroup.com/blog/2008/dec/modifying_cck_fieldgroups_hook_form_alter .

nhưng vẫn vô ích. Tôi có thể ẩn tất cả các thành phần biểu mẫu trong nhóm trường bằng cách sử dụng các trạng thái nhưng không phải chính nhóm trường. Có ai có ý kiến ​​gì không?


Đối với người xem trong tương lai: câu trả lời @ andriy-malish 'câu trả lời đúng.
UltraBob

Câu trả lời:


11
/ **
 * Triển khai hook_field_group_build_pre numnder_alter.
 * /
chức năng mymodule_field_group_build_pre numnder_alter (& $ phần tử) {
  if (isset ($ phần tử ['# form_id'])) {
    if ($ phần tử ['# form_id'] == 'mynodetype_node_form') {
      $ phần tử ['group_myfieldgroup'] ['# state'] = mảng (
        'Hiển thị' => mảng (
          ': input [name = "field_myfield [und]"]' => mảng ('đã kiểm tra' => TRUE),
        )
      );
      $ phần tử ['group_myfieldgroup'] ['# id'] = 'group_myfieldgroup';
    }
  }
}

Tôi sử dụng móc này để ẩn nhóm lĩnh vực của tôi. Nó chỉ hiển thị nếu hộp kiểm field_myfieldđược chọn .

Để khám phá $elementbiến trong hook này, tôi đã sử dụng

die('<pre>'.print_r($element, 1).'</pre>');

thay vì dpm().

Hy vọng nó sẽ giúp :)


1

Nhóm trường không được xác định trong thư mục gốc của $form. Có vẻ như bạn không nên sử dụng $form['group_mygroup'], nhưng $form['#fieldgroups']['group_mygroup'].


0

Bạn có thể nhìn vào mô-đun ví dụ để xem cách chúng ẩn các trường . Dựa vào đó tôi nghĩ mã của bạn phải là:

$form['group_mygroup']['#states'] = array(
  'invisible' => array(
    ':input[name="field_trigger"]' => array('value' => 'hide'),
  ),
),

2
Cảm ơn đề nghị của bạn. Mặc dù đó là giống như mã của tôi chỉ tuyên bố hơi khác nhau. Tôi có thể ẩn các trường nếu tôi khai báo biểu mẫu và fieldset bằng FAPI. Vấn đề của tôi là nó không hoạt động với các nhóm trường CCK trong hook_form_alter ().
thepearson
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.