Como você altera ou remove um erro de formulário produzido pelo Drupal ou outro módulo no nó inserir / salvar, para um tipo de conteúdo específico. Estou procurando um método que eu possa usar em um módulo.
Eu tentei hook_node_validate () , mas tudo o que pude fazer é obter erros e definir erros.
Os formulários têm funções de validação especificadas na $form['#validate']matriz. E os elementos do formulário têm funções especificadas em $form['element_key']['#element_validate'].
Você pode especificar o seu próprio desta forma:
/**
* Implements hook_form_FORM_ID_alter().
*/function mymodule_form_node_form_alter(&$form,&$form_state){
$form['title']['#element_validate'][]='mymodule_validate_node_title';}/**
* Validate the node title to prevent ALL CAPS.
*/function mymodule_validate_node_title($element,&$form_state, $form){if(preg_match('/^[A-Z]+$/', $element['#value'])){
form_error($element, t('You may not enter titles in ALL CAPS.'));}}
Ótima resposta! Como você alteraria o texto de erro de - "O campo Título é obrigatório". (como mostrado na pergunta)? Isso sem usar substituições de string.
timofey.com
Em outras palavras, não quero adicionar validação, apenas modificar a mensagem de erro de uma validação existente ... talvez desmarque a validação existente e adicione uma nova?
timofey.com
11
A validação existente não é uma função de retorno de chamada de validação; é apenas que o campo é "obrigatório". Uma combinação dos dois últimos acima removeria a mensagem existente e adicionaria outro tipo de validação.
pjcdawkins
Eu preciso alterar apenas uma mensagem de validação. Embora eu tenha implementado a solução acima (por hook_form_alter). Estou recebendo duas mensagens de validação. 1 um padrão e 2 que eu escrevi. Quaisquer @pjcdawkins sugestão
kundan inovador
6
Como a string usada para essa mensagem de erro é "! Name field é obrigatória". usar o módulo Substituições de String ou alterar a string a ser usada no arquivo settings.php teria o efeito de alterar a string usada em todos os campos de formulário necessários.
Se você deseja alterar a sequência de erros mostrada para o título quando o título não foi inserido, você pode:
Inclua um manipulador de validação de formulário no formulário de edição do nó, usando hook_form_alter()
Nesse formulário, manipulador de validação:
Verifique o conteúdo de $form['title'](onde $formé definido usando $form = &drupal_static('form_set_error', array());e altere-o para a sequência desejada quando for'Title field is required.'
Verificar $_SESSION['messages']['error'](uma matriz) contém a sequência 'Title field is required.'e altere-a para a sequência que você deseja mostrar
Evitar mostrar o erro é mais fácil: basta definir a #requiredpropriedade como FALSE, e o Drupal não mostrará essa mensagem de erro.
Obrigado. Provavelmente não é uma boa ideia usar um módulo não suportado, mas pode ser usado como um guia!
timofey.com
1
Você pode personalizar as mensagens de erro do formulário usando a validação de campo por campo de entidade.
Para fazer isso, edite as configurações do campo, acesse Validação e adicione uma nova regra de validação ( campo obrigatório ). Lá, você deve ter um campo de texto para configurar a mensagem de erro personalizada para esse campo.
No Drupal 8, pude adicionar uma função de validação personalizada que pode realmente examinar os erros existentes e alterar a marcação dos erros por caso. No meu caso, eu queria alterar a mensagem de erro de um campo entity_autocomplete que referenciava usuários. Se um usuário inválido foi adicionado, o erro de validação dizia: "Não há entidades correspondentes a% name". Em vez da palavra "entidades", eu queria dizer "usuários", para ser menos assustador e potencialmente confuso para os usuários.
Primeiro, uso hook_form_alter () para adicionar minha função de validação:
Em seguida, na função 'my_module_custom_user_validate':
/**
* Custom form validation handler that alters default validation.
* @param $form
* @param \Drupal\Core\Form\FormStateInterface $form_state
*/function my_module_custom_user_validate(&$form,FormStateInterface $form_state){// Check for any errors on the form_state
$errors = $form_state->getErrors();if($errors){foreach($errors as $error_key => $error_val){// Check to see if the error is related to the desired field:if(strpos($error_key,'the_entity_reference_field_machine_name')!== FALSE){// Check for the word 'entities', which I want to replaceif(strpos($error_val->getUntranslatedString(),'entities')== TRUE){// Get the original args to pass into the new message
$original_args = $error_val->getArguments();// Re-construct the error
$error_val->__construct("There are no users matching the name %value", $original_args);}}}}}
Como a string usada para essa mensagem de erro é "! Name field é obrigatória". usar o módulo Substituições de String ou alterar a string a ser usada no arquivo settings.php teria o efeito de alterar a string usada em todos os campos de formulário necessários.
Se você deseja alterar a sequência de erros mostrada para o título quando o título não foi inserido, você pode:
hook_form_alter()
Nesse formulário, manipulador de validação:
$form['title']
(onde$form
é definido usando$form = &drupal_static('form_set_error', array());
e altere-o para a sequência desejada quando for'Title field is required.'
$_SESSION['messages']['error']
(uma matriz) contém a sequência'Title field is required.'
e altere-a para a sequência que você deseja mostrarEvitar mostrar o erro é mais fácil: basta definir a
#required
propriedade comoFALSE
, e o Drupal não mostrará essa mensagem de erro.fonte
Para o drupal 7, você pode fazer o download deste módulo http://drupal.org/node/1209450 em zip, que fornecerá esse gancho.
fonte
Você pode personalizar as mensagens de erro do formulário usando a validação de campo por campo de entidade.
Para fazer isso, edite as configurações do campo, acesse Validação e adicione uma nova regra de validação ( campo obrigatório ). Lá, você deve ter um campo de texto para configurar a mensagem de erro personalizada para esse campo.
fonte
No Drupal 8, pude adicionar uma função de validação personalizada que pode realmente examinar os erros existentes e alterar a marcação dos erros por caso. No meu caso, eu queria alterar a mensagem de erro de um campo entity_autocomplete que referenciava usuários. Se um usuário inválido foi adicionado, o erro de validação dizia: "Não há entidades correspondentes a% name". Em vez da palavra "entidades", eu queria dizer "usuários", para ser menos assustador e potencialmente confuso para os usuários.
Primeiro, uso hook_form_alter () para adicionar minha função de validação:
Em seguida, na função 'my_module_custom_user_validate':
Espero que isto ajude!
fonte