Odpowiedzi:
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
'#type' => 'value'
na elemencie, co spowoduje, że wartość elementu będzie nadal przekazywana do funkcji wysyłania / sprawdzania poprawności z jego #value
normalną wartością. To jest moja preferowana metoda.'#access' => FALSE
na elemencie, aby zaznaczyć, że nie powinien być wyświetlany na ekranie.'#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).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” .
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:
$form['basic']['submit']['#attributes']['class'][] = 'element-hidden';
Po prostu inna opcja.