Estou tentando criar alguns dos campos de formulário do perfil Drupal como somente leitura no modo de edição. Estou usando o seguinte código em hook_alter
$form[field_organisation_company_name][und][0]['#after_build'][]='_build_element_readonly';
function _build_element_readonly($element, &$form_state) {
$element['value']['#attributes']['readonly'] = 'readonly';
return $element;
}
Na interface do usuário arquivada é exibida como somente leitura, mas ainda assim, posso alterar o valor usando o firebug e salvando. Existe alguma maneira de impedir esse comportamento?
field_permissions
seria mais fácil do que fazer o trabalho de maneira suja.Quando você define um campo como
readonly
, o navegador bloqueia o campo e envia os dados de volta ao servidor após o envio. Outro atributo édisabled
que bloqueia o campo e não envia dados de volta ao servidor.Nos dois casos, você pode definir com força o valor para ser o mesmo após o envio. Portanto, mesmo quando o campo estiver definido como
readonly
oudisabled
, e o usuário modificou o HTML e enviou dados diferentes,$form_state['values']
permanecerá inalterado.Observe que definimos a
#value
partir de #default_value. #default_value é a maneira usual de definir o valor padrão que é carregado quando o formulário é criado e$form_state['values']
conterá o default_value ou a entrada do usuário. Quando você define#value
explicitamente, a entrada do usuário é ignorada e#value
será usada.De qualquer forma, eu recomendaria usar
'#access' => FALSE,
ao ocultar elementos do formulário. Ele removerá o elemento completamente, permitindo que você use seus valores.fonte
Você não pode impedir que o Firebug altere os campos somente leitura. Mas se o campo de texto for somente leitura, o único objetivo é exibir dados. Então, por que não alterar o elemento de entrada em relação a um elemento de texto?
Você pode usar o atributo "disabled", porque os campos de entrada desativados não estão sendo enviados ao servidor.
Você também pode remover o atributo "disabled" com o firebug, mas o núcleo do drupal não reage às alterações dos campos de entrada desativados!
fonte
A maneira mais segura de fazer isso é alterar o tipo do campo para ser um 'item'. http://api.drupal.org/api/drupal/developer!topics!forms_api_reference.html/7#item
fonte
Você pode usar Permissões de campo + Campo somente leitura .
Permissões de campo permitirão que alguns de seus campos não sejam acessíveis a determinados usuários.
O campo Somente leitura permitirá exibir os campos não acessíveis como itens somente leitura nos formulários de edição (em vez de ocultá-los).
fonte
Eu acho que usar
#disabled = true;
é a maneira mais fácil de conseguir isso, em vez de adicionar algum módulo pesado ao seu núcleo, como exemplo, desabilito a edição do campo de imagem personalizada no user_profile_form quando ele é preenchido pelo usuário antes.Além disso, você pode verificar o papel do usuário e apenas desativar (campo somente leitura) para não usuários administrativos.
fonte