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

제가 쓴 글들에 대해 퍼가실때는 꼭 출처를남겨주시고.. (다만 플래시뷰 기반이기에 퍼가기는조금 힘들 수 있겠죠 ^^;)
타회원의 글들도 적혀있는 출처를 같이 꼭 기재해주세요
sejin7940 조회:46963 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 3212
공지 XE 기능개선 XE 1.11.14 보안패치 - 타인의 쪽지 내용을 확인할 수 있는 버그 패치방법 xetown  2023.10.03 3272
공지 XE 기능개선 XE 1.11.6 이후 보안배치 #4 file rhymix  2022.07.05 3443
공지 1.11.6 XE 1.11.6 이후 보안배치 #3 rhymix  2022.04.02 3392
공지 1.11.6 XE 1.11.6 이후 보안배치 #1 xetown  2021.06.22 3783
공지 1.11.6 XE 1.11.6 이하 에서 공개댓글을 비밀댓글로 변경시 생길 수 있는 오류 수정법 sejin7940  2021.01.10 3708
공지 XE 기능개선 XE 1.11.4 이후에서 파일 업로드시 정상 작동 안 하는 현상 수정법 XE github  2019.04.02 6466
공지 XE 기능개선 php 7.1 환경에서 XE 오류 나는 경우 확인할 사항 sejin7940  2018.07.11 6386
공지 유용정보 php7.2 환경에서 XE 오류가 생기는 경우 - Object 클래스 변경 필요 XE Github  2017.11.27 9962
공지 XE 기능개선 XE 1.8.30 이하에서 반드시 수정해주셔야하는 부분입니다. XE 1.8.31  2017.02.26 7170
공지 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
695 유용정보 구글 애드센스 광고가 없을때 해당 영역 숨기려면 sejin7940  2024.11.19 0
694 라이믹스 selectbox 형태를 사용시 빈값 (공백) 을 제일 앞에 추가하고 사용자정의 이름이 기본으로 출력되게 하려면 sejin7940  2024.11.06 0
693 라이믹스 라이믹스 DB 및 쿼리 query 와 XML 문법 안내 rhymix  2024.11.09 1
692 라이믹스 게시판 검색어가 40자로 제한되어있음. 이를 늘리려면 sejin7940  2024.10.25 10
691 라이믹스 라이믹스에서 글 복사, 이동, 휴지통 이동, 삭제 등시 쪽지 발송 안 되도록 sejin7940  2024.10.25 10
690 유용정보 "스팸방지 CAPTCHA 서버와 통신하는 도중 오류가 발생했습니다." 라는 에러가 뜨는 경우 sejin7940  2024.10.14 16
689 XE 기능개선 XE 1.8.3 미만에서 우리메일 ( ggmailing ) 연결방법 XE  2024.07.06 50
688 XE 기능개선 스케치북에서 임시저장 후 불러오기시 상태(공개,비밀글) 값이 선택 안 되는 현상 수정법 sejin7940  2024.05.07 53
687 유용정보 웹푸시 등을 사용할 경우 알림이 24개까지 누적이 되면 더 이상 알림이 오지 않는 현상 samsung  2024.05.14 69
686 유용정보 윈도우 화면 분할 기능 끄기 위시랜  2024.05.24 70
685 유용정보 정규식으로 img 테그만 제거 its me  2024.04.13 72
684 유용정보 css, js 파일 수정 후 적용 안될 때 jurin.log  2024.05.14 74
683 유용정보 calc() - 속성값을 사칙연산으로 정할 수 있게 하는 함수 사용시 주의할 점 sejin7940  2024.02.12 90
682 유용정보 스케치북 스킨에서 모바일에서 view 화면에서 사진 위에서 스크롤이 안 되는 현상이 발생할때 sejin7940  2024.02.21 91
681 XE 기능개선 글등록 후 페이지 이동되기 전에 alert 이나 특정한 행위를 하고픈 경우.. sejin7940  2024.02.04 92
680 유용정보 cdn 이 오류날때 임시 우회 방법 xetown  2024.05.03 92
679 유용정보 XE에서 대표 썸네일 및 파비콘 등록 관련하여 sejin7940  2024.05.14 92
678 유용정보 php 버전이 낮을 경우 php 서버 업데이트를 반드시 해야하는 이유 sejin7940  2024.05.13 93
677 다른 XE자료들 출석부(attendance) 모듈에서 특정 유저들이 출석 불가능한 경우 오류 수정법 sejin7940  2021.03.17 118
676 XE FAQ 게시판에서 등록일 기준 검색은 없나요? sejin7940  2023.03.31 121
XE Login