https://web.archive.org/web/20160907195909/http://www.xeschool.com/xe/addons_popup_window_addon

Popup window Add-on

애드온의 작동 방법과 호출 시점을 살펴보고 확장변수를 활용하여 외부 HTML 파일을 찾아 팝업윈도우 형태로 출력해 주는 기초적인 팝업 윈도우 애드온을 만들어 본다.

https://web.archive.org/web/20160907195909im_/http:/www.xeschool.com/xenote_page/images/creating_popupwindow_03.gif

팝업 윈도우 애드온의 정보 파일(info.xml) 작성하기

XE코어가 xe/ 디렉터리에 설치되어 있다면 xe/addons/ 디렉터리 안에 popup_window 폴더를 새로 만든다. 이렇게 만든 폴더의 이름은 애드온의 이름이 되고 애드온 실행파일(popup_window.addon.php)의 이름과 같아야 한다.

새로 만든 애드온 폴더에서 설정(config) 폴더 안에 정보 파일이 없으면 애드온 관리 화면에서는 "./addons/popup_window/"와 같이 폴더의 경로만 출력될 뿐 애드온의 정보를 확인할 수 없다. 따라서 popup_window 폴더 안에 애드온의 정보 파일(info.xml)을 넣어 둘 conf 폴더를 새로 만들고 다음과 같이 애드온의 정보와 설명을 출력할 XML 문서를 만든다.

▶ addons/popup_window/conf/info.xml

<?xml version="1.0" encoding="UTF-8"?>
<addon version="0.2">
    <title xml:lang="ko">팝업 윈도우 애드온</title>
    <description xml:lang="ko">
        팝업 윈도우 애드온 만들기 예제
		HTML 파일의 경로를 입력하면 설정된 mid에서 팝업창을 보여줍니다.
    </description>
    <version>0.1</version>
    <date>2011-12-20</date>
    <author email_address="" link="<http://www.xeschool.com>">
        <name xml:lang="ko">XE스쿨</name>
    </author>
</addon>

애드온이 정보 파일을 갖게 되면 관리자 화면 > 확장기능 > 설치된 애드온에서 추가로 설치된 팝업 윈도우 애드온과 설명글이 정상적으로 출력된다. 또한 설정을 클릭하면 위 정보 파일에서 아직 확장변수를 등록하고 사용하지 않기 때문에 기본정보만 출력된다. 만약 애드온을 켠다고 해도 아직 실행파일이 없기 때문에 코어의 동작에는 아무런 간섭을 할 수가 없다.

실행 파일 작성 연습

팝업 윈도우를 위한 popup_window.addon.php 파일을 다음과 같이 작성해 보고 우선 애드온의 동작 방법 몇가지를 확인해 보자.

▶ addons/popup_window/popup_window.addon.php

<?php

	if(!defined("__ZBXE__")) exit();

    /**
     * @file popup_window.addon.php
     * @author XE스쿨
     * @brief HTML 파일의 경로를 입력하면 설정된 mid에서 팝업창을 보여줍니다.
     **/

     if($called_position == 'before_module_proc'){

	 }

?>

"ZBXE" 상수는 1.5 버전부터 변경된 상수를 사용한다. 이전 버전까지는 "ZBXE"로 상수를 설정하였지만 1.5 버전부터는 "XE"로 사용할 것을 권장하고 있고 추후 "ZBXE" 상수는 제거 된다고 한다. 현재는 하위 모듈의 호환성을 유지하기 위해 둘다 사용이 가능하다. 추후 상위 버전과 하위 버전에 따라 변경하여 사용한다.

파일의 간단한 설명글 아래로 애드온은 호출 시점을 정하는 변수를 IF 조건문으로 만든다.

호출 시점 변수($called_position)는 각각의 값에 따라 코어에서 받아 쓸 수 있도록 미리 준비되어 있다. 예를 들어 before_module_init 시점은 xe/classes/module/ModuleHandler.class.php 파일의 function init() { 바로 앞 줄, 모듈의 객체를 생성하기 이전, 생성자(ModuleHandler::__construct())에서 다음과 같이 include 함수를 이용해 받아들인다.

$called_position

애드온이 하는 일을 좀더 자세히 살펴보자! 코어는 각각의 호출 시점을 4곳에 미리 정해 두었을 뿐, 애드온이 간섭하고자 하는 위치는 애드온 스스로가 결정하는 것이다. 즉 before_module_init 외에도 before_module_proc와 after_module_proc는 ModuleObject.class.php 파일의 proc()에서, before_display_content은 DisplayHandler.class.php 파일의 printContent()에서 받아 들인다.