차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판이전 판
다음 판
이전 판
tech:xe [2014/03/19 02:37] – 바깥 편집 127.0.0.1tech:xe [2016/07/12 09:26] (현재) – 바깥 편집 127.0.0.1
줄 1: 줄 1:
 +{{tag>tech xe 네이버 xpressionengine}}
 +======Xpressengine (XE)======
 +
 +오픈소스 CMS. 현재는 네이버 산하 오픈소스 프로젝트로 개발이 진행되고 있다.
 +
 +http://www.xpressengine.com/
 +
 +
 +
 +
 +
 +세션 정보를 파일이 아닌 DB를 이용하는 것에 대한 논의
 +http://xe.xpressengine.net/?document_srl=16803825
 +
 +세션 테이블 때문에 문제라는 많은 글들
 +
 +[[http://www.google.co.kr/search?sourceid=chrome&ie=UTF-8&q=xe+session+%EC%82%AD%EC%A0%9C#sclient=psy-ab&hl=ko&newwindow=1&safe=off&source=hp&q=xe+session+%ED%85%8C%EC%9D%B4%EB%B8%94+-%EA%B3%B5%EC%9C%A0&psj=1&oq=xe+session+%ED%85%8C%EC%9D%B4%EB%B8%94+-%EA%B3%B5%EC%9C%A0&aq=f&aqi=&aql=&gs_sm=e&gs_upl=7087l8716l3l9059l7l7l0l7l0l0l0l0ll0l0&bav=on.2,or.r_gc.r_pw.r_cp.,cf.osb&fp=9d240990a75e031f&biw=1113&bih=916|세션 테이블  구글검색]]
 +
 +접속자도 별로 없는데
 +
 +세션 테이블의 레코드 수가 백만개!!.
 +
 +자동으로 정리 하도록 할 수 없나.
 +
 +
 +
 +=====XE 템플릿 스크립트=====
 +XE에서만 사용되는 **XE 전용**의 웹 프로그래밍 언어라고 생각하면 된다.
 +이 스크립트는 layout.html(이하 '템플릿 파일'이라고 칭함) 파일 안에서 사용된다.
 +
 +모든 언어에는 그 들만의 규칙이 있으므로,
 +그 규칙에 맞게 작성해야만 정상적인 작동을 한다.
 +
 +====XE 템플릿 스크립트에서 PHP문의 사용====
 +
 +XE 템플릿 스크립트는 PHP와 유사하지만, 분명 PHP는 아니다.
 +그렇기때문에 템플릿 스크립트에서는 PHP를 //대충// 사용할 수 있는 방법을 제공하고 있다.
 +템플릿 파일내에서 {@ 와 } 사이에 나오는 문장은 PHP문으로 해석한다.
 +
 +    {@$test = 365}
 +
 +이 문장은 '변수 $test 에 365 라는 값을 입력하라' 라는 의미이다.
 +
 +  {@
 +    $test = 200;
 +    $managed = $test + 165
 +  }
 +
 +이 문장은 '변수 $test 에 200 이라는 값을 입력하고, $test에 입력된 값(200) 과 165 을 더해서 변수 $managed 에 입력하라'
 +라는 의미이다.
 +
 +첫번째 예제와 두번 째 예제의 사이에는 커다란 차이점이 있다.
 +첫번째 예제는 PHP에서 단 한문장으로 끝날 수 있는 부사람이지만
 +두번째 예제는 PHP에서 세미콜론(;)를 사용하여 두 개의 문장으로 작성되야 한다.
 +
 +이렇게 2 문장 이상일 경우에는 PHP와 달리 두번째 예제와 같이 **여러 줄에 걸쳐서 입력**해야 한다.
 +아래와 같은 코드는 템플릿 스크립트에서 정상적으로 작동되지 않다.
 +
 +    {@$test = 200; $managed = $test + 165} (X)
 +
 +====XE 템플릿 스크립트에서 변수의 사용====
 +
 +템플릿 스크립트에서는 별도의 변수 선언문이 없다.
 +그렇기때문에 변수를 사용하기 위해서는 위에서 본 PHP문 사용 방법을 통해 변수를 선언해야 한다.
 +
 +   {@$var = 0}
 +
 +'변수 $var 를 선언하고 초기값으로 0을 입력하라' 라는 의미이다.
 +
 +다음과 같이 사용할 수도 있다.
 +  {@
 +    $var1 = 10;
 +    $var2 = 20;
 +    $var3 = 30;
 +    $var4 = $var1 + $var2 + $var3
 +  }
 +
 +변수값을 출력을 하기 위해서는 { 와 } 사이에 변수를 입력해주면 된다.
 +
 +{$var4}
 +
 +이렇게하면 '변수 $var4의 값을 출력하라' 라는 의미가 된다.
 +여기서는 60 이라는 값이 출력된다.
 +
 +====IF 조건문의 사용====
 +
 +if문 또한 C 언어나 PHP 등과 유사한 모습으로 사용된다. 아래는 기본 코드이다.
 +  <!--@if(조건식)-->
 +
 +조건이 만족되면 이 부분을 실행한다.
 +
 +  <!--@elseif(조건식)-->
 +
 +첫번 째 조건이 만족되지 않고
 +elseif 의 조건식을 검토하여 만족될 경우 이 곳이 실행된다.
 +
 +  <!--@else-->
 +
 +모든 조건이 만족되지 않을 경우에는 이 곳이 실행된다.
 +
 +  <!--@end-->
 +
 +end 는 if문의 끝을 의미한다.
 +그러면 if문의 예제를 하나 들어보겠다.
 +  {@
 +    $var = 1;
 +    $webhosting = 2;
 +    $community = 3
 +  }
 +
 +  <!--@if($var == $webhosting)-->
 +  <p>웹호스팅에 오신 것을 환영한다</p>
 +  <!--@elseif($var == $community)-->
 +  <p>커뮤니티에 오신 것을 환영한다</p>
 +  <!--@else-->
 +  <p>매니지드에 오신 것을 환영한다.</p>
 +  <!--@end-->
 +
 +이렇게 한다면 결국은 if의 조건식도, elseif의 조건식도 만족하지 못하므로 else 가 실행이 되서
 +
 +<p>매니지드에 오신 것을 환영한다</p>
 +
 +라는 문장이 출력될 것 이다.
 +
 +====foreach 반복문의 사용====
 +
 +템플릿 스크립트의 foreach도 PHP의 foreach와 동일한 동작을 한다.
 +기본 코드는 아래와 같다.
 +
 +  <!--@foreach($배열변수 as $key => $value)-->
 +
 +  반복 실행될 문장
 +
 +  <!--@end-->
 +
 +다음과 같은 배열이 있다고 가정해 보겠다.
 +  {@$a = array("one"=>1, "two"=>2, "three"=>3, "etc"=>365)}
 +그러면 다음과 같은 코드를 이용하여 키와 값을 출력할 수 있다.
 +  <!--@foreach($a as $key => $value)-->
 +
 +  <p>$a[{$key}]의 값은 {$value} 이다</p>
 +
 +  <!--@end-->
 +
 +출력결과는 아래와 같다.
 +  $a[one]의 값은 1 이다.
 +  $a[two]의 값은 2 이다.
 +  $a[three]의 값은 3 이다.
 +  $a[etc]의 값은 365 이다.
 +
 +====파일의 삽입====
 +
 +하나의 템플릿 파일을 여러 개로 나누어서 분리한 후
 +include 를 이용하여 하나로 합칠 수 있다.
 +기본 코드는 아래와 같다.
 +
 +   <!--#include('파일경로')-->
 +
 +주의할 것은 include 문을 이용하여 PHP 파일을 불러와도 PHP로 해석되지 않다.
 +템플릿 스크립트의 include 는 분할된 XE템플릿 파일을 include 할 뿐 이다.
 +
 +====CSS/자바스크립트와의 연결====
 +
 +CSS나 자바스크립트를 사용하기 위해서는 아래 코드를 사용한다.
 +   <!--%import(파일경로)-->
 +이렇게 import 된 파일은 **선언된 위치에 상관없이** HTML의 <head> 안에 자동으로 삽입된다.
 +
 +XML JS Filter의 적용 방법도 CSS/자바스크립트와의 연결 방법과 같다.
 +
 +
 +====모바일 모드 구분====
 +
 +  <span cond="Mobile::isMobileCheckByAgent()">모바일모드이다.</span>
 +  <span cond="!Mobile::isMobileCheckByAgent()">모바일모드가 아니다.</span>
 +===== 변수=====
 +
 +
 +====접속자 정보====
 +http://www.xeschool.com/xe/xenote_useful_variable_logged_info
 +
 +^  접속자 정보  ^  설명  ^
 +|$logged_info->member_srl|회원의 고유 번호. 중복 X|
 +|$logged_info->user_id| 아이디|
 +|$logged_info->email_address|메일 주소|
 +|$logged_info->passwrod|비밀번호. MD5 형식으로 암호화 되어 있음.|
 +|$logged_info->email_id|메일 주소에서 아이디 부분만 뽑아낸 것.|
 +|$logged_info->email_host|메일 주소에서 호스타 부분만 뽑아낸 것.|
 +|$logged_info->user_name|이름|
 +|$logged_info->nick_name|닉네임|
 +|$logged_info->homepage|홈페이지 주소|
 +|$logged_info->blog|블로그 주소|
 +|$logged_info->birthday|생일|
 +|$logged_info->allow_mailing|메일링 수신|
 +|$logged_info->allow_message|쪽지 수신 여부 (Y: 전체 수신, N :거부, F: 친구만 허용)|
 +|$logged_info->denied|사용 중지 (Y: 사용 중지)|
 +|$logged_info->limit_date|제한일|
 +|$logged_info->regdate|가입일|
 +|$logged_info->last_login|최근 로그인 시간|
 +|$logged_info->is_admin|최고 관리자 여부 (Y: 최고 관리자, N: 최고 관리자 아님)|
 +|$logged_info->description|설명|
 +|$logged_info->profile_image|프로필 이미지 정보가 담긴 배열|
 +|$logged_info->profile_image->width|프로필 이미지 가로 폭|
 +|$logged_info->profile_image->height|프로필 이미지 세로 폭|
 +|$logged_info->profile_image->src|프로필 이미지 전체 주소|
 +|$logged_info->profile_image->file|프로필 이미지 경로|
 +|$logged_info->image_name|이미지 이름 정보가 담긴 배열|
 +|$logged_info->image_name->width|이미지 이름 가로 폭|
 +|$logged_info->image_name->height|이미지 이름 세로 폭|
 +|$logged_info->image_name->src|이미지 이름 전체 주소|
 +|$logged_info->image_name->file|이미지 이름 경로|
 +|$logged_info->image_mark|이미지 마크 정보가 담긴 배열|
 +|$logged_info->image_mark->width|이미지 마크 가로 폭|
 +|$logged_info->image_mark->height|이미지 마크 세로 폭|
 +|$logged_info->image_mark->src|이미지 마크 전체 주소|
 +|$logged_info->image_mark->file|이미지 마크 경로|
 +|$logged_info->signature|서명|
 +|$logged_info->group_list|소속된 그룹 정보가 담긴 배열|
 +
 +  * [[https://www.dokuwiki.org/devel:environment|도쿠위키 변수는 여기 참조]]
 +    * userinfo — only set for a logged user, an associative array…
 +      * pass — password, encrypted
 +      * name — full name
 +      * mail — email address
 +      * grps — groups the user belongs to (Array )
 +      * buid — a special id constructed from details of the user's browser and IP address
 +
 +xe의 그룹 구조
 +key : 1 ~~~ val : admin
 +key : 3 ~~~ val : mania
 +===== 도쿠 위키와 세션만 연동=====
 +
 +http://50ndd1n6.tistory.com/59
 +
 +[[xe dokuwiki]]
 +===== 훌륭한 로긴 방식=====
 +http://www.xpressengine.com/tip/16724404
 +
 +http://bb.vaslor.net/index.php?module=loginxeclient&act=dispLoginxeclientOAuth&provider=naver
 +
 +템플릿에
 +
 +  <p><a href="{getUrl('','module','loginxeclient','act','dispLoginxeclientOAuth','provider','naver')}">네이버계정으로 로그인</a></p>
 +
 +추가.
 +
 +====socialxe====
 +
 +XE 기본으로 표시되는 로그인 폼에서도 수정을 하시려면 회원 관리 모듈의 스킨 ''/modules/member/skins/default/login_form.html'' 파일을 수정하면된다. 참고로 SocialXE 공식 사이트에서는 login_form.html 파일의 내용을 아래와 같이 수정하여 사용하고 있다.
 +
 +{@header("Location: " . getNotEncodedUrl('act', 'dispSocialxeLoginForm'))}
 +
 +=====외부페이지에서 로그인 정보를 출력=====
 +
 +http://zbxe.bluegate.kr/19
 +<code php>
 +<?PHP
 +$logged_info = Context::get("logged_info");
 +if($logged_info){
 +echo $logged_info->nick_name."님 로그인 되었다";
 +} else {
 +echo "로그인을 먼저 하십시요";
 +}
 +?>
 +</code>
 +
 +http://www.xpressengine.com/tip/16309252
 +====함수 호출..====
 +
 +  <a href="{getUrl('act','dispMemberLoginForm')}">{$lang->cmd_login}</a>
 +  <a href="{getUrl('act','모듈아이디')}">출력하고픈말</a>
 +
 +이렇게 바꾸시면 돼요^^
 +그러니까
 +
 +  * dispMemberLoginForm 로그인  [[http://openwiki.kr/bb/?act=dispMemberLoginForm]]
 +  * dispMemberInfo 마이페이지
 +  * dispMemberOwnDocument 내글
 +  * dispMemberScrappedDocument 내스크랩
 +  * dispMemberSavedDocument 내 문서
 +  * dispCommunicationMessages 쪽지함
 +
 +등등 실제 주소에서 http://www.abc.com/?mid=index&act=dispCommunicationMessages
 +
 +====모듈정보====
 +
 +|목록 및 선택된 글 출력| dispBoardContent| list.html|
 +|태그 목록 모두 보기| dispBoardTagList| tag_list.html|
 +|글 작성 화면 출력|| write_form.html|
 +|문서 삭제 화면 출력| dispBoardDelete| delete_form.html|
 +|댓글의 답글 화면 출력| dispBoardReplyComment (문서에 댓글) \\ dispBoardWriteComment (댓글에 댓글)| comment_form.html|
 +|댓글 수정 폼 출력| dispBoardModifyComment| comment_form.html|
 +|댓글 삭제 화면 출력| dispBoardDeleteComment| delete_comment_form.html|
 +|엮인글 삭제 화면 출력| dispBoardDeleteTrackback| delete_trackback_form.html|
 +|메세지 출력| dispBoardMessage| message.html|
 +|비밀번호 입력| input_password_form.html|
 +
 +|회원 정보 보기| member_info| dispMemberInfo                            |
 +|스크랩 목록| dispMemberScrappedDocument| scrapped_list                 |
 +|저장함 보기| dispMemberSavedDocument| saved_list                       |
 +|작성 글 보기| dispMemberOwnDocument| document_list                     |
 +|회원 정보 수정| dispMemberModifyInfo| modify_info                      |
 +|비밀번호 변경| dispMemberModifyPassword| modify_password               |
 +|회원 탈퇴| dispMemberLeave| leave_form                                 |
 +|오픈 아이디 탈퇴| dispMemberOpenIDLeave| openid_leave_form             |
 +|로그아웃| dispMemberLogout| logout                                     |
 +|저장된 글 목록 (pop)| dispSavedDocumentList| saved_list_popup          |
 +
 +
 +
 +|로그인| dispMemberLoginForm| login_form                                       |
 +|회원가입| dispMemberSignUpForm| signup_form                                   |
 +|아이디 / 비밀번호 찾기| dispMemberFindAccount| find_member_account            |
 +|인증메일 재발송| dispMemberResendAuthMail| resend_auth_mail                   |
 +|임시 비밀번호| dispMemberGetTempPassword| find_temp_password                  |
 +
 +
 +
 +confirm_member_account_mail.html
 +메일 인증 같음
 +find_member_account_mail.html
 +회원 정보를 메일로 찾을 때
 +communication 모듈
 +
 +
 +|친구 보기| dispCommunicationFriend| friends                                     |
 +|쪽지함 보기| dispCommunicationMessages| messages                                |
 +|새 쪽지 보여줌 (pop)| dispCommunicationNewMessage| new_message                  |
 +|쪽지 발송 출력 (pop)| dispCommunicationSendMessage| send_message                |
 +|친구 추가 (pop)| dispCommunicationAddFriend| add_friend                         |
 +|친구 그룹 추가 (pop)| dispCommunicationAddFriendGroup| add_friend_group         |
 +
 +글쓰기 ?mid=game&act=dispBoardWrite&page=1
 +
 +글쓰기 미리 내용 넣기 http://www.xpressengine.com/tip/18022769
 +
 +=====팁=====
 +
 +====속도====
 +
 +글 등록시에만 등록속도가 현저히 떨어진다면
 +캐쉬 문제일 가능성이 있다.
 +
 +files 폴더에 cache_123456789 라는 폴더가 쌓여있는지 먼저 확인해보고
 +  cache_123456786
 +  cache_123456787
 +  cache_123456788
 +  cache_123456789
 +이처럼 cache_ 숫자 가 있는 폴더를 정리 해야된다.
 +
 +그렇다고 무작정 다 지우게 되면 사이트에 문제가 발생하니
 +cache_123456789 폴더를 백업하고 cache_123456789를 하나씩지우면서
 +테스트 를 해보기를 권장한다.
 +
 +====xe.min.css 삭제...====
 +
 +unload 태그가 안먹히면 이런 임시방편을 사용해보라..
 +<code><script type="text/javascript">
 +jQuery("link[rel=stylesheet][href*='common/css/xe.min.css']").remove();
 +</script></code>
 +
 +혹시 먹히지 않는다면 아래 방법으로..
 +<code><script type="text/javascript">
 +jQuery(function(){
 +jQuery("link[rel=stylesheet][href*='common/css/xe.min.css']").remove();
 +});
 +</script></code>
 +
 +첫째는 xe.min.css 파일을 아예 로드하지 않는 방법이다.
 +둘째는 파일이 로드된 뒤에 지우는 방식이다.
 +====기본 URL 설정이 안 되어 있다.====
 +
 +아마 각종 해킹에 대한 보안대책의 하나로 현재의 서버 정보와 지정된 주소가 다르면 에러를 뿜는 것으로 보인다.
 +
 +일반-설정-고급-기본 URL을 지정해서 해결 되는 경우도 있으나,
 +
 +기본url은
 +''xe - files - config - db.config.php'' 열고
 +''$db_info->default_url''
 +여기에 값을 넣으면 된다.
 +
 +예: ''$db_info->default_url = 'http://openwiki.kr/';''
 +
 +그래도 안된다면 ''classes/module/ModuleHandler.class.php'' 파일의 130번째 줄 부근의 에러 발생 루틴을 주석처리하면 된다.
 +
 +<file php>if($host && ($host != $defaultHost && $host != $site_module_info->domain))
 +{
 +  // throw new Exception('msg_default_url_is_null'); // 이걸 주석처리..
 +}</file>
 +
 +====인쇄====
 +
 +  http://bb.openwiki.kr/index.php?module=document&act=dispDocumentPrint&document_srl=47716&mid=tech
 +  http://www.ilbe.com/index.php?module=document&act=dispDocumentPrint&document_srl=5286110344
 +=====사용자 관리=====
 +
 +권한관리 설정하기
 +게시판에 대한 권한 관리에는 다음과 같이 여러개로 나뉩니다.
 +
 +  * 접근 권한 : 게시판에 접근할 수 있는 권한을 각 회원 그룹별로 지정할 수 있다.
 +  * 목록 : 게시판 목록을 볼수 있는 권한을 각 회원 그룹별로 지정할 수 있다.
 +  * 열람 : 게시판 상세내용을 볼수 있는 권한을 각 회원 그룹별로 지정할 수 있다.
 +  * 글 작성 : 게시판에 글을 등록할 수 있는 권한을 각 회원 그룹별로 지정할 수 있다.
 +  * 댓글 작성 : 게시판에 댓글을 등록할 수 있는 권한을 각 회원 그룹별로 지정할 수 있다.
 +  * 관리 권한 : 게시판을 관리 할 수 있는 권한을 각 회원 그룹별로 지정할 수 있다.
 +
 +관리 권한으로 설정된 그룹에 속한 회원들은 해당 게시판의 글을 마음대로 삭제하고, 수정할 수 있기 때문에
 +신중하게 설정해야 한다.
 +
 +=====참고자료=====
 +
 +  - SOL님의 SMS로 XE 게시판에 글쓰기 http://sol.textyle.kr/23984
 +  - 뎅ㅇㅣ님의 XE - JSON 모듈 만들기 http://wannabewize.tistory.com/89
 +  - Hide_D님 board.api.php 사용법 http://www.xpressengine.com/18405009
 +