XE Tips 는 제가 XE 공홈에 쓴 XE 관련 유용한 팁들입니다. 기능개선은 공홈에 안 적어둔 XE 유용 개선팁들입니다.
유용정보는 외부 검색을 통해 알아낸 소스등을 기재해둔 곳입니다.
버그 신고내역들은 XE 사용하다가 발견한 버그 패치방법들로, Core Issue 에 기록해뒀기에 XE 에 적용이 되었을 가능성이 있겠죠
제가 쓴 글들에 대해 퍼가실때는 꼭 출처를남겨주시고.. (다만 플래시뷰 기반이기에 퍼가기는조금 힘들 수 있겠죠 ^^;)
타회원의 글들도 적혀있는 출처를 같이 꼭 기재해주세요
출처 | 똑띠 |
---|---|
출처URL | http://jobdahan.net/zbxe_tip_tech/1241088 |
사용법
모듈 또는 애드온, 플러그인등에서 아래와 같이 사용할 수 있습니다.
1. $args->name = "zero";
2. $output = executeQuery("member.getMemberInfo", $args);
XML Query를 호출하여 실제 DB의 데이터를 받거나 조작하기 위해서 사용되는 executeQuery() 함수는 DB::executeQuery()의 alias입니다.
1. function executeQuery($xml_query_name, $args = null);
첫번째 인자로 실행하고자 하는 xml query의 이름을 받게 됩니다.
이름은 모듈명.쿼리ID 로 이루어집니다.
$args는 null일수도 있고 해당 xml query에서 필요시 stdclass의 variables type으로 변수의 key, value를 설정후 인자로 넘기게 됩니다.
결과는 Object class의 객체로 return 됩니다.
쿼리 실패는 $output->toBool()이 false일 경우이고 true라면 쿼리는 정상적으로 실행이 된 것을 의미합니다.
select문의 결과 데이터는 $output->data 변수에 담겨져 return 됩니다.
XML sample
- <query id="쿼리아이디" action="select|update|delete|insert">
<tables>
<table name="원테이블이름" alias="alias" />
...
</tables>
<columns>
<column name="컬럼명" alias="alias" />
...
</columns>
<conditions>
<condition operation="조건걸" column="Column명" var="변수명" filter="필터형식" default="기본값" notnull="notnull" minlength="최소길이" maxlength="최대길이" pipe="연결연산자" />
...
<group pipe="연결연산자">
<condition operation="조건걸" column="Column명" var="변수명" filter="필터형식" default="기본값" notnull="notnull" minlength="최소길이" maxlength="최대길이" pipe="연결연산자" />
...
</group>
...
</conditions>
<navigation>
<index var="이름" default="기본값" order="desc|asc" />
<list_count var="변수명" default="기본값" />
<page_count var="변수명" default="기본값" />
<page var="변수명" default="변수명" />
</navigation>
<groups>
<group column="GroupBy 대상" />
</groups>
</query>
Select query 예제
- <query id="getMonthlyArchivedList" action="select">
<tables>
<table name="documents" />
</tables>
<columns>
<column name="substr(regdate,1,6)" alias="month"/>
<column name="count(*)" alias="count" />
</columns>
<conditions>
<condition operation="in" column="module_srl" var="module_srl" filter="number" />
</conditions>
<groups>
<group column="substr(regdate,1,6)" />
</groups>
</query>
Join Select 예제
document.getTrashList 예제입니다.
Letf Join Select 예제
Insert 예제
-
document.insertCategory : 문서 카테고리 추가
- <query id="insertCategory" action="insert">
<tables>
<table name="document_categories" />
</tables>
<columns>
<column name="category_srl" var="category_srl" filter="number" notnull="notnull" />
<column name="module_srl" var="module_srl" filter="number" default="0" notnull="notnull" />
<column name="title" var="title" notnull="notnull" minlength="2" maxlength="250" />
<column name="document_count" var="document_count" default="0" />
<column name="regdate" var="regdate" default="curdate()" />
<column name="last_update" var="last_update" default="curdate()" />
<column name="list_order" var="list_order" default="0" />
</columns>
</query>
- <query id="insertCategory" action="insert">
update 예제
-
document.updateCategory : 특정 카테고리의 제목이나 순서, 최근 수정일을 변경
- <query id="updateCategory" action="update">
<tables>
<table name="document_categories" />
</tables>
<columns>
<column name="title" var="title" />
<column name="list_order" var="list_order" />
<column name="last_update" var="last_update" default="curdate()" />
</columns>
<conditions>
<condition operation="equal" column="category_srl" var="category_srl" filter="number" notnull="notnull" />
</conditions>
</query>
- <query id="updateCategory" action="update">
delete 예제
-
document.deleteCategory : 특정 카테고리를 삭제
- <query id="deleteCategory" action="delete">
<tables>
<table name="document_categories" />
</tables>
<conditions>
<condition operation="equal" column="category_srl" var="category_srl" filter="number" notnull="notnull" />
</conditions>
</query>
- <query id="deleteCategory" action="delete">
Select Click Count 예제
Select 시 조회수 등의 정수의 숫자 컬럼을 +1 하는 기능입니다.
Cubrid의 경우에는 incr()이라는 함수를 사용하고 다른 데이타베이스의 경우 해당 컬럼을 Select후 Update 합니다.
XE Core 1.2.6 이상 버전에서 지원하고 있습니다.
document.getDocument XML Query에 Click Count 를 적용해 본 예제입니다.
select시 정수 숫자 컬럼 node에 attribute는 click_count, 값은 Argument로 매핑되는 변수명을 기입합니다.
<query id="getDocument" action="select">
<tables>
<table name="documents" />
</tables>
<columns>
<column name="document_srl" />
<column name="module_srl" />
<column name="category_srl" />
<column name="lang_code" />
<column name="is_notice" />
<column name="is_secret" />
<column name="title" />
<column name="title_bold" />
<column name="title_color" />
<column name="content" />
<column name="readed_count" click_count="incr_readed_count"/>
<column name="voted_count" />
<column name="blamed_count" />
<column name="comment_count" />
<column name="trackback_count" />
<column name="uploaded_count" />
<column name="password" />
<column name="user_id" />
<column name="user_name" />
<column name="nick_name" />
<column name="member_srl" />
<column name="email_address" />
<column name="homepage" />
<column name="tags" />
<column name="extra_vars" />
<column name="regdate" />
<column name="last_update" />
<column name="last_updater" />
<column name="ipaddress" />
<column name="list_order" />
<column name="update_order" />
<column name="allow_comment" />
<column name="lock_comment" />
<column name="allow_trackback" />
<column name="notify_message" />
</columns>
<conditions>
<condition operation="equal" column="document_srl" var="document_srl" filter="number" notnull="notnull" />
</conditions>
</query>
click_count 의 매핑변수 값이 true이면 해당 컬럼을 +1 증가합니다.
---------------------------------
-
member.getMemberList : member테이블에서 특정 조건을 가진 회원들을 페이징을 하면서 select
- <query id="getMemberList" action="select">
<tables>
<table name="member" />
</tables>
<columns>
<column name="*" />
</columns>
<conditions>
<condition operation="equal" column="is_admin" var="is_admin" />
<condition operation="equal" column="denied" var="is_denied" pipe="and" />
<group pipe="and">
<condition operation="like" column="user_id" var="s_user_id" />
<condition operation="like" column="user_name" var="s_user_name" pipe="or" />
<condition operation="like" column="nick_name" var="s_nick_name" pipe="or" />
<condition operation="like" column="email_address" var="s_email_address" pipe="or" />
<condition operation="like_prefix" column="regdate" var="s_regdate" pipe="or" />
<condition operation="like_prefix" column="last_login" var="s_last_login" pipe="or" />
</group>
</conditions>
<navigation>
<index var="sort_index" default="member_srl" order="desc" />
<list_count var="list_count" default="20" />
<page_count var="page_count" default="10" />
<page var="page" default="1" />
</navigation>
</query>
- <query id="getMemberList" action="select">
- document.getMonthlyArchivedList : 모듈을 '년월'일을 기준으로 group by 한 결과를 가져옴
-
<query> 의 attribute
- id : 쿼리를 찾을 수 있는 아이디입니다. module.query_id 로 query xml 파일을 찾고 사용하게 됩니다.
action : select, update, delete, insert 4가지 종류가 있습니다.
- id : 쿼리를 찾을 수 있는 아이디입니다. module.query_id 로 query xml 파일을 찾고 사용하게 됩니다.
- <tables>
- 테이블 조인시 여러개의 <table> 을 사용할 수 있습니다.
name : 원테이블 명 (제로보드XE에서 prefix는 무시) alias : join또는 다른 용도로 원테이블명을 바꾸어 사용할 경우
- 테이블 조인시 여러개의 <table> 을 사용할 수 있습니다.
- <columns>
- 처리하고자 하는 컬럼명을 입력하시면 됩니다. name : 컬럼명 alias : 다른 이름으로 바꾸어 결과를 만들고자 할 경우 지정
- <conditions>
- 조건절을 구성합니다.
- 조건절을 여러개의 그룹으로 사용하고자 할 때에는 <group> 태그를 이용해서 묶어 주실 수 있습니다.
- <group> ... </group>
- 조건절을 그룹으로 사용할 경우 pipe="and|or" 를 이용하여 그룹끼리의 조건을 지정할 수 있습니다.
- <condition>
-
operation : 아래와 같은 연산자로 처리가 됩니다.
equal : column = (var|default)
more : column >= (var|default)
excess : column > (var|default)
less : column <= (var|default)
below : column < (var|default)
notequal : column != (var|default)
notnull : column is not null
null : column is null
like_prefix : column like 'var|default%'
like_tail : column like '%var|default' -
like : column like '%var|default%'
in : column in (var|default) -
notin : column not in (var|default)
- column : 컬럼명을 지정할 수 있습니다.
- var : executeQuery()함수에서 2번째 인자의 key값을 지정할 수 있습니다.
-
filter : var 값의 조건을 filtering합니다. 아래와 같은 filter를 지원합니다.
email, email_address : 메일 형식
homepage : http|https://등의 홈페이지 형식
userid, user_id : 제로보드XE의 사용자 아이디 형식 (첫글자는 영문, 2번째부터는 숫자+영문+_)
number : 숫자만 허용
alpha : 영문자만 허용
alpha_number : 숫자+영문자만 허용 -
default : var값이 null일 경우 default값으로 대체됩니다. 아래와 같은 함수값을 가질 수도 있습니다.
ipaddress() : 접속자의 ip 주소
unixtime() : unix time (php의 time()함수)
curdate() : YYYYMMDDHHIISS
plus(int count) : column = column + count
minus(int count) : column = column - count - notnull : not null check를 하게 됩니다. minlength : 최소길이 체크 maxlength : 최대길이 체크 pipe : and|or등의 조건을 지정할 수 있습니다.
-
-
<navigation> : navigation은 정렬순서(order by) 또는 페이징을 지원합니다.
-
<index> 정렬할 컬럼과 정렬방법을 지정할 수 있습니다.
var : 대상 컬럼명을 담은 변수명
default : var값이 없을 경우 기본으로 정렬할 컬럼명 지정
order : asc|desc -
<list_count> 페이징을 한 결과를 받을 수 있습니다.
var : 목록의 rows를 지정
default : var값이 없을 경우 기본 rows 값 -
<page_count> 페이징 계산시에 하단 페이지 네비게이션의 수를 지정
var : 페이징 네비게이션의 수
default : var값이 없을 경우 기본 페이징 네비게이션의 수 -
<page> 현재 몇번째 페이지인지를 지정할 수 있습니다.
var : 현재 몇번째 페이지인지를 지정할 변수
default : var값이 지정되지 않았을 경우 페이지 번호
-
- <groups> : group by 절을 사용할 수 있습니다.