특정 컨텐츠 유형에 대해 Drupal 또는 노드 삽입 / 저장시 다른 모듈에서 생성 된 양식 오류를 어떻게 변경하거나 제거합니까? 모듈에서 사용할 수있는 방법을 찾고 있습니다.
hook_node_validate () 시도했지만 오류가 발생하여 오류를 설정하기 만하면 됩니다.

특정 컨텐츠 유형에 대해 Drupal 또는 노드 삽입 / 저장시 다른 모듈에서 생성 된 양식 오류를 어떻게 변경하거나 제거합니까? 모듈에서 사용할 수있는 방법을 찾고 있습니다.
hook_node_validate () 시도했지만 오류가 발생하여 오류를 설정하기 만하면 됩니다.

답변:
단일 문자열의 텍스트를 변경하려면 가장 간단한 방법은 문자열 재정의 모듈을 사용하는 것입니다. 문자열을 바꿀 수 있습니다.
"! 이름 필드가 필요합니다."
(예를 들어) :
" '! name'필드가 필요합니다."
필드를 불필요하게 만들려면 일반적인 hook_form_alter () 구현을 사용하십시오.
/**
* Implements hook_form_FORM_ID_alter().
*/
function mymodule_form_node_form_alter(&$form, &$form_state) {
$node = $form['#node'];
if ($node->type == 'my_custom_type') {
$form['title']['#required'] = FALSE;
}
}
양식에는 $form['#validate']배열에 지정된 유효성 검사 기능이 있습니다 . 양식 요소에는에 지정된 함수가 $form['element_key']['#element_validate']있습니다.
다음과 같이 자신을 지정할 수 있습니다.
/**
* 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.'));
}
}
해당 오류 메시지에 사용 된 문자열은 "! 이름 필드가 필요합니다."이므로 사용하여 문자열 오버라이드 (override)의 문자열을 모듈 또는 변경하면 모든 필요한 양식 필드에 사용되는 문자열을 변경하는 효과를 가질 것이다 settings.php 파일에 사용할 수 있습니다.
제목을 입력하지 않았을 때 제목에 표시된 오류 문자열을 변경하려는 경우 다음을 수행 할 수 있습니다.
hook_form_alter()해당 형식의 유효성 검사기에서
$form['title'](를 $form사용하여 설정 한 $form = &drupal_static('form_set_error', array());경우 원하는 문자열로 변경하십시오.'Title field is required.'$_SESSION['messages']['error'](배열)에 문자열이 포함되어 있는지 확인 'Title field is required.'하고 표시하려는 문자열로 변경하십시오.오류를 표시 하지 않는 것이 더 쉽습니다. #required속성을로 설정하면 FALSEDrupal이 해당 오류 메시지를 표시하지 않습니다.
drupal 7의 경우이 모듈 http://drupal.org/node/1209450 을 우편으로 다운로드 하면이 후크를 얻을 수 있습니다.
message_alter(&$messages) {
}
엔터티 당 필드 유효성 검사 필드 를 사용하여 양식 오류 메시지를 사용자 지정할 수 있습니다 .
이를 수행하려면 필드 설정을 편집하고 유효성 검증으로 이동하여 새 유효성 검증 규칙을 추가하십시오 ( 필수 필드 ). 거기 에 해당 필드에 대한 사용자 정의 오류 메시지 를 설정하는 텍스트 필드가 있어야합니다 .
Drupal 8의 경우, 기존 오류를 실제로 검사하고 사례별로 오류 마크 업을 변경할 수있는 사용자 지정 유효성 검사 기능을 추가 할 수있었습니다. 필자의 경우 사용자를 참조하는 entity_autocomplete 필드에서 오류 메시지를 변경하고 싶었습니다. 유효하지 않은 사용자가 추가 된 경우 유효성 검사 오류에 "% name과 (와) 일치하는 엔터티가 없습니다"라는 메시지가 표시됩니다. "엔터티"라는 단어 대신 "사용자"라고 말하고 싶지 않아 사용자에게 덜 무섭고 혼동을 줄 수있었습니다.
먼저 hook_form_alter ()를 사용하여 validate 함수를 추가합니다.
/**
* Implements hook_form_alter().
*/
function my_module_form_alter(&$form, FormStateInterface $form_state, $form_id) {
if (in_array($form_id, ['whatever_form_id_you_need_to_alter'])) {
// Add entity autocomplete custom form validation messages alter.
array_unshift($form['#validate'], 'my_module_custom_user_validate');
}
그런 다음 '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 replace
if (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);
}
}
}
}
}
도움이 되었기를 바랍니다!