You cannot see this page without javascript.

Skip Navigation

XE 레이아웃 카메론 XE LAYOUT CAMERON XE2.0.11


애드온
2020.08.14 13:52

애드온의 기초 이해

(*.224.201.148) Views 183 Votes 0 Comment 0
Extra Form
원문주소
페이지 00012
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print

The basis of add-on

 

XE 애드온의 기초 이해

SMaker님의 글을 전문인용하여 재구성하였다. - http://xe.xpressengine.net/wiki/18180622

  • 애드온이란?
  • 애드온의 호출 시점
  • 애드온 호출시 전달 변수

 

애드온(Addon)이란?

 

XpressEngine에서 애드온은 후킹, 즉 정상적인 동작을 가로채는 동작을 합니다. php와 같은 인터프리터 언어에서 가능한 include를 이용하여 동작을 하는 구조입니다. function이나 class로 애드온을 개발하지 않은 이유는 XE의 정상적인 Context에 native code처럼 끼어들 수 있게 하기 위한 것이였습니다. 이 덕분에 XE의 애드온은 호출 되는 시점에서 native code 처럼 강력하게 동작할 수 있습니다. 다만 매우 신중히 제작해야 전체 동작에 무리를 주지 않게 됩니다.

애드온의 작동방법은 관리자 페이지에서 애드온 모듈을 선택후 동작하기를 원하는 모듈의 enable/disable만 선택 가능하며(체크하고 저장) 상세한 설정이 필요할 경우 해당 애드온과 연동되는 모듈을 찾아 설정해야 합니다. 즉 애드온을 켜고 끈다는 뜻은 전기 스위치처럼 ON/OFF의 개념과 같기 때문입니다.

 

"원시 코드란 특정 프로세서 및 지침의 집합으로 실행하기 위해 컴파일된 컴퓨터 프로그래밍 (코드)이다. 같은 프로그램이 다른 프로세서가 있는 컴퓨터에서 실행되는 경우, 소프트웨어는 컴퓨터가 원래의 프로세서를 에뮬레이트 할 수 있도록 제공될 수 있다. 이 경우에는 원래 프로그램은 새로운 프로세서의 "에뮬레이션 모드"에서 실행하고 원래 프로세서의 기본 모드보다 거의 확실하게 더 느리게 실행된다.(이것은 기본 모드의 새로운 프로세서에서 실행되도록 프로그램을 다시 작성하고 컴파일 할 수 있다.)"
Native code is computer programming (code) that is compiled to run with a particular processor (such as an Intel x86-class processor) and its set of instructions. If the same program is run on a computer with a different processor, software can be provided so that the computer emulates the original processor. In this case, the original program runs in "emulation mode" on the new processor and almost certainly more slowly than in native mode on the original processor. (The program can be rewritten and recompiled so that it runs on the new processor in native mode.) - http://searchsoa.techtarget.com/definition/native-code

 

좀더 쉽게 이야기하면 코어라는 프로세서의 중간에 개입하여 원래의 코드 진행을 중간에 가로막고 애드온 자신의 "해야 할 일"을 원래의 소스코드처럼 일한다는 뜻이다. 즉 코어는 자신의 소스코드를 변경하지 않아도 중간에 애드온이 끼어들어 일할 수 있는 여지를 몇 군데 미리 준비해 둔 것이다. 그것이 애드온의 호출 시점(called-position)이다.

 

애드온의 호출 시점 - XpressEngine의 동작 순서 참고

 

애드온 호출 시점은 다음 4군데입니다.

 

  • before_module_init - 모듈 객체 생성 이전 : 사용자의 요청으로 필요한 모듈을 찾은후 모듈의 객체를 생성하기 이전을 의미합니다.
  • before_module_proc - 모듈 실행 이전 : 모듈의 객체를 실행하고 모듈의 실행을 하기 이전을 의미합니다.
  • after_module_proc - 모듈의 동작 이후 : 생성된 모듈 객체를 실행하고 결과를 얻은 바로 후를 의미합니다.
  • before_display_content - 결과 출력 이전 : 모듈의 결과물과 레이아웃의 적용을 끝내고 출력하기 바로 이전을 의미합니다.

 

애드온 호출시 전달 변수

 

호출 시점이 4군데마다 전달되는 변수가 각각 다른 것들이 있고 공통적인 것이 있습니다. 전달변수는 다음과 같습니다.

 

▶ 공통 전달 변수

  • $called_position - 어느 시점에서 호출되는지에 대한 정보가 있습니다. before_module_init, before_module_proc, after_module_proc, before_display_content 4개의 값중 하나를 가지게 됩니다.
  • $addon_path - 호출된 애드온의 경로를 담고 있습니다.
  • $addon_info - XE의 애드온들은 각각 독자적인 설정과 애드온이 동작하기를 원하는 대상 모듈을 지정할 수 있습니다. 이 정보들이 $addon_info 변수를 통해서 전달됩니다.

▶ $called_position(호출 시점)의 4가지 변수값

 

$called_position = before_module_init

 

before_module_init 호출은 ModuleHandler::__construct() 에서 호출이 됩니다. ModuleHandler Class의 native code와 같이 동작하게 되고 이 시점에서는 아래와 같은 변수가 등록이 됩니다. 다만 아래 값들은 Context::get() 을 통해 request argument의 변수들을 설정한 것일 뿐 검증된 것은 아닙니다.
blogAPI라는 애드온은 $this->act == 'blogAPI' 일 경우 동작하는 애드온이며 이와 같이 XE가 동작하기 전의 시점에 무언가를 설정하는 시점으로 이해하시면 됩니다.

 

  • $this->module : 요청된 $module 변수값
  • $this->mid : 요청된 $mid 변수값
  • $this->act : 요청된 $act 값
  • $this->document_srl : 요청된 문서 고유 번호
  • $this->module_srl : 요청된 모듈 고유 번호

$called_position = before_module_proc

 

ModuleObject::proc() 즉 요청에 의해 생성된 모듈 객체의 실행 method가 동작하기 전에 호출이 됩니다. 요청되어 생성된 모듈 객체의 모든 변수를 사용할 수 있습니다. $this 지시자를 통해서 애드온 내에서는 모듈의 일부로서 기능을 수행할 수 있습니다.

 

$called_position = after_module_proc

 

ModuleObject::proc() 즉 요청에 의해 생성된 모듈 객체의 실행 method가 실행된 후에 호출이 됩니다. before_module_proc와 마찬가지로 요청에 의해 생성된 모듈 객체의 모든 변수가 사용 가능합니다. 다만 $output 이라는 변수를 통해서 모듈의 동작 성공 유무를 파악할 수 있습니다.

 

$called_position = before_display_content

 

모든 처리가 끝난 후 결과값을 출력하기 바로 직전인 DisplayHandler::printContent()에서 호출됩니다. 일반적으로 이 시점은 HTML/JSON/XMLRPC 출력 직전이며 출력 직전에 HTML/JSON/XMLRPC 의 변조를 하기 위할때 사용할 수 있습니다. 예를 들어 회원들의 포인트에 따른 레벨 아이콘등을 결과물에 추가할 수 있습니다.

 

  • $oModule : 요청되어 생성된 모듈의 객체
  • $output : 출력하려는 HTML/JSON/XMLRPC 결과물

이와 같이 XE의 애드온은 요청되는 시점에 따라서 직접 변수를 조작하거나 참조 할 수 있는 기능을 가지고 있습니다.

 

 

 

💖 탑돌이님 에게 암호화폐로 후원하기 💖

  • 아이콘을 클릭하면 지갑 주소가 자동으로 복사 됩니다

    입금주소 rp2diYfVtpbgEMyaoWnuaWgFCAkqCAEg28  

    XRP 리플 입금( 기부) 하는법

    데스티

    네이션 태그

    1175658134

    각 거래소에서 입금주소 와 데스티네이션 태그를 입력하시면 됩니다.


    QR 코드
    xrp.png

    리플 송금시 주의할 점

    • 송금 후에 잔액이 항상 20XRP를 유지가능하도록 해야한다.
    • 송금요청할 때 트렌젝션 사용시 0.000015XRP가 무조건 지불된다.
    • 리플에서 제공해주는 지갑에 보관단위가 XRP뿐만 아니라 다른코인(예: BTC, LTC 등), USD, KRW 단위로 저장해놓을 수 있다.

    만약 히스토리가 궁금할경우 https://xrpcharts.ripple.com/graph/ 에서 리플 지갑 주소를 입력하면 역추적이 가능하다.

    리플 주소를 처음 만들경우 주소는 발급되지만 실제 활성화가 되어 있지 않는다. 최소 20XRP을 어디선가 송금 받은 후부터 지갑이 활성화 된다. 일종의 지갑 구입 or 보증금인듯

    태그 연관된 글
    1. [2020/08/14] CMS 연령구분 회원가입 애드온 by 탑돌이 (97)
    2. [2020/08/14] CMS 단어 차단 애드온 만들기 by 탑돌이 (153)
    3. [2020/08/14] CMS 기초 팝업 윈도우 애드온 만들기 by 탑돌이 (303)
    4. [2020/08/14] CMS 애드온의 제작 규칙 by 탑돌이 (63)
    5. [2020/08/14] CMS XE 애드온 개발하기 by 탑돌이 (45)
    6. [2020/08/14] CMS XE 애드온 by 탑돌이 (38)
    7. [2014/10/13] 공지사항 12개의 모듈과 애드온을 추가함 by 부운영자 (858)
    8. [2014/10/13] CMS 12개의 기능적인 모듈과 애드온 추가 by 부운영자 (961)
    TAG •
    Attach Images or Files

    Drop your files here, or click the button to the left.

    Maximum File Size : 0MB (Allowed extentsions : *.*)

    0 file(s) attached ( / )

    제로XE/라이믹스/그누/워드프레스

    회원만 쓰기 가능합니다.

    List of Articles
    No. Category Subject 페이지 Author Date Views
    Notice Tip&Tech xe 동작순서 부운영자 2015.08.24 977
    Notice Tip&Tech XE의 애드온 및 모듈의 기능 요약표 부운영자 2015.01.16 1219
    Notice Tip&Tech XEReferences 부운영자 2014.11.29 874
    Notice Tip&Tech XE 스킨 제작 매뉴얼 v1.1 (Korean, PDF) file 부운영자 2014.11.29 1236
    Notice Tip&Tech XE 개발자 매뉴얼 v1.1 (Korean, PDF) file 부운영자 2014.11.29 1732
    Notice Tip&Tech xe 레퍼런스 모음 file 부운영자 2014.10.10 2501
    화제의 글 Tip&Tech PHP용 로그 라이브러리 공유합니다. 부운영자 2021.03.29 48
    화제의 글 Tip&Tech plusad_widget 안되는것 ? 부운영자 2021.02.21 45
    화제의 글 Tip&Tech Font Awsome, XEICON 함께 사용하기 부운영자 2020.11.26 135
    245 애드온 애드온의 제작 규칙 Creating Rules of Add-on 애드온의 제작 규칙 애드온의 제작 규칙 애드온의 디렉토리 구조 info.xml 제작 애드온이름.addon.php 제작 XE XML Query의 사용 애드온 제작시 주의사항 애드온의 제작 규칙 애드온을 제작하기 위해서는 최소한 아래와 같은 규칙을 지켜야 합니다. 위치 : addons/애드온이름 애드온 제작자 정보, ... 00013 탑돌이 2020.08.14 63
    » 애드온 애드온의 기초 이해 The basis of add-on XE 애드온의 기초 이해 SMaker님의 글을 전문인용하여 재구성하였다. - http://xe.xpressengine.net/wiki/18180622 애드온이란? 애드온의 호출 시점 애드온 호출시 전달 변수 애드온(Addon)이란? XpressEngine에서 애드온은 후킹, 즉 정상적인 동작을 가로채는 동작을 합니다. php와 같은 인터프리터 언... 00012 탑돌이 2020.08.14 183
    243 애드온 XE 애드온 개발하기 The Story of XE Addons XE코어의 간섭쟁이 애드온 이야기... 애드온의 이해 - SMaker 기초 팝업 윈도우 애드온 만들기 단어 차단(block_word) 애드온 만들기 - sol 14세이상/미만 연령구분 회원가입 애드온 만들기 - SMaker 00011 탑돌이 2020.08.14 45
    242 애드온 XE 애드온 XE 애드온 개발하기 애드온의 기초 이해 애드온의 제작 규칙 기초 팝업 윈도우 애드온 만들기 단어 차단 애드온 만들기 연령구분 회원가입 애드온 0001 탑돌이 2020.08.14 38
    241 Tip&Tech 3개 서버 로그인 공유 가능한가요? 3개 서버 로그인 공유 가능한가요? 3개 서버 모두 라이믹스로 적용하고 파일서버와 DB 서버 내용이 모두 동일합니다. 그냥 사용자 분산을 위해서 .. 2개 서버는 아이피로... htttp://111.111.111.11 로 접속하고 1개 서버는 도메인 주소를 활용해서 htttP://abcd.com 으로 접속하는데요 이 두개 서버를 메뉴와 사용자에 따라... 탑돌이 2020.08.14 41
    240 모듈 보기(View)와 모델 BOOK Module dispBookContentView 보기(View)와 모델(Model) BOOK 모듈(mid)의 목록에서 책의 제목을 클릭하면 도서 정보를 보여주는 프론트 엔드 뷰(View)이다. 목록에서 다 소개하지 못한 정보의 값을 마저 출력해 보여주는 것이 목적이다. 목록에서 제목에는 다음과 같은 링크로 dispBookContentView 액션을 요청한다. {g... 00036 부운영자 2020.08.13 81
    239 모듈 목록(List)과 모델 BOOK Module dispBookContentList 목록(List)과 모델(Model) BOOK 모듈의 관리자 화면(back-end)에서 새로운 모듈(mid)을 생성하였다면, "Book 모듈 미리보기"와 같이 메뉴를 만들고 모듈(mid)을 연결하였을 것이다. 사용자는 모듈의 프론트 엔드에서 미리 설정된 기본 인덱스(index) 액션 이름을 모른다. 다만 메뉴에 연결... 00035 부운영자 2020.08.13 143
    238 모듈 백엔드 MVC BOOK Module Back-end BOOK 모듈의 백엔드 MVC BOOK 모듈의 백엔드(back-end) 프로그램은 예제(example) 모듈과 같다. 폴더의 이름은 곧 모듈의 이름이기 때문에 example을 book으로 변경한다. 또한 클래스 파일의 이름과 함수들, 포함된 메소드의 이름도 book으로 변경한 것이다. 아래의 BOOK 모듈 MVC 도표는 이전 과정에... file 00034 부운영자 2020.08.13 36
    237 모듈 테이블 설치와 언어팩 BOOK Module Table & Language books 테이블 설치와 언어팩 1. DB 테이블의 설치 (Database Table) 모듈의 스키마(schemas) 폴더에 XML 언어 형식으로 만들어진 DB 스키마 파일이 있다면 XE코어는 설치시 사용했던 DB 머릿말을 자동으로 붙여서 XML 파일의 이름과 같은 테이블을 만들어 준다. 예를 들어 books.xml 파일이 있... 00033 부운영자 2020.08.13 210
    236 모듈 모듈 설정 파일 BOOK Module Config BOOK 모듈 설정 파일 예제(example) 모듈을 만들어 보고 BOOK 모듈의 작동 방법을 미리 보았다면 다음 과정들이 그렇게 어렵지 않을 것이다. BOOK 모듈은 이전 과정에서 "폼(form)과 DB"의 예제로 사용했던 폼을 모듈로 구현해 보는 예제이다. 게시판(Board) 모듈처럼 여려운 메소드도 없고 그저 단순히 ... 00032 부운영자 2020.08.13 77
    235 모듈 웹 관련 도서 Book List : 웹 관련 도서 번호 도서명 저자 출판사 가격 106 dfsdf sss sss 123165 105 ㅁㄴㅇ ㅁㄴㅇ asd 11 104 1243 4325324 ㅈㄷㄱㄴㅇ 123124 103 Test Book Test Auther Test 1000 102 sad asdasd asdasdasd 1 101 히히 헤헤 호호 77 100 45 45 45 45 99 asdf dddd ffff 123545 98 아프니까청춘이다 아프면 환자지 뭔... 00031 부운영자 2020.08.13 28
    234 모듈 BOOK 모듈 만들기 BOOK Module BOOK 모듈 만들기 프론트 엔드 뷰(View) 구현을 위한 BOOK 모듈 만들기 예제 모듈의 기본 이해 과정은, 모듈이 폼을 다루는 방법에 대하여 예제 모듈의 백엔드(back-end) 프로그램을 직접 만들어 보면서 모델-뷰-컨트롤러의 동작 방식과 진행 과정을 살펴본 내용이다. 프론트 엔드(front-end) 프로그램은 관리자... 0003 부운영자 2020.08.13 50
    233 모듈 액션 권한과 스킨정보 Module Admin Action Grant & SkinInfo 액션 권한과 스킨 정보 액션의 권한 관리와 프로트 엔드 스킨의 정보를 출력하기 위한 과정이다. 액션 권한(permission)은 함수의 실행 권한을 확인하여 관리자가 아닌 경우 요청을 받아들이지 않는 것을 말한다. 따라서 액션 명세서인 module.xml 파일에서 <permissions> 요소에 액션... 00028 부운영자 2020.08.13 53
    232 모듈 관리자 모듈 탭메뉴 Module Admin Tab Menu 관리자 모듈 탭메뉴 모듈의 관리자 목록 페이지 헤더에 위치한 가로 탭메뉴의 구현이다. 1. 탭메뉴 header.html 탭메뉴 구성을 위한 header.html 파일을 tpl폴더에 다음과 같이 추가한다. tpl/header.html : 파일 다운로드 / header.html h3 class="xeAdmin"><span class="gray">{$lang->example_mana... 00027 부운영자 2020.08.13 109
    231 모듈 삭제 컨트롤러(Controller) Module Admin Controller for Delete 모듈 삭제와 컨트롤러(Controller) 모듈(mid)의 삭제는 모듈의 고유 식별 번호($module_srl)을 확인하고 module 테이블에서 해당 식별 번호를 삭제하는 것으로 끝난다. 여기에서는 프론트 엔드의 내용, 즉 삭제하려고 하는 모듈(mid)이 만들어 놓은 내용물에 대해서는 확인하지 않는다. ... 00027 부운영자 2020.08.13 49
    230 모듈 입력 컨트롤러(Controller) Module Admin Controller for Insert/Update 모듈 입력/수정과 컨트롤러(Controller) 예제로 만들고 있는 example 모듈에서 새로운 모듈(mid)을 추가하고 수정할 수 있는 액션과 그에 따른 진행 과정을 그린 설계도이다. 모듈(module)을 추가 한다는 것은 example 모듈과 같이 기능적인 모듈을 추가한다는 것이 아니라, 앞으... 00026 부운영자 2020.08.13 44
    229 모듈 모듈 확장과 모델(Model) 모듈 확장과 모델(Model) 관리자를 위한 백 엔드 뷰(View)가 실행되면 관리자-인덱스로 설정했던 dispExampleAdminList 액션이 작동하고 그 진행과정을 설명한 그림이다. 또한 앞으로 만들게 될 관리자 목록 보기를 위한 설계도이다. 이 과정에서는 어드민 모델(example.admin.model.php)을 이용할 계획이다. 실제로 게시판(... 00025 부운영자 2020.08.13 26
    228 모듈 프론트엔드와 백엔드 뷰(View) Front and back ends 프론트 엔드(front-end)와 백 엔드(back-end)는, 사용자가 접근하는 영역을 말하는데 이때 사용자는 사람이 아닌 프로그램이 될 수도 있다. 예를 들어 컴퓨터 OS의 그래픽 파일 관리자는 컴퓨터의 파일 시스템에 대한 프론트 엔드이고 사용자와 직접 상호작용을 할 수 있다. 백 엔드 응용프로그램은 보... 00024 부운영자 2020.08.13 316
    227 모듈 MVC 구조의 이해 Model-View-Controller XE Core는 모델-뷰-컨트롤러(Model-View-Controller) 개발 패턴에 기반한다. 이것을 줄여서 MVC 구조라고 말한다. 소프트웨어 공학에서 프로그램의 설계는 건축(architecture)과 같다. 시스템의 운영 구조를 목적과 명세에 따라 유기적 관계로 설계하고 업그레이드를 통제하는 지침과 원칙, 이것을 아... 00023 부운영자 2020.08.13 55
    226 모듈 폼(form)과 DB Form & DB XE 모듈을 이해하기 위한 기초 과정으로 폼(form)의 동작 방식을 살펴보자. 모듈은 결론적으로 폼과 DB의 관계이다. 모듈은 자신이 관리하는 테이블을 한두개 이상 가지고 있고 이것을 다루기 위해 폼을 사용한다. 이때 모듈에서의 폼의 처리 과정은 모델 뷰 컨트롤러 (Model-View-Controller) 개발 패턴에 기반한... 00022 부운영자 2020.08.13 60
    List
    Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 14 Next
    / 14