Câu trả lời:
Sử dụng unset()
không phải là một giải pháp tốt cho các biểu mẫu (như tôi nghĩ bạn biết), vì bạn không bao giờ biết trình xử lý trình / xác thực nào có thể mong đợi phần tử unset tồn tại khi chúng được xử lý. Điều này có thể dẫn đến các lỗi không mong muốn.
Có ba phương pháp bạn có thể sử dụng một cách an toàn để 'ẩn' một phần tử biểu mẫu
'#type' => 'value'
trên phần tử, sẽ có tác dụng là giá trị cho phần tử vẫn sẽ được chuyển qua các hàm gửi / xác thực với hàm #value
như bình thường. Đây là phương pháp ưa thích của tôi.'#access' => FALSE
trên phần tử để biểu thị nó không nên xuất ra màn hình.'#type' => 'hidden'
như Bart đã đề xuất (mặc dù việc sử dụng này phụ thuộc vào trường hợp sử dụng của bạn; tôi tưởng tượng nếu bạn đang cố gắng ẩn giá trị của một phần tử biểu mẫu mà bạn không muốn xuất nó dưới dạng đầu vào ẩn).hide()
không nên được sử dụng trên các phần tử biểu mẫu, nó có thể dễ dàng làm xáo trộn toàn bộ quá trình gửi biểu mẫu vì trình xác nhận vẫn đang chạy cho phần tử. Ví dụ: nếu bạn hide($form['title']);
ở dạng nút, bạn sẽ không thể gửi biểu mẫu, vì trường tiêu đề là bắt buộc, nhưng giá trị sẽ không được cung cấp. 3 phương pháp trên là những phương pháp tốt nhất để sử dụng, theo thứ tự đó :)
drupal_render($form['base']['prices']['sell_price'])
không hoạt động?
drupal_render()
, bạn sẽ không nhận được bất kỳ thẻ biểu mẫu / mã thông báo / v.v. trừ khi bạn xuất toàn bộ $form
mảng
Nếu bạn đang sử dụng tệp mẫu, bạn có thể ẩn nội dung bằng cách sử dụng ẩn () .
Nếu bạn muốn ẩn một phần tử biểu mẫu hook_form_alter
, unset()
có thể là lựa chọn tốt nhất của bạn.
Nếu chỉ để lưu trữ một giá trị, bạn cũng có thể sử dụng '#type' => 'hidden' .
drupal_render($form['base']['prices']['sell_price'])
sẽ hiển thị biểu mẫu, nhưng nó không tiết kiệm!
Tôi đã tìm thấy bằng cách sử dụng #access thành false có thể phá vỡ một số biểu mẫu nếu được sử dụng trên các nút gửi hoặc tương tự. Trong những trường hợp đó, tôi chỉ sử dụng CSS để ẩn các phần tử:
$form['basic']['submit']['#attributes']['class'][] = 'element-hidden';
Chỉ là một lựa chọn khác.