chỉ định các phần tử $ form được loại trừ khỏi màn hình?


20

Tôi muốn ẩn các thành phần nhất định trong biểu mẫu bằng form_alter hoặc tệp mẫu. Tôi đã đọc ở đâu đó rằng trong Drupal 7, chúng ta có thể chỉ định các phần tử $ form để nó không hiển thị dưới dạng, nhưng tôi không thể nhớ! Không unset () nhưng một số chức năng khác!

Câu trả lời:


29

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

  • Sử dụng '#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 #valuenhư bình thường. Đây là phương pháp ưa thích của tôi.
  • Sử dụng '#access' => FALSEtrên phần tử để biểu thị nó không nên xuất ra màn hình.
  • Sử dụng '#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).

quên giấu () .
Yusef

2
@zhilevan 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ự đó :)
Clive

@Clive cảm ơn, tôi biết các phương pháp trên, câu hỏi của tôi là một cái gì đó liên quan đến ẩn () tôi nghĩ (vẫn không thể nhớ chức năng) .. dù sao xin vui lòng tham khảo nhận xét của tôi trong câu trả lời đầu tiên, tại sao drupal_render($form['base']['prices']['sell_price'])không hoạt động?
Serjas

Có phải mã đó trong một tệp mẫu có chủ đề biểu mẫu không? Nếu không, lý do nó không hoạt động là vì trong khi bạn có thể in bất kỳ phần tử kết xuất nào ra màn hình 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ộ $formmảng
Clive

tôi đã sử dụng hook theme và print_r ($ form) và thậm chí cả drupal numnder ($ form ['title']) đang hoạt động, vấn đề là các yếu tố trong các tab vertcal!
Serjas

4

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' .


ẩn là phương pháp tốt hơn để exluce của phần tử.
Yusef

Những gì tôi đã cố gắng đạt được là một mẫu nút sản phẩm Ubsercart tùy chỉnh, tất cả những gì tôi muốn hiển thị là sell_price và ẩn các yếu tố khác như vận chuyển, trọng lượng, v.v. Nhưng drupal_render($form['base']['prices']['sell_price'])sẽ hiển thị biểu mẫu, nhưng nó không tiết kiệm!
Serjas

4

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.

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.