określić elementy formularza $, które mają zostać wykluczone z wyświetlania?
20
Chcę ukryć niektóre elementy w formularzu za pomocą form_alter lub pliku szablonu. Czytałem gdzieś, że w Drupal 7 możemy określić elementy $ form, aby nie były wyświetlane w formie, ale nie pamiętam! Nie unset (), ale inna funkcja!
Używanie unset()nie jest dobrym rozwiązaniem dla formularzy (jak myślę, że wiesz), ponieważ nigdy nie wiadomo, jakie procedury obsługi przesyłania / sprawdzania poprawności mogą oczekiwać, że element nieokreślony będzie istniał podczas ich przetwarzania. Może to prowadzić do niepożądanych błędów.
Istnieją trzy metody bezpiecznego ukrywania elementu formularza
Użyj '#type' => 'value'na elemencie, co spowoduje, że wartość elementu będzie nadal przekazywana do funkcji wysyłania / sprawdzania poprawności z jego #valuenormalną wartością. To jest moja preferowana metoda.
Użyj '#access' => FALSEna elemencie, aby zaznaczyć, że nie powinien być wyświetlany na ekranie.
Użyj '#type' => 'hidden'zgodnie z sugestią Bartka (chociaż użycie tego zależy od przypadku użycia; wyobrażam sobie, że jeśli próbujesz ukryć wartość elementu formularza, nie chcesz wyprowadzać go w formularzu jako ukrytego wejścia).
@zhilevan hide()nie powinien być używany w elementach formularza, może łatwo zepsuć cały proces wysyłania formularza, ponieważ weryfikatory są nadal uruchamiane dla elementu. Na przykład, jeśli jesteś hide($form['title']);w formularzu węzła, nigdy nie będziesz mógł przesłać formularza, ponieważ pole tytułu jest wymagane, ale nie zostanie podana wartość. 3 powyższe metody są najlepsze do użycia, w tej kolejności :)
Clive
@ Dziękuję, znam powyższe metody, moje pytanie było związane z hide () myślę (wciąż nie pamiętam funkcji) .. w każdym razie proszę odnieść się do mojego komentarza w pierwszej odpowiedzi, dlaczego drupal_render($form['base']['prices']['sell_price'])nie działa?
Serjas
Czy ten kod w pliku szablonu, który ma formę formularza? Jeśli nie, powodem, dla którego nie działa, jest to, że chociaż możesz wydrukować dowolny element renderujący na ekranie drupal_render(), nie otrzymasz żadnych tagów / tokenów / formularzy. chyba że wypiszesz całą $formtablicę
Clive
użyłem motywu haka i print_r ($ form), a nawet drupal_render ($ form ['tytuł']) działają, problemem są elementy pod zakładkami vertcal!
Serjas
4
Jeśli używasz pliku szablonu, możesz ukryć różne rzeczy za pomocą hide () .
Jeśli chcesz ukryć element formularza hook_form_alter, unset()może być najlepszą opcją.
To, co próbowałem osiągnąć, to niestandardowa forma węzła produktu Ubsercart, wszystko, co chciałem wyświetlić, to cena_sprzedania i ukryć inne elementy, takie jak wysyłka, waga itp. Ale drupal_render($form['base']['prices']['sell_price'])wyświetli formę, ale nie oszczędza!
Serjas
4
Odkryłem, że użycie #access do false może uszkodzić niektóre formularze, jeśli zostanie użyte w przyciskach przesyłania lub podobnych. W takich przypadkach użyłem CSS do ukrycia elementów:
hide()
nie powinien być używany w elementach formularza, może łatwo zepsuć cały proces wysyłania formularza, ponieważ weryfikatory są nadal uruchamiane dla elementu. Na przykład, jeśli jesteśhide($form['title']);
w formularzu węzła, nigdy nie będziesz mógł przesłać formularza, ponieważ pole tytułu jest wymagane, ale nie zostanie podana wartość. 3 powyższe metody są najlepsze do użycia, w tej kolejności :)drupal_render($form['base']['prices']['sell_price'])
nie działa?drupal_render()
, nie otrzymasz żadnych tagów / tokenów / formularzy. chyba że wypiszesz całą$form
tablicęJeśli używasz pliku szablonu, możesz ukryć różne rzeczy za pomocą hide () .
Jeśli chcesz ukryć element formularza
hook_form_alter
,unset()
może być najlepszą opcją.Jeśli ma to być tylko wartość, możesz użyć również „#type” => „hidden” .
źródło
drupal_render($form['base']['prices']['sell_price'])
wyświetli formę, ale nie oszczędza!Odkryłem, że użycie #access do false może uszkodzić niektóre formularze, jeśli zostanie użyte w przyciskach przesyłania lub podobnych. W takich przypadkach użyłem CSS do ukrycia elementów:
Po prostu inna opcja.
źródło