포럼
[시니시즘] '내용을 입력해주세요' 무시하기 팁
2011.05.13 11:24
게시판 스킨을 만들다보면 content 항목 자체가 필요 없을 때가 있습니다. (지금껏 없으셨더라도 언젠간 있으실 겁니다...;)
그런데 내용을 입력하지 않고 등록을 누르면 '내용을 입력해주세요'라고 경고창이 뜨게 되죠.
그걸 간단히 무시해버리는 팁을 오늘 알려드릴게용 ㅋ
XE에서 내용을 입력하는 부분은 editor로 처리되게 됩니다.
이런식으로 말이죠.
<div class="editor">{$oDocument->getEditor()}</div>
보통은 이걸 지워버리고 input으로 content 값을 삽입해주면 경고창이 안뜰거라고 생각하죠.
<input name="content" value="내용입니다">
그런데 이렇게 해도 '내용을 입력해주세요'라는 창은 뜹니다ㅡㅡ^
이 경고 메세지를 원천적으로 봉쇄하는 방법은 필터 파일을 수정하는 겁니다.
아래처럼요.
/modules/board/tpl/filter/insert.xml
content 부분을 수정해주면 됩니다.
<filter name="insert" module="pxeboard" act="procBoardInsertDocument"> <form> <node target="nick_name" required="true" maxlength="20"/> <node target="password" required="true" /> <node target="email_address" maxlength="250" /> <node target="homepage" maxlength="250"/> <node target="title" required="true" minlength="1" maxlength="250" /> <node target="content" required="true" /> <node target="category_srl" required="true" /> <node target="attach_file" /> <node target="attach_screenshot" /> </form> <response callback_func="completeDocumentInserted"> <tag name="error" /> <tag name="message" /> <tag name="mid" /> <tag name="document_srl" /> <tag name="category_srl" /> </response> </filter>
요렇게 수정해주면 됩니다.
<filter name="insert" module="pxeboard" act="procBoardInsertDocument"> <form> <node target="nick_name" required="true" maxlength="20"/> <node target="password" required="true" /> <node target="email_address" maxlength="250" /> <node target="homepage" maxlength="250"/> <node target="title" required="true" minlength="1" maxlength="250" /> <node target="content" /> <node target="category_srl" required="true" /> <node target="attach_file" /> <node target="attach_screenshot" /> </form> <response callback_func="completeDocumentInserted"> <tag name="error" /> <tag name="message" /> <tag name="mid" /> <tag name="document_srl" /> <tag name="category_srl" /> </response> </filter>
그런데 이렇게 해버리면 스킨을 독립적으로 구동할 수 없습니다.
스킨을 깔 때마다 해당 부분을 수정해줘야 되죠ㅠ
그리고 가능하면 XE의 원본 파일들을 건드리지 않는걸 지향하기 때문에
(예전에 제 마음대로 XE 파일들을 튜닝한 웹사이트가 있는데 아직까지 새 버전으로 업그레이드를 못하고 있다는 ㅡㅡㅋ)
최종적인 해결책은 아래처럼 해결하면 됩니다.
아래 파일을 수정해주세용.
/modules/board/skins/해당스킨/write_form.html
js 파일을 import하는 코드 아래 부분에 넣어주세용.
이런 소스들 아래에 넣어주세용.
<!--#include("_header.html")-->
<!--%import("../../tpl/js/write_form.js")-->
<!--%import("../../tpl/js/labelbox.js")-->
아래 소스를 넣어주시면 됩니당 ㅋ
<script language="JavaScript"> (function($){ $("html").ready(function(){ jQuery('#xpress-editor-1').val("안녕하세요 내용입니다"); }); })(jQuery); </script>
끝 ㅋ
댓글 6
-
앙까?
2011.05.14 16:20
-
시니시즘
2011.05.15 19:55
오 저보다 고수신데요!!
앙까님 방법이 가장 깔끔해 보입니다^^ -
앙까?
2011.05.15 23:47
ㅎㅎ 예전에 form 입력변수들 validation 처리때문에 이것저것 하다보니 알게 된 방법입니다. ^^
수강신청접수 같은경우 외부페이지로 만들어야 했는데 그때는 filter가 안먹더군요.
그래서 아래의 방법으로 처리했었죠.
filter script를 보고 따라 만들었는데 잘 작동 하더군요.
<form id="fo_insert_membership" action="./" method="get" onsubmit="return false;" style="margin-bottom:50px;">...</form><script type="text/javascript">(function($){$(function(){$('#fo_insert_membership').submit(function () {// 입력값 체크...// 입력값 검사 통과후var params={}, responses=[], data=jQuery(this).serializeArray();jQuery.each(data, function(i, field){var val = field.value.trim();if(!val) return true;if(/\[\]$/.test(field.name)) field.name = field.name.replace(/\[\]$/, '+ '');if(params[field.name]) params[field.name] += '|@|'+val;else params[field.name] = field.value;});responses = ['error','message','mid','member_srl'];if(confirm('수강신청 하시겠습니까?')){exec_xml('membership','procMembershipSignUp', params, completeMembershipSignUp, responses, params, this);return true;}else{$(':disabled').attr('disabled','');return false;}});});})(jQuery);</script> -
시니시즘
2011.05.16 11:21
유용한 소스 공유해주셔서 감사합니다^^
다음에 기회가 있으면 참고해서 적용해보도록 할게요! -
피비햄
2011.05.16 15:28
앙까?님 방법으로 해보니 '내용을 입력해주세요' 메세지는 안나오는데.....
글이 목록에 없네요...ㅠㅠ 등록이 안되는건가????
-
앙까?
2011.05.16 17:55
myInsert.xml 파일을 해당 스킨 디렌토리의 filter 디렉토리에 올리셨나요?
그리고 제가 제시한 방식은 board 모듈에 해당하는 방식입니다.
boardex나 pxeboard의 경우는 그에 해당하는 module명과 action을 사용하셔야 합니다.
제가 아는 코어 소스를 건드리지 않는 방법중 또 하나의 방법은
filter파일 자체를 변경하는 것도 추천드립니다. ^^
board모듈 같은 경우 function dispBoardWrite() 멤버함수에서
Context::addJsFilter($this->module_path.'tpl/filter', 'insert.xml');
형식으로 filter 스크립트를 적용시키는데요.
스킨에서도 직접 적용할 수 있습니다.
초기버전에서 이렇게 사용했었죠. ^^
modules/board/skins/나의스킨/filter/myInsert,xml
procFilter호출시 자신의 filter를 호출하도록 하면 됩니다. ^^
<!-- 게시물 작성 폼 -->