$ form öğeleri ekrandan hariç tutulacak mı?


20

Form_alter veya bir şablon dosyası kullanarak formdaki belirli öğeleri gizlemek istiyorum. Drupal 7'de $ form öğelerini formda görüntülenmeyecek şekilde belirtebileceğimiz bir yerde okudum, ama hatırlayamıyorum! Unset () değil, başka bir işlev!

Yanıtlar:


29

Kullanmak unset(), formlar için iyi bir çözüm değildir (bildiğini düşündüğüm gibi), ne zaman gönder / doğrula işleyicilerinin ayarlanmamış öğenin işlendiklerinde var olmasını beklediğini asla bilemeyeceğinizden. Bu istenmeyen hatalara neden olabilir.

Bir form öğesini 'gizlemek' için güvenle kullanabileceğiniz üç yöntem vardır

  • Öğe '#type' => 'value'için değerin #value, normalde olduğu gibi gönderme / doğrulama işlevlerine aktarılacağı etkisine sahip olacak öğe üzerinde kullanın . Bu benim tercih ettiğim yöntem.
  • '#access' => FALSEEkrana çıktısının verilmemesi gerektiğini belirtmek için öğe üzerinde kullanın .
  • '#type' => 'hidden'Bart'ın önerdiği gibi kullanın (bunun kullanımı sizin kullanım durumunuza bağlı olmasına rağmen; formda gizli bir girdi olarak çıktısını almak istemediğiniz bir form öğesinin değerini gizlemeye çalışıyorsanız).

gizlemeyi unuttum () .
Yusef

2
@zhilevan hide()form öğelerinde kullanılmamalıdır, tüm form gönderme işlemini öğe için doğrulayıcılar çalıştırıldığı için kolayca karıştırabilir. Örneğin, hide($form['title']);bir düğüm formundaysanız, başlık alanı gerektiği için formu gönderemezsiniz, ancak bir değer sağlanmaz. Yukarıdaki 3 yöntem, bu sırayla kullanmak için en iyi olanlarıdır :)
Clive

@Clive teşekkürler, yukarıdaki yöntemleri biliyorum, benim sorum hide () ile ilgili bir şey olduğunu düşünüyorum (hala fonksiyonu hatırlayamıyorum) .. yine de 1. cevap benim yorum bakın, neden drupal_render($form['base']['prices']['sell_price'])çalışmıyor?
Serjas

Bu kod, formda tema oluşturan bir şablon dosyasında mı? Değilse, çalışmamasının nedeni, ekrana herhangi bir oluşturma öğesini yazdırabildiğinizde drupal_render(), form etiketlerinden / jetonlarından / vb. bütün $formdiziyi vermedikçe
Clive

i kanca tema kullanılan ve print_r ($ form) ve hatta drupal_render ($ form ['başlık']) çalışıyor, sorun dikey sekmeler altında öğeleri!
Serjas

4

Bir şablon dosyası kullanıyorsanız, hide () kullanarak bir şeyler gizleyebilirsiniz .

Eğer bir form öğesi gizlemek istiyorsanız hook_form_alter, unset()en iyi seçenek olabilir.

Sadece bir değer saklamak için de '#type' => 'hidden' kullanabilirsiniz .


gizlemek eleman exluce için daha iyi bir yöntemdir.
Yusef

Ulaşmaya çalıştığım şey özel bir Ubsercart ürün düğümü formuydu, görüntülemek istediğim tek şey sell_price ve nakliye, ağırlık vb.Gibi diğer öğeleri gizleyecek. Ama drupal_render($form['base']['prices']['sell_price'])formu gösterecek, ancak kaydetmiyor !
Serjas

4

#Access to false kullanarak gönder düğmelerinde veya benzeri kullanılırsa bazı formları kırabilir buldum. Bu durumlarda sadece öğeleri gizlemek için CSS kullandım:

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

Sadece başka bir seçenek.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.