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 #valuenormalną wartością. To jest moja preferowana metoda.'#access' => FALSEna 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łą $formtablicę
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.