XmlJsFilter 클래스 참조

filter xml문서를 해석하여 js파일로 만듬 더 자세히 ...

XmlJsFilter에 대한 상속 다이어그램 :
Inheritance graph
XmlJsFilter에 대한 협력 다이어그램:
Collaboration graph

모든 멤버 목록

Public 멤버 함수

 XmlJsFilter ($path, $xml_file)
 constructor
 compile ()
 원 xml파일과 compiled된js파일의 시간 비교 및 유무 비교등을 처리
 _compile ()
 실제 xml_file을 컴파일하여 js_file을 생성
 _getCompiledFileName ($xml_file)
 $xml_file로 compiled_xml_file이름을 return

Public 속성

 $compiled_path = './files/cache/js_filter_compiled/'
 컴파일된 캐시 파일이 놓일 위치
 $xml_file = NULL
 대상 xml 파일
 $js_file = NULL
 컴파일된 js 파일

상세한 설명

filter xml문서를 해석하여 js파일로 만듬

작성자:
zero (zero@nzeo.com)
버전:
0.1

xml filter 파일은 js script로 컴파일 되어 캐싱됨

<filter name="js function 이름" act="서버에 요청할 action 이름" confirm_msg_code="submit시에 prompt로 물어볼 메세지의 코드"> <form> <-- 폼 항목의 체크 <node target="name" required="true" minlength="1" maxlength="5" filter="email,userid,alpha,number" equalto="target"> </form> <parameter> <-- 폼 항목을 조합하여 key=val 의 js array로 return, act는 필수

매개변수:
key </parameter> <response callback_func="callback 받게 될 js function 이름 지정"> <-- 서버에 ajax로 전송하여 받을 결과값 <tag name="error"> <-- error이름의 결과값을 받겠다는 것 </response> </filter>

XmlJsFilter.class.php 파일의 41 번째 라인에서 정의되었습니다.


멤버 함수 문서화

XmlJsFilter::_compile (  ) 

실제 xml_file을 컴파일하여 js_file을 생성

XmlJsFilter.class.php 파일의 68 번째 라인에서 정의되었습니다.

다음을 참조함 : XmlParser::$lang, getModel(), XmlParser::parse(), FileHandler::readFile().

다음에 의해서 참조됨 : compile().

00068                             {
00069             global $lang;
00070 
00071             // xml 파일을 읽음
00072             $buff = FileHandler::readFile($this->xml_file);
00073 
00074             // xml parsing
00075             $xml_obj = parent::parse($buff);
00076 
00077             // XmlJsFilter는 filter_name, field, parameter 3개의 데이터를 핸들링
00078             $filter_name = $xml_obj->filter->attrs->name;
00079             $confirm_msg_code = $xml_obj->filter->attrs->confirm_msg_code;
00080             $module = $xml_obj->filter->attrs->module;
00081             $act = $xml_obj->filter->attrs->act;
00082             $extend_filter = $xml_obj->filter->attrs->extend_filter;
00083 
00084             $field_node = $xml_obj->filter->form->node;
00085             if($field_node && !is_array($field_node)) $field_node = array($field_node);
00086 
00087             $parameter_param = $xml_obj->filter->parameter->param;
00088             if($parameter_param && !is_array($parameter_param)) $parameter_param = array($parameter_param);
00089 
00090             $response_tag = $xml_obj->filter->response->tag;
00091             if($response_tag && !is_array($response_tag)) $response_tag = array($response_tag);
00092 
00093             // extend_filter가 있을 경우 해당 method를 호출하여 결과를 받음
00094             if($extend_filter) {
00095 
00096                 // extend_filter가 있을 경우 캐시 사용을 못하도록 js 캐시 파일명을 변경
00097                 $this->js_file .= '.nocache.js';
00098 
00099                 // extend_filter는 module.method 로 지칭되어 이를 분리
00100                 list($module_name, $method) = explode('.',$extend_filter);
00101 
00102                 // 모듈 이름과 method가 있을 경우 진행
00103                 if($module_name&&$method) {
00104                     // 해당 module의 model 객체를 받음
00105                     $oExtendFilter = &getModel($module_name);
00106 
00107                     // method가 존재하면 실행
00108                     if(method_exists($oExtendFilter, $method)) {
00109                         // 결과를 받음
00110                         //$extend_filter_list = call_user_method($method, $oExtendFilter, true);
00111                         //$extend_filter_list = call_user_func(array($oExtendFilter, $method));
00112                         $extend_filter_list = $oExtendFilter->{$method}(true);
00113                         $extend_filter_count = count($extend_filter_list);
00114 
00115                         // 결과에서 lang값을 이용 문서 변수에 적용
00116                         for($i=0;$i<$extend_filter_count;$i++) {
00117                             $name = $extend_filter_list[$i]->name;
00118                             $lang_value = $extend_filter_list[$i]->lang;
00119                             if($lang_value) $lang->{$name} = $lang_value;
00120                         }
00121                     } 
00122 
00123                 }
00124             }
00125 
00126             $callback_func = $xml_obj->filter->response->attrs->callback_func;
00127             if(!$callback_func) $callback_func = "filterAlertMessage";
00128 
00129             // 언어 입력을 위한 사용되는 필드 조사
00130             $target_list = array();
00131             $target_type_list = array();
00132 
00133             // js function 을 만들기 시작
00134             $js_doc  = sprintf("function %s(fo_obj) {\n", $filter_name);
00135             $js_doc .= sprintf("\tvar oFilter = new XmlJsFilter(fo_obj, \"%s\", \"%s\", %s);\n", $module, $act, $callback_func);
00136 
00137             // field, 즉 체크항목의 script 생성
00138             $node_count = count($field_node);
00139             if($node_count) {
00140                 foreach($field_node as $key =>$node) {
00141                     $attrs = $node->attrs;
00142                     $target = trim($attrs->target);
00143                     if(!$target) continue;
00144                     $required = $attrs->required=='true'?'true':'false';
00145                     $minlength = $attrs->minlength>0?$attrs->minlength:'0';
00146                     $maxlength = $attrs->maxlength>0?$attrs->maxlength:'0';
00147                     $equalto = trim($attrs->equalto);
00148                     $filter = $attrs->filter;
00149 
00150                     $js_doc .= sprintf(
00151                         "\toFilter.addFieldItem(\"%s\",%s,%s,%s,\"%s\",\"%s\");\n",
00152                         $target, $required, $minlength, $maxlength, $equalto, $filter
00153                     );
00154 
00155                     if(!in_array($target, $target_list)) $target_list[] = $target;
00156                     if(!$target_type_list[$target]) $target_type_list[$target] = $filter;
00157                 }
00158             }
00159 
00160             // extend_filter_item 체크
00161             for($i=0;$i<$extend_filter_count;$i++) {
00162                 $filter_item = $extend_filter_list[$i];
00163                 $target = trim($filter_item->name);
00164                 if(!$target) continue;
00165                 $type = $filter_item->type;
00166                 $required = $filter_item->required?'true':'false';
00167 
00168                 // extend filter item의 type으로 filter를 구함
00169                 switch($type) {
00170                     case 'homepage' :
00171                             $filter = 'homepage';
00172                         break;
00173                     case 'email_address' :
00174                             $filter = 'email';
00175                         break;
00176                     default :
00177                             $filter = '';
00178                         break;
00179                 }
00180 
00181                 $js_doc .= sprintf(
00182                     "\toFilter.addFieldItem(\"%s\",%s,%s,%s,\"%s\",\"%s\");\n",
00183                     $target, $required, 0, 0, '', $filter
00184                 );
00185 
00186                 if(!in_array($target, $target_list)) $target_list[] = $target;
00187                 if(!$target_type_list[$target]) $target_type_list[$target] = $type;
00188 
00189             }
00190 
00191             // 데이터를 만들기 위한 parameter script 생성
00192             $parameter_count = count($parameter_param);
00193             if($parameter_count) {
00194                 // 기본 필터 내용의 parameter로 구성
00195                 foreach($parameter_param as $key =>$param) {
00196                     $attrs = $param->attrs;
00197                     $name = trim($attrs->name);
00198                     $target = trim($attrs->target);
00199                     if(!$name || !$target) continue;
00200                     $target = htmlentities($target,ENT_QUOTES);
00201 
00202                     $js_doc .= sprintf(
00203                         "\toFilter.addParameterItem(\"%s\",\"%s\");\n",
00204                         $name, $target
00205                     );
00206                     if(!in_array($name, $target_list)) $target_list[] = $name;
00207                 }
00208 
00209                 // extend_filter_item 체크
00210                 for($i=0;$i<$extend_filter_count;$i++) {
00211                     $filter_item = $extend_filter_list[$i];
00212                     $target = $name = trim($filter_item->name);
00213                     if(!$name || !$target) continue;
00214                     $target = htmlentities($target,ENT_QUOTES);
00215 
00216                     $js_doc .= sprintf(
00217                         "\toFilter.addParameterItem(\"%s\",\"%s\");\n",
00218                         $name, $target
00219                     );
00220                     if(!in_array($name, $target_list)) $target_list[] = $name;
00221                 }
00222             }
00223 
00224             // response script 생성
00225             $response_count = count($response_tag);
00226             for($i=0;$i<$response_count;$i++) {
00227                 $attrs = $response_tag[$i]->attrs;
00228                 $name = $attrs->name;
00229                 $js_doc .= sprintf("\toFilter.addResponseItem(\"%s\");\n", $name);
00230             }
00231 
00232             if($confirm_msg_code) $js_doc .= sprintf("\treturn oFilter.proc(\"%s\");\n",str_replace('"','\"',$lang->{$confirm_msg_code}));
00233             else $js_doc .= sprintf("\treturn oFilter.proc();\n");
00234             $js_doc .= "}\n";
00235 
00236             // form 필드 lang 값을 기록
00237             $target_count = count($target_list);
00238             for($i=0;$i<$target_count;$i++) {
00239                 $target = $target_list[$i];
00240                 if(!$lang->{$target}) $lang->{$target} = $target;
00241                 $js_doc .= sprintf("alertMsg[\"%s\"] = \"%s\";\n", $target, str_replace("\"","\\\"",$lang->{$target}));
00242             }
00243 
00244             // target type을 기록
00245             $target_type_count = count($target_type_list);
00246             if($target_type_count) {
00247                 foreach($target_type_list as $target => $type) {
00248                     $js_doc .= sprintf("target_type_list[\"%s\"] = \"%s\";\n", $target, $type);
00249                 }
00250             }
00251 
00252             // 에러 메세지를 기록
00253             foreach($lang->filter as $key => $val) {
00254                 if(!$val) $val = $key;
00255                 $js_doc .= sprintf("alertMsg[\"%s\"] = \"%s\";\n", $key, str_replace("\"","\\\"",$val));
00256             }
00257 
00258             // js파일 생성
00259             FileHandler::writeFile($this->js_file, $js_doc);
00260         }

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

XmlJsFilter::_getCompiledFileName ( xml_file  ) 

$xml_file로 compiled_xml_file이름을 return

XmlJsFilter.class.php 파일의 265 번째 라인에서 정의되었습니다.

다음을 참조함 : Context::getLangType().

다음에 의해서 참조됨 : XmlJsFilter().

00265                                                  {
00266             return sprintf('%s%s.%s.compiled.js',$this->compiled_path, md5($xml_file),Context::getLangType());
00267         }

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

XmlJsFilter::compile (  ) 

원 xml파일과 compiled된js파일의 시간 비교 및 유무 비교등을 처리

XmlJsFilter.class.php 파일의 58 번째 라인에서 정의되었습니다.

다음을 참조함 : _compile(), Context::addJsFile().

00058                            {
00059             if(!file_exists($this->xml_file)) return;
00060             if(!file_exists($this->js_file)) $this->_compile();
00061             else if(filemtime($this->xml_file)>filemtime($this->js_file)) $this->_compile();
00062             Context::addJsFile($this->js_file);
00063         }

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

XmlJsFilter::XmlJsFilter ( path,
xml_file 
)

constructor

XmlJsFilter.class.php 파일의 49 번째 라인에서 정의되었습니다.

다음을 참조함 : $xml_file, _getCompiledFileName().

00049                                                {
00050             if(substr($path,-1)!=='/') $path .= '/';
00051             $this->xml_file = sprintf("%s%s",$path, $xml_file);
00052             $this->js_file = $this->_getCompiledFileName($this->xml_file);
00053         }

이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:


멤버 데이타 문서화

XmlJsFilter::$compiled_path = './files/cache/js_filter_compiled/'

컴파일된 캐시 파일이 놓일 위치

XmlJsFilter.class.php 파일의 42 번째 라인에서 정의되었습니다.

XmlJsFilter::$js_file = NULL

컴파일된 js 파일

XmlJsFilter.class.php 파일의 44 번째 라인에서 정의되었습니다.

XmlJsFilter::$xml_file = NULL

대상 xml 파일

XmlJsFilter.class.php 파일의 43 번째 라인에서 정의되었습니다.

다음에 의해서 참조됨 : XmlJsFilter().


이 클래스에 대한 문서화 페이지는 다음의 파일로부터 생성되었습니다.:

생성시간 : Wed Oct 28 23:01:32 2009, 프로젝트명 : XpressEngine, 생성자 :   doxygen 1.6.1