공통 언어파일에 보면 다음과 같이 설정 되어 있습니다. 

$lang->filter->isnull = '%s을 입력해주세요.';
$lang->filter->equalto = '%s이 잘못되었습니다.';
필터를 사용하다 보면 유효성 체크할때 다음과 같이 설정 되어서 '', 혹은 ''가 따라 올때가 있습니다.

 

예를 들면 '아이디를 입력해주세요!' 라고 출력하고 싶은데 '아이디을 입력해주세요' 라고 나오면 안되자나여

그것이 한가지 이유고 다른 한가지 이유는 Hidden InputBox 사용할때 유효성 체크하려면 입력할곳도 없는데 입력하라면 난감하죠.
'아이디 중복체크 안되어 있습니다.' 라고 출력하고 싶을때도 있거든요 . 그래서 다음과 같이 삽질 해봤습니다.

ps: XpressEngine Core ver. 1.4.5.7 기준입니다.

우선 두개 파일 수정 하셔야 합니다. 수정된 부분 뒤에는 다음과 같이 //******* 주석을 붙였습니다.
업데이트후 이부분이 수정될지 몰라도 기능 추가 하는거라서 다음과 같이 수정한다해서
기타 모듈이나 애드온에 부작용은 없을거에요.
더욱 좋은 방법있으나 에러 사항이 있다면 피드백 바랍니다 ^^*

/classes/xml/xmlJsFilter.class.php
 <?php
 // ... 중략...

   // 언어 입력을 위한 사용되는 필드 조사
   $target_list      = array();
   $custom_msg_list  = array();    //**************
   $target_type_list = array();

   // javascript contents
   $js_rules       = array();
   $js_messages    = array();

   $fields = array();

   // create custom rule
   if ($rules && $rules->rule) {
    if (!is_array($rules->rule)) $rules->rule = array($rules->rule);
    foreach($rules->rule as $r) {
     if ($r->attrs->type == 'regex') {
      $js_rules[] = "v.cast('ADD_RULE', ['{$r->attrs->name}', {$r->body}]);";
     }
    }
   }

   // field, 즉 체크항목의 script 생성
   $node_count = count($field_node);
   debugPrint($field_node);
   debugPrint($target_list);
   if($node_count) {
    foreach($field_node as $key =>$node) {
     $attrs  = $node->attrs;
     $target = trim($attrs->target);

     if(!$target) continue;

     $rule    = trim($attrs->rule?$attrs->rule:$attrs->filter);
     $equalto = trim($attrs->equalto);

     $field = array();

     if($attrs->required == 'true') $field[] = 'required:true';
     //커스텀 메세지 출력 수정 nick    **********************
     if($attrs->isnull) $field[] = "isnull:'{$attrs->isnull}'";  //**********
     if($attrs->equalto) $field[] = "equalto:'{$attr->equalto}'";  //********
     if($attrs->minlength > 0)      $field[] = 'minlength:'.$attrs->minlength;
     if($attrs->maxlength > 0)      $field[] = 'maxlength:'.$attrs->maxlength;
     if($equalto) $field[] = "equalto:'{$attrs->equalto}'";
     if($rule)    $field[] = "rule:'{$rule}'";

     $fields[] = "'{$target}': {".implode(',', $field)."}";

     if(!in_array($target, $target_list)) $target_list[] = $target;
     if($attrs->isnull){                                                                                            //************
      if(!in_array(trim($attrs->isnull), $custom_msg_list)) $custom_msg_list[] = trim($attrs->isnull);   //*************
     }      //*************
     if($attrs->equalto){    //*********
      if(!in_array(trim($attrs->equalto), $custom_msg_list)) $custom_msg_list[] = trim($attrs->equalto);  //************
     }                                                                                  //************
     if(!$target_type_list[$target]) $target_type_list[$target] = $filter;
    }
   }

   // extend_filter_item 체크
   $rule_types = array('homepage'=>'homepage', 'email_address'=>'email');
   debugPrint($extend_filter_list);
   debugPrint($target_list);
   for($i=0;$i<$extend_filter_count;$i++) {
    $filter_item = $extend_filter_list[$i];
    $target      = trim($filter_item->name);

    if(!$target) continue;

    // extend filter item의 type으로 rule을 구함
    $type  = $filter_item->type;
    $rule  = $rule_types[$type]?$rule_types[$type]:'';
    $required = ($filter_item->required == 'true');

    $field = array();
    if($required) $field[] = 'required:true';
    //커스텀 메세지 출력 수정 nick   ********************************
    if($filter_item->isnull) $field[] = "isnull:'{$filter_item->isnull}'";   //*************
    if($filter_item->equalto) $field[] = "equalto:'{$filter_item->equalto}'";   //*************
    if($rule)     $field[] = "rule:'{$rule}'";
    $fields[] = "\t\t'{$target}' : {".implode(',', $field)."}";

    if(!in_array($target, $target_list)) $target_list[] = $target;
    if($attrs->isnull){                                                                                            //************
     if(!in_array(trim($attrs->isnull), $custom_msg_list)) $custom_msg_list[] = trim($filter_item->isnull);  //************
    }                                                                                                           //************
    if($attrs->equalto){                                                                                            //************
     if(!in_array(trim($attrs->equalto), $custom_msg_list)) $custom_msg_list[] = trim($filter_item->equalto);  //************
    }                                                                                                           //************
    if(!$target_type_list[$target]) $target_type_list[$target] = $type;
   }
   
   // 데이터를 만들기 위한 parameter script 생성
   $rename_params   = array();
   $parameter_count = count($parameter_param);
   if($parameter_count) {
    // 기본 필터 내용의 parameter로 구성
    foreach($parameter_param as $key =>$param) {
     $attrs  = $param->attrs;
     $name   = trim($attrs->name);
     $target = trim($attrs->target);

     //if($name && $target && ($name != $target)) $js_doc[] = "\t\tparams['{$name}'] = params['{$target}']; delete params['{$target}'];";
     if($name && $target && ($name != $target))  $rename_params[] = "'{$target}':'{$name}'";
     if($name && !in_array($name, $target_list)) $target_list[] = $name;
    }

    // extend_filter_item 체크
    for($i=0;$i<$extend_filter_count;$i++) {
     $filter_item = $extend_filter_list[$i];
     $target = $name = trim($filter_item->name);
     if(!$name || !$target) continue;

     if(!in_array($name, $target_list)) $target_list[] = $name;
    }
   }

   // response script 생성
   $response_count = count($response_tag);
   $responses = array();
   for($i=0;$i<$response_count;$i++) {
    $attrs = $response_tag[$i]->attrs;
    $name = $attrs->name;
    $responses[] = "'{$name}'";
   }

   // lang : 사용자 정의 메세지 언어 생성 nick  ***************
   $custom_msg_count = count($custom_msg_list);   //**************
   for($i=0;$i<$custom_msg_count;$i++) {    //**************
    $custom_msg = $custom_msg_list[$i];                 //**************
    if(!$lang->{$custom_msg}) $lang->{$custom_msg} = $custom_msg;                 //**************
    $js_messages[] = sprintf("v.cast('ADD_MESSAGE',['%s','%s']);", $custom_msg, addslashes($lang->{$custom_msg}));      //**************
   }                                                                                                                //**************
   
// ... 중략...
?>

 

다음은 API_VALIDATE 부분만 다음과 같이 수정고,

 

/common/js/xml_js_filter.js
 API_VALIDATE: function (sender, params) {
            var self = this,
                result = true,
                form = params[0],
                filter = null,
                callback = null;
            if (form.elements['_filter']) filter = form.elements['_filter'].value;
            if (!filter) return true;
            if ($.isFunction(callbacks[filter])) callback = callbacks[filter];
            filter = $.extend({}, filters[filter.toLowerCase()] || {}, extras);
            $.each(filter, function (name) {
                var _el = form.elements[name];
                if (!_el) return true;
                var el = $(_el),
                    val = $.trim(get_value(el));
                var minlen = parseInt(this.minlength) || 0;
                var maxlen = parseInt(this.maxlength) || 0;
                var rule = (this.rule || '').split(',');
                if(this.isnull){        //**********
                    if (this.required && !val) return (result = (!!self.cast('ALERT', [form, name, this.isnull,'','','custum_msg']) && false));        //*********
                }        //*********
                else{         //*********
                    if (this.required && !val) return (result = ( !! self.cast('ALERT', [form, name, 'isnull']) && false));
                }        //*********
                 if (!this.required && !val) return (result = true);
                if ((minlen && val.length < minlen) || (maxlen && val.length > maxlen)) return (result = (!!self.cast('ALERT', [form, name, 'outofrange', minlen, maxlen]) && false));

                var equalto = (this.equalto) ? this.equalto : 'equalto';
                if (this.equalto) {
                    var eq_val = get_value($(form.elements[this.equalto]));
                    //if (eq_val != val) return (result = (!!self.cast('ALERT', [form, name, 'equalto']) && false));        //**********
                    if (eq_val != val) return (result = (!!self.cast('ALERT', [form, name, equalto]) && false));          //**********
                }
                if (rule) {
                    $.each(rule, function (i, r) {
                        if (!r) return true;
                        var ret = self.cast('APPLY_RULE', [r, val]);
                        if (!ret) {
                            self.cast('ALERT', [form, name, 'invalid_' + this]);
                            return (result = false);
                        }
                    });
                }
                if (!result) return false;
            });
            if (!result) return false;
            if ($.isFunction(callback)) return callback(form);
            return true;
        }
//... 중략...

        API_ALERT: function (sender, params) {
            var form = params[0];
            var field_name = params[1];
            var msg_code = params[2];
            var minlen = params[3];
            var maxlen = params[4];
            var field_msg = this.cast('GET_MESSAGE', [field_name]);
            var msg = this.cast('GET_MESSAGE', [msg_code]);
            var is_custum_msg = params[5];        //**********
            if (msg != msg_code && !is_custum_msg) msg = (msg.indexOf('%s') < 0) ? (field_msg + msg) : (msg.replace('%s', field_msg));        //**********
            if (minlen || maxlen) msg += '(' + (minlen || '') + '~' + (maxlen || '') + ')';
            this.cast('SHOW_ALERT', [msg]);
            $(form.elements[field_name]).focus();
        },


 

다음과 같이 isnull 혹은 equalto 를 추가 한다음
<
node target="user_id" required="true" filter="userid" isnull="custum_isnull_user_id" equalto="custum_equalto_user_id" />

그 다음 언어 파일에서 다음과 같이 추가 하시면 됩니다.
$lang->custum_isnull_user_id = '아이디를 입력하세요';

profile

여행은 나에게 많은 인연을 선물 해준다.

 여행은 나에게 욕심 버리는 법을 배워준다.

  여행은 나에게 더 큰 도전과 꿈을 갖게 한다.

문서 첨부 제한 : 0Byte/ 2.00MB
파일 제한 크기 : 2.00MB (허용 확장자 : *.*)
Tag List