2. XML Js Filter

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