|
|
|
2. XML Js Filter (current)
|
SMaker |
2011.01.17 12:28:50 |
|
|
|
Restore
<h3> XML Js Filter</h3><p><a href="http://doc.xpressengine.com/classXmlJsFilter.html">http://doc.xpressengine.com/classXmlJsFilter.html</a> (클래스 구조)</p><p>XML Js Filter는 XML을 기반으로 하여 자바스크립트로 동작하는 Filter입니다.<br>폼의 입력 항목의 유효성 검사를 쉽게할 수 있고 AJAX를 이용해 서버의 특정 Module과 Action 통신을 하는 과정까지 모두 제어할 수 있습니다.</p><p>필수 항목 체크, 최소/최대 길이 제한, 입력값 확인 등의 기능을 지원합니다.<br></p><h3 id="문법소개및예제">문법 소개 및 예제</h3><p>아래는 XE내에서 실제로 사용하는 XML Js Filter의 예입니다.</p><ol class="code">
<li><filter name="insert_board" module="board" act="procBoardAdminInsertBoard" confirm_msg_code="confirm_submit" extend_filter="module.method_name"><br><form><br> <node target="mid" required="true" filter="alpha_number" /><br> <node target="browser_title" required="true" maxlength="250" /><br> <node target="list_count" required="true" filter="number" /><br> <node target="page_count" required="true" filter="number" /><br></form></li>
<li><br><parameter><br> <param name="board_name" target="mid" /><br> <param name="module_srl" target="module_srl" /><br> <param name="module_category_srl" target="module_category_srl" /><br> <param name="layout_srl" target="layout_srl" /><br> <param name="skin" target="skin" /><br> <param name="browser_title" target="browser_title" /><br> <param name="use_category" target="use_category" /><br> <param name="list_count" target="list_count" /><br> <param name="page_count" target="page_count" /><br> <param name="is_default" target="is_default" /><br> <param name="description" target="description" /><br> <param name="header_text" target="header_text" /><br> <param name="footer_text" target="footer_text" /><br> <param name="admin_id" target="admin_id" /><br> <param name="open_rss" target="open_rss" /><br></parameter></li>
<li><br><response callback_func="completeInsertBoard"><br> <tag name="error" /><br> <tag name="message" /><br> <tag name="module" /><br> <tag name="act" /><br> <tag name="page" /><br> <tag name="module_srl" /><br></response><br></filter></li></ol><ul>
<li><strong><filter>의 attribute</strong>
<ul>
<li>name : form에서 필터를 연동하기 위한 이름입니다. (javascript의 function name으로 등록이 됩니다)</li>
<li>module : form문내의 데이터를 전송하기 위한 Module 이름입니다.</li>
<li>act : 전송대상 module의 특정 Action을 지정합니다.</li>
<li>confirm_msg_code : 언어팩의 언어코드를 지정하여 전송 전에 confirm message를 사용할 수 있습니다.</li>
<li>extend_filter : field가 유동적일 경우 <strong>모듈이름.method이름</strong> 을 지정하여 해당 모듈의 model객체의 method의 결과를 이용하여 xml js filter에 지정된 내용외의 항목을 추가할 수 있습니다.</li></ul></li>
<li>
<p><strong><form> filtering이 일어나는 form문내의 특정 field에 조건을 부여할 수 있습니다.</strong><br><form>..</form> 자체를 생략하거나 <form />처럼 명시적으로 체크할 field 가 없으면 지정할 수 있습니다.</p>
<ul>
<li>
<div style="background-color: rgb(249, 249, 216);" class="section"><form><br> <node target="field이름" required="true|false" filter="alpha_number..." minlength="10" maxlength="250" equalto="다른 field name" /><br></form></div></li>
<li>target : form - field의 이름</li>
<li>required : 필수 여부 (생략 가능)</li>
<li>filter : 정규표현식을 통해서 value의 형식 체크 가능 (생략 가능)</li>
<li>
<div style="background-color: rgb(249, 249, 216);" class="section">email : email의 형식 ( aaa.aaa@aaa.com)<br>userid : 영문+숫자+_, 첫 글자는 영문, 소문자<br>alpha : 영문값만 허용<br>number : 숫자만 허용</div></li>
<li>minlength : 최소 길이 체크 (생략 가능)</li>
<li>maxlength : 최대 길이 체크 (생략 가능)</li>
<li>equalto : 해당 field와 대상의 값이 동일함을 체크</li></ul></li></ul><ul>
<li><strong><parameter> form문 내에서 특정 field를 다른 이름으로 변경해서 전송할 수 있습니다.</strong><br><parameter>..</parameter> 자체를 생략하거나 <parameter />처럼 명시적으로 지정하지 않음을 알릴 수 있습니다.<br>parameter을 이용시 지정된 field이외의 field는 모두 무시가 되니 주의 바랍니다.</li></ul><ol style="margin-left: 2em;" class="code">
<li><parameter><br> <param name="field이름" target="변경하고자 하는 이름" /><br></parameter></li></ol><ul style="margin-left: 2em;">
<li>name : form - field의 이름</li>
<li>target : 서버에 전송할때 바꾸고자 하는 이름</li></ul><p> </p><ul>
<li><strong><response> 서버의 특정 모듈과 통신을 한 후에 어떤 변수를 return 받을 것이며 javascript callback function을 어떤것을 이용할 것인지 지정할 수 있습니다.</strong><br>지정하지 않을 경우 return message가 success가 아닌 경우 message를 alert하고 현 페이지를 reload하게 됩니다.</li></ul><ol style="margin-left: 2em;" class="code">
<li><response callback_func="J/S Callback Function"><br> <tag name="error" /><br></response></li></ol><h3>내부 동작 방식</h3><p>XML JS Filter는 템플릿 코드내에서 요청이 이루어집니다.</p><blockquote class="citation"><p><!--%import("filter/test.xml")--></p></blockquote><p>TemplateHandler는 import되는 XML Js Filter를 보고 컴파일된 JS 파일을 찾아서 <head>..</head>사이에 script file 추가를 하게 됩니다.<br>이 때 언어팩과의 연동을 시도하게 되며 컴파일된 Js 파일에 JavaScript 변수로 직접 메세지를 기록합니다.</p><p>컴파일 된 자바스크립트 파일의 위치 : ./files/cache/js_filter_compiled/{md5(path.filtername)}.언어코드.compiled.js</p><h3 id="템플릿에서의실제사용예">템플릿에서의 실제 사용 예</h3><div class="code" code_type="xml" editor_component="code_highlighter"><!--%import("filter/test.xml")--><br>
<form action="./" method="get" onsubmit="procFilter(this, test)"><br>
제목 : <input type="text" name="title" value="" class="inputTypeText w200" /><br>
내용 : <textarea name="content" class="inputTypeTextArea w200"></textarea><br>
<span class="button"><input type="submit" value="전송" /></span><br>
</form></div><p>위에서 procFilter()는 첫번째 인자로 해당 폼의 object를 받는데 this로 지정하면 되고, 2번째 인자인 test는 적용하고자 하는 filter의 name 입니다.<br>폼의 내용이 전송 될 때 test filter는 동작을 하게 됩니다.</p><p>위 예제에서는 아래의 filter가 적용되어 있습니다.<br></p><ul><li>제목 (필수 항목, 최소 길이 10자, 최대 길이 50자)</li><li>내용 (필수 항목, 최소 길이 1자, 최대 길이 250자)</li></ul><p>아래는 test.xml 파일의 내용입니다.<br></p><div class="code" code_type="xml" editor_component="code_highlighter"><filter name="test"><br>
<form><br>
<node target="title" required="true" maxlength="10" maxlength="50" /><br>
<node target="content" required="true" maxlength="1" maxlength="250" /><br>
</form><br>
<parameter><br>
<param name="title" target="title" /><br>
<param name="content" target="content" /><br>
</parameter><br>
<response /><br>
</filter></div>
|
SMaker |
2010.03.17 18:14:00 |
|
|
|
Restore
<DIV class="eArea _hx" type="hx">
<H3> XML Js Filter</H3></DIV>
<DIV class="eArea xe_content xe_dr_txt">
<DIV class="drag_handle right" title="단락을 드래그하여 이동하세요."></DIV>
<DIV class="drag_handle left" title="단락을 드래그하여 이동하세요."></DIV>
<P><A href="http://doc.xpressengine.com/classXmlJsFilter.html">http://doc.xpressengine.com/classXmlJsFilter.html</A> (클래스 구조)</P></DIV>
<DIV class="eArea xe_content xe_dr_txt">
<DIV class="drag_handle right" title="단락을 드래그하여 이동하세요."></DIV>
<DIV class="drag_handle left" title="단락을 드래그하여 이동하세요."></DIV>
<P>XML JS Filter는 XML문법으로 정의되고 Javascript로 동작으로 하는 Filter의 의미입니다.<BR>웹페이지에서 form문에서 특정 field의 not null, min/max length, value 체크등을 쉽게 하고 AJAX로 서버의 특정 Module과 Action와 통신을 하는 과정까지 모두 제어를 할 수 있습니다.</P></DIV>
<DIV class="eArea _hx" type="hx">
<DIV class="drag_handle right" title="단락을 드래그하여 이동하세요."></DIV>
<DIV class="drag_handle left" title="단락을 드래그하여 이동하세요."></DIV>
<H3 id=문법소개및예제>문법 소개 및 예제</H3></DIV>
<DIV class="eArea xe_content xe_dr_txt">
<DIV class="drag_handle right" title="단락을 드래그하여 이동하세요."></DIV>
<DIV class="drag_handle left" title="단락을 드래그하여 이동하세요."></DIV>
<P>아래는 XE내에서 실제로 사용하는 예제입니다.</P></DIV>
<DIV class="eArea xe_content xe_dr_txt">
<OL class=code>
<LI><filter name="insert_board" module="board" act="procBoardAdminInsertBoard" confirm_msg_code="confirm_submit" extend_filter="module.method_name"><BR><form><BR> <node target="mid" required="true" filter="alpha_number" /><BR> <node target="browser_title" required="true" maxlength="250" /><BR> <node target="list_count" required="true" filter="number" /><BR> <node target="page_count" required="true" filter="number" /><BR></form></LI>
<LI><BR><parameter><BR> <param name="board_name" target="mid" /><BR> <param name="module_srl" target="module_srl" /><BR> <param name="module_category_srl" target="module_category_srl" /><BR> <param name="layout_srl" target="layout_srl" /><BR> <param name="skin" target="skin" /><BR> <param name="browser_title" target="browser_title" /><BR> <param name="use_category" target="use_category" /><BR> <param name="list_count" target="list_count" /><BR> <param name="page_count" target="page_count" /><BR> <param name="is_default" target="is_default" /><BR> <param name="description" target="description" /><BR> <param name="header_text" target="header_text" /><BR> <param name="footer_text" target="footer_text" /><BR> <param name="admin_id" target="admin_id" /><BR> <param name="open_rss" target="open_rss" /><BR></parameter></LI>
<LI><BR><response callback_func="completeInsertBoard"><BR> <tag name="error" /><BR> <tag name="message" /><BR> <tag name="module" /><BR> <tag name="act" /><BR> <tag name="page" /><BR> <tag name="module_srl" /><BR></response><BR></filter></LI></OL></DIV>
<DIV class="eArea xe_content xe_dr_txt">
<P> </P></DIV>
<DIV class="eArea xe_content xe_dr_txt">
<UL>
<LI><STRONG><filter>의 attribute</STRONG>
<UL>
<LI>name : form에서 필터를 연동하기 위한 이름입니다. (javascript의 function name으로 등록이 됩니다)</LI>
<LI>module : form문내의 데이터를 전송하기 위한 Module 이름입니다.</LI>
<LI>act : 전송대상 module의 특정 Action을 지정합니다.</LI>
<LI>confirm_msg_code : 언어팩의 언어코드를 지정하여 전송 전에 confirm message를 사용할 수 있습니다.</LI>
<LI>extend_filter : field가 유동적일 경우 <STRONG>모듈이름.method이름</STRONG> 을 지정하여 해당 모듈의 model객체의 method의 결과를 이용하여 xml js filter에 지정된 내용외의 항목을 추가할 수 있습니다.</LI></UL></LI>
<LI>
<P><STRONG><form> filtering이 일어나는 form문내의 특정 field에 조건을 부여할 수 있습니다.</STRONG><BR><form>..</form> 자체를 생략하거나 <form />처럼 명시적으로 체크할 field 가 없으면 지정할 수 있습니다.</P>
<UL>
<LI>
<DIV style="BACKGROUND-COLOR: rgb(249,249,216)" class=section><form><BR> <node target="field이름" required="true|false" filter="alpha_number..." minlength="10" maxlength="250" equalto="다른 field name" /><BR></form></DIV></LI>
<LI>target : form - field의 이름</LI>
<LI>required : 필수 여부 (생략 가능)</LI>
<LI>filter : 정규표현식을 통해서 value의 형식 체크 가능 (생략 가능)</LI>
<LI>
<DIV style="BACKGROUND-COLOR: rgb(249,249,216)" class=section>email : email의 형식 ( aaa.aaa@aaa.com)<BR>userid : 영문+숫자+_, 첫 글자는 영문, 소문자<BR>alpha : 영문값만 허용<BR>number : 숫자만 허용</DIV></LI>
<LI>minlength : 최소 길이 체크 (생략 가능)</LI>
<LI>maxlength : 최대 길이 체크 (생략 가능)</LI>
<LI>equalto : 해당 field와 대상의 값이 동일함을 체크</LI></UL></LI></UL>
<UL>
<LI><STRONG><parameter> form문 내에서 특정 field를 다른 이름으로 변경해서 전송할 수 있습니다.</STRONG><BR><parameter>..</parameter> 자체를 생략하거나 <parameter />처럼 명시적으로 지정하지 않음을 알릴 수 있습니다.<BR>parameter을 이용시 지정된 field이외의 field는 모두 무시가 되니 주의 바랍니다.</LI></UL>
<OL style="MARGIN-LEFT: 2em" class=code>
<LI><parameter><BR> <param name="field이름" target="변경하고자 하는 이름" /><BR></parameter></LI></OL>
<UL style="MARGIN-LEFT: 2em">
<LI>name : form - field의 이름</LI>
<LI>target : 서버에 전송할때 바꾸고자 하는 이름</LI></UL></DIV>
<DIV class="eArea xe_content xe_dr_txt">
<P> </P></DIV>
<DIV class="eArea xe_content xe_dr_txt">
<UL>
<LI><STRONG><response> 서버의 특정 모듈과 통신을 한 후에 어떤 변수를 return 받을 것이며 javascript callback function을 어떤것을 이용할 것인지 지정할 수 있습니다.</STRONG><BR>지정하지 않을 경우 return message가 success가 아닌 경우 message를 alert하고 현 페이지를 reload하게 됩니다.</LI></UL>
<OL style="MARGIN-LEFT: 2em" class=code>
<LI><response callback_func="J/S Callback Function"><BR> <tag name="error" /><BR></response></LI></OL></DIV>
<DIV class="eArea xe_content xe_dr_txt">
<P> </P></DIV>
<DIV class="eArea _hx" type="hx">
<H3>내부 동작 방식</H3></DIV>
<DIV class="eArea xe_content xe_dr_txt">
<P>XML JS Filter는 템플릿 코드내에서 요청이 이루어집니다.</P></DIV>
<DIV class="eArea xe_content xe_dr_txt">
<DIV style="BACKGROUND-COLOR: rgb(249,249,216)" class=section><!--%import("filter/test.xml")--></DIV></DIV>
<DIV class="eArea xe_content xe_dr_txt">
<P> </P></DIV>
<DIV class="eArea xe_content xe_dr_txt">
<P>TemplateHandler는 import되는 XML JS Filter를 보고 컴파일된 JS 파일을 찾아서 <head>..</head>사이에 script file 추가를 하게 됩니다.<BR>이 때 언어팩과의 연동을 시도하게 되며 컴파일된 JS 파일에 JavaScript변수로 직접 메세지를 기록합니다.</P></DIV>
<DIV class="eArea xe_content xe_dr_txt">
<P>컴파일 파일의 위치 : ./files/cache/js_filter_compiled/{md5(path.filtername)}.언어.compiled.js</P></DIV>
<DIV class="eArea xe_content xe_dr_txt">
<P> </P></DIV>
<DIV class="eArea _hx" type="hx">
<H3 id=템플릿에서의실제사용예>템플릿에서의 실제 사용 예</H3></DIV>
<DIV class="eArea xe_content xe_dr_txt">
<OL class=code>
<LI><!--%import("filter/test.filter")--><BR><form actoin="./" method="get" onsubmit="procFilter(this, test)"><BR>...<BR></form></LI></OL></DIV>
<DIV class="eArea xe_content xe_dr_txt">
<DIV class="drag_handle right" title="단락을 드래그하여 이동하세요."></DIV>
<DIV class="drag_handle left" title="단락을 드래그하여 이동하세요."></DIV>
<P>위에서 procFilter()는 첫번째 인자로 해당 폼의 object를 받는데 this로 지정하면 되고, 2번째 인자인 test는 적용하고자 하는 filter의 name 입니다.<BR>이 form이 submit될때 test filter는 동작을 하게 됩니다.</P></DIV>
|
SMaker |
2010.03.16 20:06:18 |
|
|
|
Restore
<div class="eArea xe_content xe_dr_hx"><H3> XML Js Filter</H3></div><div class="eArea xe_content xe_dr_txt"><P><A href="http://doc.xpressengine.com/classXmlJsFilter.html">http://doc.xpressengine.com/classXmlJsFilter.html</A> (클래스 구조)</P></div><div class="eArea xe_content xe_dr_txt"><P> </P></div><div class="eArea xe_content xe_dr_txt"><P>XML JS Filter는 XML문법으로 정의되고 Javascript로 동작으로 하는 Filter의 의미입니다.<BR>웹페이지에서 form문에서 특정 field의 not null, min/max length, value 체크등을 쉽게 하고 AJAX로 서버의 특정 Module과 Action와 통신을 하는 과정까지 모두 제어를 할 수 있습니다.</P></div><div class="eArea xe_content xe_dr_txt"><P> </P></div><div class="eArea xe_content xe_dr_hx"><H3 id=문법소개및예제>문법 소개 및 예제</H3></div><div class="eArea xe_content xe_dr_txt"><P>아래는 XE내에서 실제로 사용하는 예제입니다.</P></div><div class="eArea xe_content xe_dr_txt"><OL class=code>
<LI><filter name="insert_board" module="board" act="procBoardAdminInsertBoard" confirm_msg_code="confirm_submit" extend_filter="module.method_name"><BR><form><BR> <node target="mid" required="true" filter="alpha_number" /><BR> <node target="browser_title" required="true" maxlength="250" /><BR> <node target="list_count" required="true" filter="number" /><BR> <node target="page_count" required="true" filter="number" /><BR></form></LI>
<LI><BR><parameter><BR> <param name="board_name" target="mid" /><BR> <param name="module_srl" target="module_srl" /><BR> <param name="module_category_srl" target="module_category_srl" /><BR> <param name="layout_srl" target="layout_srl" /><BR> <param name="skin" target="skin" /><BR> <param name="browser_title" target="browser_title" /><BR> <param name="use_category" target="use_category" /><BR> <param name="list_count" target="list_count" /><BR> <param name="page_count" target="page_count" /><BR> <param name="is_default" target="is_default" /><BR> <param name="description" target="description" /><BR> <param name="header_text" target="header_text" /><BR> <param name="footer_text" target="footer_text" /><BR> <param name="admin_id" target="admin_id" /><BR> <param name="open_rss" target="open_rss" /><BR></parameter></LI>
<LI><BR><response callback_func="completeInsertBoard"><BR> <tag name="error" /><BR> <tag name="message" /><BR> <tag name="module" /><BR> <tag name="act" /><BR> <tag name="page" /><BR> <tag name="module_srl" /><BR></response><BR></filter></LI></OL></div><div class="eArea xe_content xe_dr_txt"><P> </P></div><div class="eArea xe_content xe_dr_txt"><UL>
<LI><STRONG><filter>의 attribute</STRONG>
<UL>
<LI>name : form에서 필터를 연동하기 위한 이름입니다. (javascript의 function name으로 등록이 됩니다)</LI>
<LI>module : form문내의 데이터를 전송하기 위한 Module 이름입니다.</LI>
<LI>act : 전송대상 module의 특정 Action을 지정합니다.</LI>
<LI>confirm_msg_code : 언어팩의 언어코드를 지정하여 전송 전에 confirm message를 사용할 수 있습니다.</LI>
<LI>extend_filter : field가 유동적일 경우 <STRONG>모듈이름.method이름</STRONG> 을 지정하여 해당 모듈의 model객체의 method의 결과를 이용하여 xml js filter에 지정된 내용외의 항목을 추가할 수 있습니다.</LI></UL></LI>
<LI>
<P><STRONG><form> filtering이 일어나는 form문내의 특정 field에 조건을 부여할 수 있습니다.</STRONG><BR><form>..</form> 자체를 생략하거나 <form />처럼 명시적으로 체크할 field 가 없으면 지정할 수 있습니다.</P>
<UL>
<LI>
<DIV style="BACKGROUND-COLOR: rgb(249,249,216)" class=section><form><BR> <node target="field이름" required="true|false" filter="alpha_number..." minlength="10" maxlength="250" equalto="다른 field name" /><BR></form></DIV></LI>
<LI>target : form - field의 이름</LI>
<LI>required : 필수 여부 (생략 가능)</LI>
<LI>filter : 정규표현식을 통해서 value의 형식 체크 가능 (생략 가능)</LI>
<LI>
<DIV style="BACKGROUND-COLOR: rgb(249,249,216)" class=section>email : email의 형식 ( aaa.aaa@aaa.com)<BR>userid : 영문+숫자+_, 첫 글자는 영문, 소문자<BR>alpha : 영문값만 허용<BR>number : 숫자만 허용</DIV></LI>
<LI>minlength : 최소 길이 체크 (생략 가능)</LI>
<LI>maxlength : 최대 길이 체크 (생략 가능)</LI>
<LI>equalto : 해당 field와 대상의 값이 동일함을 체크</LI></UL></LI></UL>
<UL>
<LI><STRONG><parameter> form문 내에서 특정 field를 다른 이름으로 변경해서 전송할 수 있습니다.</STRONG><BR><parameter>..</parameter> 자체를 생략하거나 <parameter />처럼 명시적으로 지정하지 않음을 알릴 수 있습니다.<BR>parameter을 이용시 지정된 field이외의 field는 모두 무시가 되니 주의 바랍니다.</LI></UL>
<OL style="MARGIN-LEFT: 2em" class=code>
<LI><parameter><BR> <param name="field이름" target="변경하고자 하는 이름" /><BR></parameter></LI></OL>
<UL style="MARGIN-LEFT: 2em">
<LI>name : form - field의 이름</LI>
<LI>target : 서버에 전송할때 바꾸고자 하는 이름</LI></UL></div><div class="eArea xe_content xe_dr_txt"><P> </P></div><div class="eArea xe_content xe_dr_txt"><UL>
<LI><STRONG><response> 서버의 특정 모듈과 통신을 한 후에 어떤 변수를 return 받을 것이며 javascript callback function을 어떤것을 이용할 것인지 지정할 수 있습니다.</STRONG><BR>지정하지 않을 경우 return message가 success가 아닌 경우 message를 alert하고 현 페이지를 reload하게 됩니다.</LI></UL>
<OL style="MARGIN-LEFT: 2em" class=code>
<LI><response callback_func="J/S Callback Function"><BR> <tag name="error" /><BR></response></LI></OL></div><div class="eArea xe_content xe_dr_txt"><P> </P></div><div class="eArea xe_content xe_dr_hx"><H3>내부 동작 방식</H3></div><div class="eArea xe_content xe_dr_txt"><P>XML JS Filter는 템플릿 코드내에서 요청이 이루어집니다.</P></div><div class="eArea xe_content xe_dr_txt"><DIV style="BACKGROUND-COLOR: rgb(249,249,216)" class=section><!--%import("filter/test.xml")--></DIV></div><div class="eArea xe_content xe_dr_txt"><P> </P></div><div class="eArea xe_content xe_dr_txt"><P>TemplateHandler는 import되는 XML JS Filter를 보고 컴파일된 JS 파일을 찾아서 <head>..</head>사이에 script file 추가를 하게 됩니다.<BR>이 때 언어팩과의 연동을 시도하게 되며 컴파일된 JS 파일에 JavaScript변수로 직접 메세지를 기록합니다.</P></div><div class="eArea xe_content xe_dr_txt"><P>컴파일 파일의 위치 : ./files/cache/js_filter_compiled/{md5(path.filtername)}.언어.compiled.js</P></div><div class="eArea xe_content xe_dr_txt"><P> </P></div><div class="eArea xe_content xe_dr_hx"><H3 id=템플릿에서의실제사용예>템플릿에서의 실제 사용 예</H3></div><div class="eArea xe_content xe_dr_txt"><OL class=code>
<LI><!--%import("filter/test.filter")--><BR><form actoin="./" method="get" onsubmit="procFilter(this, test)"><BR>...<BR></form></LI></OL></div><div class="eArea xe_content xe_dr_txt"><P>위에서 procFilter()는 첫번째 인자로 해당 폼의 object를 받는데 this로 지정하면 되고, 2번째 인자인 test는 적용하고자 하는 filter의 name 입니다.<BR>이 form이 submit될때 test filter는 동작을 하게 됩니다.</P></div><div class="eArea xe_content xe_dr_txt"><P> </P></div><div class="eArea xe_content xe_dr_txt"><P> </P></div>
|
SMaker |
2010.01.11 13:57:20 |
|
|
|
Restore
<h3> XML Js Filter</h3>
<p><a href="http://doc.zeroboard.com/classXmlJsFilter.html" class="external" title="http://doc.zeroboard.com/classXmlJsFilter.html">http://doc.zeroboard.com/classXmlJsFilter.html</a> (클래스 구조)</p>
<p> </p>
<p>XML JS Filter는 XML문법으로 정의되고 Javascript로 동작으로 하는 Filter의 의미입니다.<br />
웹페이지에서 form문에서 특정 field의 not null, min/max length, value 체크등을 쉽게 하고 AJAX로 서버의 특정 Module과 Action와 통신을 하는 과정까지 모두 제어를 할 수 있습니다.</p>
<p> </p>
<h3 id="문법소개및예제">문법 소개 및 예제</h3>
<p>아래는 XE내에서 실제로 사용하는 예제입니다.</p>
<ol class="code">
<li><filter name="insert_board" module="board" act="procBoardAdminInsertBoard" confirm_msg_code="confirm_submit" extend_filter="module.method_name"><br />
<form><br />
<node target="mid" required="true" filter="alpha_number" /><br />
<node target="browser_title" required="true" maxlength="250" /><br />
<node target="list_count" required="true" filter="number" /><br />
<node target="page_count" required="true" filter="number" /><br />
</form></li>
<li><br />
<parameter><br />
<param name="board_name" target="mid" /><br />
<param name="module_srl" target="module_srl" /><br />
<param name="module_category_srl" target="module_category_srl" /><br />
<param name="layout_srl" target="layout_srl" /><br />
<param name="skin" target="skin" /><br />
<param name="browser_title" target="browser_title" /><br />
<param name="use_category" target="use_category" /><br />
<param name="list_count" target="list_count" /><br />
<param name="page_count" target="page_count" /><br />
<param name="is_default" target="is_default" /><br />
<param name="description" target="description" /><br />
<param name="header_text" target="header_text" /><br />
<param name="footer_text" target="footer_text" /><br />
<param name="admin_id" target="admin_id" /><br />
<param name="open_rss" target="open_rss" /><br />
</parameter></li>
<li><br />
<response callback_func="completeInsertBoard"><br />
<tag name="error" /><br />
<tag name="message" /><br />
<tag name="module" /><br />
<tag name="act" /><br />
<tag name="page" /><br />
<tag name="module_srl" /><br />
</response><br />
</filter></li>
</ol>
<p> </p>
<ul>
<li><strong><filter>의 attribute</strong>
<ul>
<li>name : form에서 필터를 연동하기 위한 이름입니다. (javascript의 function name으로 등록이 됩니다)</li>
<li>module : form문내의 데이터를 전송하기 위한 Module 이름입니다.</li>
<li>act : 전송대상 module의 특정 Action을 지정합니다.</li>
<li>confirm_msg_code : 언어팩의 언어코드를 지정하여 전송 전에 confirm message를 사용할 수 있습니다.</li>
<li>extend_filter : field가 유동적일 경우 <strong>모듈이름.method이름</strong> 을 지정하여 해당 모듈의 model객체의 method의 결과를 이용하여 xml js filter에 지정된 내용외의 항목을 추가할 수 있습니다.</li>
</ul>
</li>
<li>
<p><strong><form> filtering이 일어나는 form문내의 특정 field에 조건을 부여할 수 있습니다.</strong><br />
<form>..</form> 자체를 생략하거나 <form />처럼 명시적으로 체크할 field 가 없으면 지정할 수 있습니다.</p>
<ul>
<li>
<div class="section" style="background-color: rgb(249, 249, 216);"><form><br />
<node target="field이름" required="true|false" filter="alpha_number..." minlength="10" maxlength="250" equalto="다른 field name" /><br />
</form></div>
</li>
<li>target : form - field의 이름</li>
<li>required : 필수 여부 (생략 가능)</li>
<li>filter : 정규표현식을 통해서 value의 형식 체크 가능 (생략 가능)</li>
<li>
<div class="section" style="background-color: rgb(249, 249, 216);">email : email의 형식 ( aaa.aaa@aaa.com)<br />
userid : 영문+숫자+_, 첫 글자는 영문, 소문자<br />
alpha : 영문값만 허용<br />
number : 숫자만 허용</div>
</li>
<li>minlength : 최소 길이 체크 (생략 가능)</li>
<li>maxlength : 최대 길이 체크 (생략 가능)</li>
<li>equalto : 해당 field와 대상의 값이 동일함을 체크</li>
</ul>
</li>
</ul>
<ul>
<li><strong><parameter> form문 내에서 특정 field를 다른 이름으로 변경해서 전송할 수 있습니다.</strong><br />
<parameter>..</parameter> 자체를 생략하거나 <parameter />처럼 명시적으로 지정하지 않음을 알릴 수 있습니다.<br />
parameter을 이용시 지정된 field이외의 field는 모두 무시가 되니 주의 바랍니다.</li>
</ul>
<ol class="code" style="margin-left: 2em;">
<li><parameter><br />
<param name="field이름" target="변경하고자 하는 이름" /><br />
</parameter></li>
</ol>
<ul style="margin-left: 2em;">
<li>name : form - field의 이름</li>
<li>target : 서버에 전송할때 바꾸고자 하는 이름</li>
</ul>
<p> </p>
<ul>
<li><strong><response> 서버의 특정 모듈과 통신을 한 후에 어떤 변수를 return 받을 것이며 javascript callback function을 어떤것을 이용할 것인지 지정할 수 있습니다.</strong><br />
지정하지 않을 경우 return message가 success가 아닌 경우 message를 alert하고 현 페이지를 reload하게 됩니다.</li>
</ul>
<ol class="code" style="margin-left: 2em;">
<li><response callback_func="J/S Callback Function"><br />
<tag name="error" /><br />
</response></li>
</ol>
<p> </p>
<h3>내부 동작 방식</h3>
<p>XML JS Filter는 템플릿 코드내에서 요청이 이루어집니다.</p>
<div class="section" style="background-color: rgb(249, 249, 216);"><!--%import("filter/test.xml")--></div>
<p> </p>
<p>TemplateHandler는 import되는 XML JS Filter를 보고 컴파일된 JS 파일을 찾아서 <head>..</head>사이에 script file 추가를 하게 됩니다.<br />
이 때 언어팩과의 연동을 시도하게 되며 컴파일된 JS 파일에 JavaScript변수로 직접 메세지를 기록합니다.</p>
<p>컴파일 파일의 위치 : ./files/cache/js_filter_compiled/{md5(path.filtername)}.언어.compiled.js</p>
<p> </p>
<h3 id="템플릿에서의실제사용예">템플릿에서의 실제 사용 예</h3>
<ol class="code">
<li><!--%import("filter/test.filter")--><br />
<form actoin="./" method="get" onsubmit="procFilter(this, test)"><br />
...<br />
</form></li>
</ol>
<p>위에서 procFilter()는 첫번째 인자로 해당 폼의 object를 받는데 this로 지정하면 되고, 2번째 인자인 test는 적용하고자 하는 filter의 name 입니다.<br />
이 form이 submit될때 test filter는 동작을 하게 됩니다.</p>
<p> </p>
<p> </p>
|
|
2009.09.15 18:04:15 |