목차
Xpressengine (XE)
오픈소스 CMS. 현재는 네이버 산하 오픈소스 프로젝트로 개발이 진행되고 있다.
세션 정보를 파일이 아닌 DB를 이용하는 것에 대한 논의 http://xe.xpressengine.net/?document_srl=16803825
세션 테이블 때문에 문제라는 많은 글들
접속자도 별로 없는데
세션 테이블의 레코드 수가 백만개!!.
자동으로 정리 하도록 할 수 없나.
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 | 소속된 그룹 정보가 담긴 배열 |
-
- 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://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'))}
외부페이지에서 로그인 정보를 출력
<?PHP $logged_info = Context::get("logged_info"); if($logged_info){ echo $logged_info->nick_name."님 로그인 되었다"; } else { echo "로그인을 먼저 하십시요"; } ?>
함수 호출..
<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 태그가 안먹히면 이런 임시방편을 사용해보라..
<script type="text/javascript"> jQuery("link[rel=stylesheet][href*='common/css/xe.min.css']").remove(); </script>
혹시 먹히지 않는다면 아래 방법으로..
<script type="text/javascript"> jQuery(function(){ jQuery("link[rel=stylesheet][href*='common/css/xe.min.css']").remove(); }); </script>
첫째는 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번째 줄 부근의 에러 발생 루틴을 주석처리하면 된다.
if($host && ($host != $defaultHost && $host != $site_module_info->domain)) { // throw new Exception('msg_default_url_is_null'); // 이걸 주석처리.. }
인쇄
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