답변:
인라인 양식 오류 모듈은 그 기능이 있습니다 :
IFE 또는 인라인 양식 오류를 사용하면 양식 제출 오류를 양식 요소와 함께 배치 할 수 있습니다. 인라인 오류 동작을 설정하기위한 세 가지 옵션이 제공됩니다. 기본 동작을 구성하거나 양식별로 동작을 재정의 할 수 있습니다. 원하는만큼 양식을 추가 할 수 있습니다.
Drupal 7 릴리스는 알파 버전이지만 시도해 볼 가치가 있다고 말합니다. 문제가 있더라도 자신의 버전을 구현하기에 좋은 장소가 될 것입니다. 다음은 모듈 스크린 샷입니다.

Clive의 (올바른) 답변을 확장하면서 IFE 코드를 살펴 보았습니다. 나는 이것에 전념하는 전체 모듈이 실제로 필요하지 않았으므로 여기에 몇 가지 스 니펫을 채택하여 필요한 결과를 얻었습니다. 나는 그것이 정답이라고 결론을 내리기 때문에 그의 대답을 올바른 것으로 표시했다.
코드는 다음과 같습니다. 모든 크레딧은 Clive와 IFE 팀에 전달됩니다. 비슷한 답변을 원하는 사람을 위해 간단한 버전을 제시하고 싶었습니다.
// Standard gear - do some custom validation and set the errors
// as you go..
//
// Once all the validation has been done, call MODULE_errors_reset
// which will return an array of all errors against their ID.
// Expose this array however you like to your template, or loop
// over your form adding a #suffix to each element with an error
//
function MODULE_form_name_validate($form, &$form_state) {
drupal_set_message("validating...");
form_set_error("description", "There is an error here!!!!");
form_set_error("tags", "Yep, and here too!!!");
$reset_errors = MODULE_errors_reset( $form );
drupal_set_message( "<pre>" . print_r( $reset_errors, true ) . "</pre>" );
}
// This part is adopted from IFE. It's changed in two ways, it returns
// an array (which also merges with its recursive self).
// And it also skips all the 'display' stuff present in the original
// Essentially it extracts out the error messages from the session and unsets
// them. I am assuming that Drupal 7 marks the success of a validation based not
// whether the SESSION variable contains anything, the SESSION seems to be only
// for the message at the top of the screen.
//
function MODULE_errors_reset( $element ) {
if( ! isset( $_SESSION[ 'messages' ] ) ) {
return;
}
$reset_errors = array();
// Recurse through all children.
foreach( element_children( $element ) as $key ) {
if( isset( $element[ $key ] ) && $element[ $key ] ) {
$reset_errors += MODULE_errors_reset( $element[ $key ] );
}
}
// Check for errors and settings
$errors = form_get_errors();
$element_id = implode( '][', $element[ '#parents' ] );
if ( !empty( $errors[ $element_id ] )) {
$error_message = $errors[ $element_id ];
// Get error id
$error_id = array_search( $error_message, $_SESSION[ 'messages' ][ 'error' ] );
if( $error_id !== FALSE ) {
unset( $_SESSION[ 'messages' ][ 'error' ][ $error_id ] );
$_SESSION[ 'messages' ][ 'error' ] = array_values( $_SESSION[ 'messages' ][ 'error' ] );
if( count( $_SESSION[ 'messages' ][ 'error' ] ) <= 0 ) {
unset( $_SESSION[ 'messages' ][ 'error' ] );
}
$reset_errors[ $element[ '#id' ] ] = $error_message;
}
}
return $reset_errors;
}
// If there are no form errors, we still hit here, even after the 'reset', this is
// a good thing.
function MODULE_form_name_submit( $form, &$form_submit ) {
drupal_set_message("submited!");
}