Respostas:
Usar unset()
não é uma boa solução para formulários (como eu acho que você sabe), pois você nunca sabe o que os manipuladores de envio / validação podem esperar que o elemento não definido exista quando processados. Isso pode levar a erros indesejados.
Existem três métodos que você pode usar com segurança para 'ocultar' um elemento do formulário
'#type' => 'value'
o elemento, que terá o efeito de que o valor do elemento ainda será transmitido para as funções de envio / validação, #value
como normalmente. Este é o meu método preferido.'#access' => FALSE
o elemento para indicar que ele não deve ser transmitido para a tela.'#type' => 'hidden'
como Bart sugeriu (embora o uso disso dependa do seu caso de uso; imagino que, se você estiver tentando ocultar o valor de um elemento do formulário, não deseja produzi-lo no formulário como uma entrada oculta).hide()
não deve ser usado em elementos de formulário, ele pode facilmente atrapalhar todo o processo de envio de formulários, pois os validadores ainda são executados para o elemento. Por exemplo, se você hide($form['title']);
em um formulário de nó, nunca poderá enviar o formulário, pois o campo de título é obrigatório, mas um valor não será fornecido. Os 3 métodos acima são os mais adequados para usar, por esta ordem :)
drupal_render($form['base']['prices']['sell_price'])
não está funcionando?
drupal_render()
, não receberá nenhuma das tags / tokens / etc. a menos que você produza toda a $form
matriz
Se você estiver usando um arquivo de modelo, poderá ocultar itens usando hide () .
Se você deseja ocultar um elemento do formulário hook_form_alter
, unset()
pode ser sua melhor opção.
Se for apenas para armazenar um valor, você também pode usar '#type' => 'hidden' .
drupal_render($form['base']['prices']['sell_price'])
exibirá o formulário, mas não está economizando!