Jak zmienić lub usunąć błąd formularza wygenerowany przez Drupal lub inny moduł wstawiania / zapisywania węzłów dla określonego typu zawartości. Szukam metody, której mogę użyć w module.
Próbowałem hook_node_validate () , ale wszystko, co mogłem zrobić, to uzyskać błędy i ustawić błędy.
Formularze mają funkcje sprawdzania poprawności określone w $form['#validate']tablicy. A elementy formularza mają funkcje określone w $form['element_key']['#element_validate'].
Możesz określić swój własny w ten sposób:
/**
* 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.'));}}
Świetna odpowiedź! Jak zmieniłbyś tekst błędu - „Pole tytułu jest wymagane”. (jak na zdjęciu w pytaniu)? To jest bez użycia przesłonięcia łańcucha.
timofey.com
Innymi słowy, nie chcę dodawać sprawdzania poprawności, chcę tylko zmodyfikować komunikat o błędzie istniejącego sprawdzania poprawności ... może cofnąć istniejące sprawdzanie poprawności i dodać nowe?
timofey.com
1
Istniejąca walidacja nie jest funkcją zwrotną sprawdzania poprawności; tylko pole jest „wymagane”. Kombinacja moich dwóch ostatnich powyżej spowoduje usunięcie istniejącej wiadomości, a następnie dodanie innego rodzaju sprawdzania poprawności.
pjcdawkins
Muszę zmienić tylko komunikat sprawdzania poprawności. Chociaż zaimplementowałem powyższe rozwiązanie (autor hook_form_alter). Otrzymuję dwa komunikaty sprawdzające poprawność. 1 jeden domyślny i drugi, który napisałem. Wszelkie sugestie @pjcdawkins
innowacyjny kundan
6
Ponieważ ciąg używany do tego komunikatu o błędzie to „! Pole nazwy jest wymagane”. użycie modułu Zastępowanie ciągów lub zmiana ciągu do użycia w pliku settings.php spowodowałaby zmianę ciągu używanego dla każdego wymaganego pola formularza.
Jeśli chcesz zmienić ciąg błędu wyświetlany dla tytułu, gdy tytuł nie został wprowadzony, możesz:
Dodaj moduł obsługi sprawdzania poprawności formularza do formularza edycji węzła, używając hook_form_alter()
W tej formie moduł obsługi walidacji:
Sprawdź zawartość $form['title'](gdzie $formustawia się za pomocą $form = &drupal_static('form_set_error', array());i zmień ją na ciąg, który chcesz, kiedy jest'Title field is required.'
Sprawdź, czy $_SESSION['messages']['error'](tablica) zawiera ciąg 'Title field is required.'i zmień go na ciąg, który chcesz wyświetlić
Unikanie pokazania błędu jest łatwiejsze: po prostu ustaw #requiredwłaściwość na FALSE, a Drupal nie wyświetli tego komunikatu o błędzie.
Dzięki. Prawdopodobnie nie jest dobrym pomysłem korzystanie z nieobsługiwanego modułu, ale może służyć jako przewodnik!
timofey.com
1
Można dostosować komunikaty o błędach formularzy za pomocą funkcji Sprawdzanie poprawności pola według pola jednostki.
W tym celu edytuj ustawienia pola, przejdź do Sprawdzanie poprawności i dodaj nową regułę sprawdzania poprawności ( Pole wymagane ). Tam powinieneś mieć pole tekstowe, aby skonfigurować niestandardowy komunikat o błędzie dla tego pola.
W przypadku Drupala 8 mogłem dodać niestandardową funkcję sprawdzania poprawności, która może faktycznie sprawdzać istniejące błędy i zmieniać znaczniki błędów dla poszczególnych przypadków. W moim przypadku chciałem zmienić komunikat o błędzie z pola encja_autocomplete, które odnosiło się do użytkowników. Jeśli dodano nieprawidłowego użytkownika, błąd sprawdzania poprawności brzmiał: „Nie ma jednostek pasujących do% name”. Zamiast słowa „byty” chciałem, aby słowo „użytkownicy” było mniej przerażające i potencjalnie mylące dla użytkowników.
Najpierw używam hook_form_alter (), aby dodać moją funkcję sprawdzania poprawności:
Następnie w funkcji „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);}}}}}
Ponieważ ciąg używany do tego komunikatu o błędzie to „! Pole nazwy jest wymagane”. użycie modułu Zastępowanie ciągów lub zmiana ciągu do użycia w pliku settings.php spowodowałaby zmianę ciągu używanego dla każdego wymaganego pola formularza.
Jeśli chcesz zmienić ciąg błędu wyświetlany dla tytułu, gdy tytuł nie został wprowadzony, możesz:
hook_form_alter()
W tej formie moduł obsługi walidacji:
$form['title']
(gdzie$form
ustawia się za pomocą$form = &drupal_static('form_set_error', array());
i zmień ją na ciąg, który chcesz, kiedy jest'Title field is required.'
$_SESSION['messages']['error']
(tablica) zawiera ciąg'Title field is required.'
i zmień go na ciąg, który chcesz wyświetlićUnikanie pokazania błędu jest łatwiejsze: po prostu ustaw
#required
właściwość naFALSE
, a Drupal nie wyświetli tego komunikatu o błędzie.źródło
W przypadku drupala 7 możesz pobrać ten moduł http://drupal.org/node/1209450 w formacie zip, który da ci ten hak.
źródło
Można dostosować komunikaty o błędach formularzy za pomocą funkcji Sprawdzanie poprawności pola według pola jednostki.
W tym celu edytuj ustawienia pola, przejdź do Sprawdzanie poprawności i dodaj nową regułę sprawdzania poprawności ( Pole wymagane ). Tam powinieneś mieć pole tekstowe, aby skonfigurować niestandardowy komunikat o błędzie dla tego pola.
źródło
W przypadku Drupala 8 mogłem dodać niestandardową funkcję sprawdzania poprawności, która może faktycznie sprawdzać istniejące błędy i zmieniać znaczniki błędów dla poszczególnych przypadków. W moim przypadku chciałem zmienić komunikat o błędzie z pola encja_autocomplete, które odnosiło się do użytkowników. Jeśli dodano nieprawidłowego użytkownika, błąd sprawdzania poprawności brzmiał: „Nie ma jednostek pasujących do% name”. Zamiast słowa „byty” chciałem, aby słowo „użytkownicy” było mniej przerażające i potencjalnie mylące dla użytkowników.
Najpierw używam hook_form_alter (), aby dodać moją funkcję sprawdzania poprawności:
Następnie w funkcji „my_module_custom_user_validate”:
Mam nadzieję że to pomoże!
źródło