묻고답하기

아래 글을 보고 그대로 따라서 애드온을 만들었는데요.


1.JPG


설치된 애드온으로 가보니, 정보가 하나도 안뜨고 설정으로 들어가도 xml 정보가 아예 안뜹니다.


block_word.zip <- 애드온은 이거입니다. (파일첨부)


도대체 뭐가 문제일까요 ㅠㅠ info.xml 파일도 분명 문제되는게 없어보이는데요!!



----------------------------------------------------------------------------------------

block_word 애드온은?
사용자가 쓴 게시물과 댓글이 출력될 때 애드온 설정에 등록해 놓은 문자들을 '***' 로 가려서 보여주는 애드온을 만들어 볼 것 입니다.
애드온에서 단어들을 입력 받고, 또 해당 mid들을 설정하도록 하고, 애드온에서는 javascript 정규식으로 해당 문자를 '***' 로 치환하는 구조로 개발할 것입니다.


개발에 앞서 디렉토리 준비하기
모든 모듈은 XE_ROOT(XE 설치디렉토리)/addons/ 에 위치 합니다. 앞으로 함꼐 만들 애드온은 block_word 이기 때문에 block_word이라는 디렉토리를 만들고 하위 디렉토리를 아래와 같이 만듭니다.
"    block_word 
o    conf


애드온의 정보 파일 info.xml 작성하기
모듈과 같이 애드온의 정보 파일인 info.xml에 작성자 및 애드온 정보를 작성합니다.
<?xml version="1.0" encoding="UTF-8"?>
<addon version="0.2">
    <title xml:lang="ko">단어 차단 애드온</title>
    <description xml:lang="ko">
        글과 댓글의 내용 중 지정한 단어를 ***와 같이 보이지 않도록 합니다. 
    </description>
    <version>0.1</version>
    <date>2009-08-14</date>
    <author email_address="sol@ngleader.com" link="http://ngleader.com">
        <name xml:lang="ko">sol</name>
    </author>
    <extra_vars>
        <var name="word">
            <title xml:lang="ko">차단할 문자</title>
            <description xml:lang="ko">차단할 문자를 ,로 구분하여 입력해 주세요.</description>
        </var>
    </extra_vars>
</addon>
 
block_word 애드온의 경우 관리자가 차단할 단어를 등록해야 합니다. 그래서 <extra_vars> 부분에 
        <var name="word">
            <title xml:lang="ko">차단할 문자</title>
            <description xml:lang="ko">차단할 문자를 ,로 구분하여 입력해 주세요.</description>
        </var>
와 같이 word 라는 변수명, title과 설명을 입력하면 관리자 화면에서 위와 같은 폼이 생성됩니다.


block_word.addon.php 작성하기
block_word 애드온 회면 출력 단계에서 지정한 단어를 '***' 로 변경해 주면 되기 때문에 XE에서 애드온의 4가지의 호출순서에서 맨 마지막인 before_display_content 에서 호출 합니다.


block_word.addon.php 가 하는 일은 앞에서 info.xml에서 extra_vars에 등록한 word를 받아 XE의 Request 방법인 GET/POST(HTML), XMLRPC, JSON 중 GET/POST(HTML) 일 경우에만 block_word.js 파일을 로드를 하고 block_word.js에서 치환하는 작업을 합니다.

그리고 info.xml의 extra_vars에 등록한 work에 사용자가 등록한 값은 block_word.addon.php에서 $addon_info->word 변수 값으로 들어 옵니다.


<?php
    if(!defined("__ZBXE__")) exit();

    /** 
     * @file block_word.addon.php
     * @author sol (sol@ngleader.com)
     * @brief 단어 차단 애드온
     **/

     if($called_position == 'after_module_proc' && !in_array(Context::getResponseMethod(),array('XMLRPC','JSON')) {
       // info.xml의 extra_vars에서 등록한 word를 변수명으로 관리자가 등록한 값을 받아 정리

        $words = explode(',',$addon_info->word);
        $block_words = array();

        for($i=0,$c=count($words);$i<$c;$i++){
            $words$i = trim($words$i);

            if(strlen($words$i)>0) $block_words[] = $words$i;
        }
        // 등록한 단어가 있을시에만 javascript 로드
        if(count($block_words)>0){
            // <head></head> 사이에 등록
            $js = "<script type=\"text/javascript\">//<!",$block_words) ."';\n//]></script>";
            Context::addHtmlHeader($js);
            // block_word.js 로드
            Context::addJsFile('./addons/block_word/block_word.js');
        }
    }
?>


block_word.js 작성하기
실제 관리자가 설정한 단어를 ***로 치환 합니다. block_word.addon.php에서 선언한 javascript 변수 addon_block_word를 가져와 jQuery로 node 중 css의 class가 xe_content인 $(".xe_content")로 정규식을 이용해 치환합니다.
(function($){ 
$(function(){
    if(addon_block_word.length > 0){
        var blocked=$(".xe_content").html().replace(new RegExp(addon_block_word,'g'),'***');
        $(".xe_content").html(blocked);
    }
});
})(jQuery);


* class="xe_content" : XE에서 게시판글, 댓글 등의 content를 출력하는 부분입니다
* $(".xe_content")  : class가 xe_content인 node의 jQuery 객체

글쓴이 제목 최종 글
XE 공지 글 쓰기,삭제 운영방식 변경 공지 [16] 2019.03.05 by 남기남
꾸러기^^ 나모사용하는데요..글씨가약간위로... [2] 2007.08.10
김민규 strsub() 함수에 대한 질문여... [2] 2007.08.10
김민규 [재질문] echo()함수로 지정한 url에 있는 이미지나 기타 data 출력하는 [1] 2007.08.10
이효나 화면 해상도; 에 대한 질문입니다;; [2] 2007.08.10
ど샤이키づ 웹폰트가 적용이 안되여...ㅡㅡ;; [2] 2007.08.10
원종혁 PHP 시간에서요. [1] 2007.08.10
문주랑 제로보드와 같은 서브메뉴이동"질문" [1] 2007.08.10
허영조 동영상 질문..퀵타임은 어케 재생해요??mov파일인데..링크걸어 보게 할려는데.. [1] 2007.08.10
^-^; 이미지 메뉴 눌렀을때 들어가는 효과 좀.. [6] 2007.08.10
수라 움직이는 매뉴가 해더,푸터따로 나눈 게시판에서는 돌아 가지를 않네요. [1] 2007.08.10
시노스 [질문]홈페이지 해상도가 틀려도 항상 가운데로 몰아넣기... [2] 2007.08.10
유창호 꼭 좀 봐주세요... [2] 2007.08.10
Jordan 아이프레임을 투명하게 하기 위해 opacity 조절을 했더니 느릿..느릿.. [1] 2007.08.10
sisylian 제로보드 로그인과 연동시키려면... [1] 2007.08.10
G3mania [질문] 홈페이지에 그림이 안뜨는데요.왜그런건지?? [2] 2007.08.10
쭈니 플래쉬 6에서 mailto 쓰는 방법이 뭐지요? [1] 2007.08.10
딸기당나귀 다른 웹사이트의 웹페이지를...말이죠 [1] 2007.08.10
하얀두부 엄청난 질문... 미츼게씀.. [7] 2007.08.10
최찬수 회원제로 만들려고 하는데, [1] 2007.08.10
HHH 현재 위치...같은건..어떻게 하죠? [2] 2007.08.10
김정우 제로 카운터 설치할때 에러가 나네요.. Access denied for user 어쩌구저쩌구 ㅠㅠ  
박보영 [질문]찾기가 너무 힘들어서-_-; 질문입니다~~ [1] 2007.08.10
한승진 초간단 질문 한 판.. 그러나 나는 어렵다 ㅠ.,ㅠ; [3] 2007.08.10
ha- 스킨에서 정렬 관련 질문입니다. [2] 2007.08.10
한승진 [PHP] 다른 문서로 변수의 값을 넘겨주려면..? [3] 2007.08.10
나다년 나모에서 프레임이 안 나눠져요-_- [1] 2007.08.10
액션트 최근게시물에서 질문 @_@;; [1] 2007.08.10
이인종 이 소스결과에서 (생일)부분 삭제 어디서 해야하죠.? [5] 2007.08.10
김성진 제로보드에 갤러리스킨을 적용한뒤...  
이형권 저희 서버에 제로보드를 설치하려고 하는데요. [1] 2007.08.10