RX/XE 팁
XE FAQ 는 제가 XE공홈 '묻고 답하기'에 답변한 내용들 중 일부를 정리한 내용입니다. (대부분이 제가 한 답변이죠)
XE Tips 는 제가 XE 공홈에 쓴 XE 관련 유용한 팁들입니다. 기능개선은 공홈에 안 적어둔 XE 유용 개선팁들입니다.
유용정보는 외부 검색을 통해 알아낸 소스등을 기재해둔 곳입니다.
버그 신고내역들은 XE 사용하다가 발견한 버그 패치방법들로, Core Issue 에 기록해뒀기에 XE 에 적용이 되었을 가능성이 있겠죠

제가 쓴 글들에 대해 퍼가실때는 꼭 출처를남겨주시고.. (다만 플래시뷰 기반이기에 퍼가기는조금 힘들 수 있겠죠 ^^;)
타회원의 글들도 적혀있는 출처를 같이 꼭 기재해주세요
sejin7940 조회:46962 2012.08.11 22:55
출처 똑띠 
출처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

  1. <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 예제

  1. <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 예제입니다.

 

<query id="getTrashList" action="select">
    <tables>
        <table name="documents" />
        <table name="document_trash" />
    </tables>
    <columns>
        <column name="documents.*" />
        <column name="document_trash.trash_srl" alias="trash_srl" />
        <column name="document_trash.module_srl" alias="module_srl" />
        <column name="document_trash.trash_date" alias="trash_date" />
        <column name="document_trash.description" alias="trash_description" />
        <column name="document_trash.ipaddress" alias="trash_ipaddress" />
        <column name="document_trash.user_id" alias="trash_user_id" />
        <column name="document_trash.user_name" alias="trash_user_name" />
        <column name="document_trash.nick_name" alias="trash_nick_name" />
        <column name="document_trash.member_srl" alias="trash_member_srl" />
    </columns>
    <conditions>
        <condition operation="equal" column="document_trash.document_srl" default="documents.document_srl" notnull="notnull" />
        <condition operation="in" column="document_trash.module_srl" var="module_srl" filter="number" pipe="and" />
        <condition operation="equal" column="document_trash.member_srl" var="member_srl" filter="number" pipe="and" />
 
        <group pipe="and">
            <condition operation="like" column="documents.title" var="s_title" />
            <condition operation="like" column="documents.content" var="s_content" pipe="or" />
            <condition operation="like" column="documents.user_name" var="s_user_name" pipe="or" />
            <condition operation="like" column="documents.user_id" var="s_user_id" pipe="or" />
            <condition operation="like" column="documents.nick_name" var="s_nick_name" pipe="or" />
            <condition operation="like" column="documents.email_address" var="s_email_addres" pipe="or" />
            <condition operation="like" column="documents.homepage" var="s_homepage" pipe="or" />
            <condition operation="like" column="documents.tags" var="s_tags" pipe="or" />
            <condition operation="equal" column="documents.is_secret" var="s_is_secret" pipe="or" />
            <condition operation="equal" column="documents.member_srl" var="s_member_srl" pipe="or" />
            <condition operation="more" column="documents.readed_count" var="s_readed_count" pipe="or" />
            <condition operation="more" column="documents.voted_count" var="s_voted_count" pipe="or" />
            <condition operation="more" column="documents.comment_count" var="s_comment_count" pipe="or" />
            <condition operation="more" column="documents.trackback_count" var="s_trackback_count" pipe="or" />
            <condition operation="more" column="documents.uploaded_count" var="s_uploaded_count" pipe="or" />
            <condition operation="like_prefix" column="documents.regdate" var="s_regdate" pipe="or" />
            <condition operation="like_prefix" column="documents.last_update" var="s_last_update" pipe="or" />
            <condition operation="like_prefix" column="documents.ipaddress" var="s_ipaddress" pipe="or" />
        </group>
 
 
    </conditions>
    <navigation>
        <index var="sort_index" default="documents.list_order" order="order_type" />
        <list_count var="list_count" default="20" />
        <page_count var="page_count" default="10" />
        <page var="page" default="1" />
    </navigation>
</query>

 

Letf Join Select 예제

 

<query id="getDocumentsExtraVars" action="select">
    <tables>
        <table name="document_extra_keys" alias="extra_keys" />
        <table name="document_extra_vars" alias="extra_vars" type="left join">
            <conditions>
                <condition operation="equal" column="extra_keys.module_srl" default="extra_vars.module_srl" />
                <condition operation="in" column="extra_vars.document_srl" var="document_srl" pipe="and" />
                <condition operation="equal" column="extra_keys.eid" default="extra_vars.eid" pipe="and" />
            </conditions>
        </table>
    </tables>
    <columns>
        <column name="extra_keys.module_srl" alias="module_srl" />
        <column name="extra_keys.var_name" alias="name" />
        <column name="extra_keys.var_type" alias="type" />
        <column name="extra_keys.var_is_required" alias="is_required" />
        <column name="extra_keys.var_search" alias="search" />
        <column name="extra_keys.var_default" alias="default" />
        <column name="extra_keys.var_desc" alias="desc" />
        <column name="extra_keys.var_idx" alias="idx" />
        <column name="extra_vars.document_srl" alias="document_srl" />
        <column name="extra_vars.lang_code" alias="lang_code" />
        <column name="extra_vars.value" alias="value" />
        <column name="extra_keys.eid" alias="eid" />
    </columns>
    <navigation>
        <index var="sort_index" default="extra_keys.var_idx" order="asc" />
    </navigation>
</query>
 

 

Insert 예제

  • document.insertCategory : 문서 카테고리 추가

    1. <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>

update 예제

  • document.updateCategory : 특정 카테고리의 제목이나 순서, 최근 수정일을 변경

    1. <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>

delete 예제

  • document.deleteCategory : 특정 카테고리를 삭제

    1. <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>

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 증가합니다.

 

$args->document_srl = $this->document_srl;
$args->incr_readed_count = true;
$output = executeQuery('document.getDocument', $args);

---------------------------------
 
학습용으로 올리는 자료 입니다.
원본글은 http://xe.xpressengine.net/wiki/entry/1.%20XML%20Query%20사용법 에서 확인 가능합니다.
  • member.getMemberList : member테이블에서 특정 조건을 가진 회원들을 페이징을 하면서 select

    1. <query id="getMemberList" action="select">
      <tables>
         <table name="member" />
      </tables>

    2. <columns>
         <column name="*" />
      </columns>

    3. <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>
  • document.getMonthlyArchivedList : 모듈을 '년월'일을 기준으로 group by 한 결과를 가져옴
  • <query> 의 attribute

    • id : 쿼리를 찾을 수 있는 아이디입니다. module.query_id 로 query xml 파일을 찾고 사용하게 됩니다.
      action : select, update, delete, insert 4가지 종류가 있습니다.

     

  • <tables>
    • 테이블 조인시 여러개의 <table> 을 사용할 수 있습니다.
      name : 원테이블 명 (제로보드XE에서 prefix는 무시) alias : join또는 다른 용도로 원테이블명을 바꾸어 사용할 경우
  • <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 절을 사용할 수 있습니다.
전체 695건
번호 카테고리 제목 출처 등록일 조회
공지 XE 기능개선 XE 1.11.18 이후 버전의 익명 수정 버그 수정법 xetown  2023.10.07 3209
공지 XE 기능개선 XE 1.11.14 보안패치 - 타인의 쪽지 내용을 확인할 수 있는 버그 패치방법 xetown  2023.10.03 3272
공지 XE 기능개선 XE 1.11.6 이후 보안배치 #4 file rhymix  2022.07.05 3440
공지 1.11.6 XE 1.11.6 이후 보안배치 #3 rhymix  2022.04.02 3385
공지 1.11.6 XE 1.11.6 이후 보안배치 #1 xetown  2021.06.22 3783
공지 1.11.6 XE 1.11.6 이하 에서 공개댓글을 비밀댓글로 변경시 생길 수 있는 오류 수정법 sejin7940  2021.01.10 3706
공지 XE 기능개선 XE 1.11.4 이후에서 파일 업로드시 정상 작동 안 하는 현상 수정법 XE github  2019.04.02 6464
공지 XE 기능개선 php 7.1 환경에서 XE 오류 나는 경우 확인할 사항 sejin7940  2018.07.11 6384
공지 유용정보 php7.2 환경에서 XE 오류가 생기는 경우 - Object 클래스 변경 필요 XE Github  2017.11.27 9961
공지 XE 기능개선 XE 1.8.30 이하에서 반드시 수정해주셔야하는 부분입니다. XE 1.8.31  2017.02.26 7167
공지 1.8.18 XE 1.8.18 에서 사용시 반드시 수정해야할 사항들 ( XE 1.8.20 이후에서는 수정 불필요 ) xetown  2016.04.03 26294
공지 XE 기능개선 XE 1.8.12 이후부터 proc controller 일부가 작동 안 할 경우 확인할 부분 [1] XE  2015.10.16 26205
615 1.5 버그 관리자페이지 전체 댓글 리스트에서 추천/비추천수 안 나오는 버그 수정법 sejin7940  2012.06.22 4618
614 1.5 버그 IE7에서 관리자페이지->콘텐츠->문서 에서 일괄 삭제/이동/복사 등이 안 되는 경우 sejin7940  2012.07.12 4750
613 1.5 버그 본문 내부의 이미지를 썸네일화 시키지 못하는 버그 [1] sejin7940  2012.07.19 6146
612 유용정보 언어 깨지는 경우 sejin7940  2012.07.20 4844
611 유용정보 회원가입시 인증메일 수정하는 방법 sejin7940  2012.07.26 5363
610 1.5 버그 중국어(zh-CN) 포함한 다국어시 페이지모듈 버그 해결법 sejin7940  2012.07.26 4322
609 XE 기능개선 SNS링크시 다국어 설정 그대로 넘겨주는 방법 sejin7940  2012.08.04 4624
608 유용정보 게시판에서 게시글이동이 갑자기 정상 작동 안 할 때 sejin7940  2012.08.07 4651
607 XE 기능개선 특정 확장변수값이 포함된 글의 총 개수를 출력하는 함수 (120908 수정) sejin7940  2012.08.07 5198
» 유용정보 XE 의 xml query 문법 똑띠  2012.08.11 46962
605 1.5 버그 게시판 수가 아주 많아질때 메모리 에러 뜨는 경우 sejin7940  2012.08.22 4410
604 1.5 버그 회원가입폼의 설명 부분 안 지워지는 버그 수정법 sejin7940  2012.08.30 4312
603 1.5 버그 게시판 확장변수 설명 삭제 안 되는 버그 sejin7940  2012.08.30 4419
602 1.5 버그 친구목록에서 동시 이동/동시 삭제 등이 안 되는 경우 sejin7940  2012.09.02 4414
601 1.5 버그 다국어 글 이동시 기본 글 내용이 변하는 버그 해결 [1] sejin7940  2012.09.06 4411
600 유용정보 DB table 에 항목 하나 추가한 경우.. 스키마에 반드시 추가해야함   2012.09.20 5358
599 유용정보 ereg 함수등, php 함수들 관련에러시 php 버전을 확인해볼것   2012.11.11 5099
598 XE 기능개선 로그인 실패시 쪽지 또는 메일이 안 날라오게 하는 방법 sejin7940  2012.11.12 5044
597 유용정보 링크 클릭시 주변 점선 없애는 방법 해피정  2012.11.13 5196
596 XE 기능개선 본문내 이미지 조절 애드온 기능 확장 - 원본이미지 모달 제거 / 작은이미지 크게 확장하기 sejin7940  2012.11.25 5774
XE Login