tentukan $ elemen untuk dikecualikan dari tampilan?

20

Saya ingin menyembunyikan elemen tertentu dalam formulir menggunakan form_alter atau file templat. Saya telah membaca di suatu tempat bahwa di Drupal 7, kita dapat menentukan elemen $ form sehingga tidak akan ditampilkan dalam bentuk, tapi saya tidak ingat! Bukan tidak disetel () tetapi beberapa fungsi lainnya!

Serja
sumber

Jawaban:

29

Menggunakan unset()bukanlah solusi yang baik untuk formulir (seperti yang saya pikir Anda tahu), karena Anda tidak pernah tahu apa yang diserahkan / divalidasi penangan mungkin mengharapkan elemen tidak disetel ada saat mereka diproses. Ini dapat menyebabkan kesalahan yang tidak diinginkan.

Ada tiga metode yang dapat Anda gunakan dengan aman untuk 'menyembunyikan' elemen formulir

  • Gunakan '#type' => 'value'pada elemen, yang akan memiliki efek bahwa nilai untuk elemen masih akan diteruskan ke fungsi submit / validasi dengan #valueseperti biasa. Ini adalah metode yang saya sukai.
  • Gunakan '#access' => FALSEpada elemen untuk menunjukkan itu tidak boleh di-output ke layar.
  • Gunakan '#type' => 'hidden'seperti yang disarankan Bart (walaupun penggunaan ini tergantung pada use case Anda; Saya bayangkan jika Anda mencoba menyembunyikan nilai elemen form yang tidak ingin Anda output dalam bentuk sebagai input tersembunyi).
Clive
sumber
lupa sembunyikan () .
Yusef
2
@ Zhilevan hide()tidak boleh digunakan pada elemen formulir, ini dapat dengan mudah mengacaukan seluruh proses pengiriman formulir karena validator masih berjalan untuk elemen tersebut. Misalnya, jika Anda hide($form['title']);pada formulir simpul Anda tidak akan pernah bisa mengirimkan formulir, karena bidang judul diperlukan, tetapi nilai tidak akan diberikan. 3 metode di atas adalah yang terbaik untuk digunakan, dalam urutan itu :)
Clive
@Clive terima kasih, saya tahu metode di atas, pertanyaan saya adalah sesuatu yang berkaitan dengan hide () saya pikir (masih tidak dapat mengingat fungsinya) .. pokoknya silakan lihat komentar saya di jawaban pertama, mengapa drupal_render($form['base']['prices']['sell_price'])tidak berfungsi?
Serjas
Apakah kode itu di file templat yang bertema formulir? Jika tidak, alasannya tidak berfungsi adalah bahwa saat Anda bisa mencetak elemen render ke layar drupal_render(), Anda tidak akan mendapatkan salah satu tag formulir / token / dll. kecuali jika Anda menampilkan seluruh $formarray
Clive
saya menggunakan tema hook dan print_r ($ form) dan bahkan drupal_render ($ form ['title']) berfungsi, masalahnya adalah elemen-elemen di bawah tab vertikal!
Serjas
4

Jika Anda menggunakan file templat, Anda dapat menyembunyikan barang menggunakan hide () .

Jika Anda ingin menyembunyikan elemen formulir hook_form_alter, unset()mungkin merupakan opsi terbaik Anda.

Jika hanya untuk menyimpan nilai, Anda dapat menggunakan '#type' => 'tersembunyi' juga.

Bart
sumber
hide adalah metode yang lebih baik untuk menambahkan elemen.
Yusef
Apa yang saya coba capai adalah bentuk simpul produk kustom Ubsercart, semua yang ingin saya tampilkan adalah sell_price, dan sembunyikan elemen lain seperti pengiriman, berat dll. Tapi drupal_render($form['base']['prices']['sell_price'])akan menampilkan formulir, tetapi tidak hemat!
Serjas
4

Saya menemukan menggunakan #access to false dapat memecah beberapa formulir jika digunakan pada tombol kirim atau yang serupa. Dalam kasus itu saya baru saja menggunakan CSS untuk menyembunyikan elemen:

$form['basic']['submit']['#attributes']['class'][] = 'element-hidden';

Hanya pilihan lain.

Tom James
sumber