웹마스터 팁

오랜만에 팁을 적습니다.
이건 제가 요즘 만드는 모듈에 사용하고 있는 기능인데요.

만드신 모듈 설정화면에 접속하면 XE 자료실에 등록된 버전과 비교해서 새로운 버전이라면 알림 메시지와 함께 모듈을 설치유도해주는 방법입니다. 쉽게 일반 응용프로그램 실행할때 업데이트 소식 알려주는 기능이라고 생각하시면 되겠습니다.

※ 해당 설명은 nmsXE(공모전 탈락 모듈 ㅠㅠ)를 기준으로 설명합니다.

목차


모듈.class.php 모듈에 checkVersion 함수 만들기

var $version = '0.9.0';

       

/**

 * @brief version check

 **/

function checkVersion() {

    $body = '<?xml version="1.0" encoding="utf-8" ?>

        <methodCall>

        <params>

        <module><![CDATA[resource]]></module>

        <act><![CDATA[getResourceItems]]></act>

        <module_srl><![CDATA[18322904]]></module_srl>

        <package_srl><![CDATA[18335043]]></package_srl>

        <list_count><![CDATA[1]]></list_count>

        </params>

        </methodCall>';

    $buff = @FileHandler::getRemoteResource('http://www.xpressengine.com', $body, 3, 'POST', 'application/xml');



    if($buff) {

         $oXmlParser = new XmlParser();

         $xml = $oXmlParser->parse($buff);



         if($this->version != $xml->response->items->item->version->body) return true;

    }

}


모듈.class.php 내용 안에 적당한 위치에 위의 내용을 넣습니다.
이 방법은 resource 모듈(XE 자료실)의 API를 이용하여 최신 버전을 불러와 처리하는 방법입니다.
XE의 자료실 mid의 module_srl은 18322904란 값이니 변경할 필요는 없고 package_srl 주소만 변경하시면 됩니다.
package_srl 주소를 어떻게 확인하냐하면 아래와 같은 절차로 보시면 확인 가능하십니다.

그림1 - 자료등록 신청 후 나의 자료 목록
newversion1.jpg


그림2 - 나의 자료 목록의 내용을 선택 후 주소창에 보이는 package_srl 값을 확인
newversion2.jpg


resource API는 여러 정보를 많이 볼 수 있도록 되어있지만 여기서는 최신 버전만 확인하면 되는것이니 list_count의 값은 최신의 1로써 사용됩니다.
마지막으로 $buff로 받아온 정보를 $version의 값과 비교하게 되니 자료실에 신규등록, 새로운 버전을 등록 하실때는 항상 $version을 자료실의 버전명과 일치시키셔야 합니다.

모듈.admin.view.php 처음 접속 act에 알림 확인 기능 만들기

conf/module.xml에 기본 접속 act를 확인하고 그 함수의 적당한 위치에 아래의 내용을 추가합니다.

module.xml에서 최초 접근 act를 확인
<action name="dispNmsAdminIndex" type="view" standalone="true" admin_index="true" />

function dispNmsAdminIndex() { ...



/* 버전 업데이트가 되면 해당일을 알림 */

$oModuleModel = &getModel('module');

$config = $oModuleModel->getModuleConfig('모듈명');

$time = date('Ymd', strtotime(sprintf('-%d days', 7)));

if($config->check_date <= $time) {

    if($this->checkVersion()) Context::set('new_version',true);

    $oModuleController = &getController('module');

    $config->check_date = date('Ymd');

    $oModuleController->insertModuleConfig('모듈명', $config);

}



...}


기본적으로 일주일 단위로 XE의 정보를 확인하도록 했습니다.
초기 빈번한 패치가 있다면 '-%d days', 1 또는 2 같은 정보로 바꿔주시면 됩니다.


메인 템플릿 파일에 스크립트 넣기

보통은 관리자페이지에서 해당 모듈의 첫 화면의 파일명이 list.html이라고 보고 설명합니다.

list.html파일에 아무 위치나 아래의 내용을 넣어주세요.

<block cond="$new_version">

{@ Context::addHtmlHeader('

    <script type="text/javascript">//<![CDATA[

        var msg_nms_new_version = "'.$lang->msg_nms_new_version.'";

    //]]></script>

'); }

</block>


msg의 내용은 lang.php를 이용하셔도 되고 만드시는 자바스크립트 변수는 어떤걸로 하셔도 됩니다.
메시지 내용 또한 직접 적으셔도 무관하니 편하신데로 설정하세요.


자바스크립트로 값을 확인하고 본인의 자료 주소로 이동시키기

첫 페이지에서 불러올 자바스크립트에 삽입하는게 좋습니다.
해당 내용은 jQuery ready 기능을 이용해서 만들어 보겠습니다.

// 최신 버전 상태 알림

function new_version() {

    alert(msg_nms_new_version);



    var url = "http://www.xpressengine.com/?mid=download&package_srl=18335043";

    window.open(url,'_blank');

}



$('html').ready(function(){

    // 최신 버전 상태 알림

    if(typeof(msg_nms_new_version) != 'undefined') new_version();

});

모든 작업이 끝났습니다.
자료실에 새로운 버전을 올리고 설치한 사용자가 있을때 차후 버그개선으로 인해 새버전이 새로 등록이 된다면 사용자가 관리자페이지를 통해 해당 모듈로 접근하면 정해진 시간 단위로 XE 자료실과 버전을 비교하게되며 버전이 다르다면 알림을 통해 새로운 버전 설치를 유도할 수 있게 됩니다.

최종 알림 내용에서는 본인의 입맛에 맞게 좀 더 쉽게 사용자가 설치가능하도록(쉬운설치 등) 주소를 쉬운설치쪽으로 유도한다든가 바로 쉬운설치 진행 등 직접 작업하시면 되겠습니다.
태그 연관 글
  1. [2020/03/03] 포럼 홈페이지에 방문한 모든 사용자들에게 알림 메시지를 발송해 보세요. by 비볼디
  2. [2018/11/15] 묻고답하기 메시지 모듈 삭제후 계속 나타나는 태그 by jayj8
  3. [2018/07/13] 묻고답하기 첨부한 파일 링크 텍스트로 추출하는 방법은 무엇인가요? by diomin *2
  4. [2017/03/09] 묻고답하기 list.html에서 letter-spacing 수정 문의드립니다 by lifema**** *2
  5. [2016/03/25] 묻고답하기 레이아웃에서 변수선언시 모듈에서의 이용 by 카니엘 *3