사용자 도구

사이트 도구


wiki:it:wiki:plugin_development

DokuWiki 플러그인 개발 가이드

Dream of Enc 팀에서 개발한 DokuWiki 플러그인들과 플러그인 개발 방법을 상세히 설명합니다.

개발된 플러그인 목록

AI 기반 플러그인

  • geminidraft: Gemini API를 활용한 AI 초안 생성 플러그인
  • floatingnewpost: 플로팅 새글 작성 버튼 플러그인

플러그인 상세 정보

Gemini Draft 플러그인

개발 목적: HR지원실 직원들을 위한 Dream of Enc 서비스를 위해 특별히 개발된 맞춤형 AI

주요 기능:

  • AI 초안 생성: 편집기 내용을 기반으로 상세한 문서 초안 생성
  • AI 텍스트 수정: 선택된 텍스트를 사용자 지시에 따라 수정
  • 사용량 제한: 분당 10회, 일일 500회 호출 제한 (팀 규모에 맞춤)
  • 반응형 디자인: 모바일과 데스크탑 모두 지원

기술 스택:

  • 백엔드: PHP, DokuWiki 플러그인 시스템
  • 프론트엔드: JavaScript, jQuery, CSS3
  • AI 모델: Google Gemini 2.5 Flash
  • 통신: AJAX, REST API

파일 구조:

lib/plugins/geminidraft/
├── action.php          # 백엔드 로직 및 API 통신
├── script.js           # 프론트엔드 사용자 인터페이스
├── style.css           # 반응형 버튼 디자인
├── plugin.info.txt     # 플러그인 메타데이터
├── conf/
│   ├── default.php     # 기본 설정값
│   └── metadata.php    # 설정 메타데이터
└── lang/
    ├── en/lang.php     # 영어 언어 파일
    └── ko/lang.php     # 한국어 언어 파일

설정 방법:

  • DokuWiki 관리자 페이지 접속
  • 설정 관리자 → plugin»geminidraft
  • gemini_api_key 필드에 API 키 입력
  • 저장 버튼 클릭

사용법:

  • AI 초안 생성: 편집기에 내용 입력 (최소 15자) 후 파란색 버튼 클릭
  • AI 텍스트 수정: 수정할 텍스트 선택 후 녹색 버튼 클릭

관련 문서: DokuWiki AI 기능 상세 가이드

Floating New Post 플러그인

개발 목적: 사용자가 쉽게 새 글을 작성할 수 있도록 오른쪽 하단에 플로팅 버튼 제공

주요 기능:

  • 플로팅 버튼: 화면 우하단에 항상 표시되는 새글 작성 버튼
  • 카테고리 선택: 새글을 작성할 카테고리와 하위 폴더 선택
  • 직접 편집: 선택한 위치로 바로 편집 페이지 이동
  • 반응형 디자인: 모바일과 데스크탑 모두 지원

파일 구조:

lib/plugins/floatingnewpost/
├── action.php          # 플러그인 로직 및 이벤트 처리
└── plugin.info.txt     # 플러그인 메타데이터

사용법:

  • 화면 우하단의 플로팅 버튼 클릭
  • 새글을 작성할 카테고리 선택
  • 하위 폴더 선택 (선택사항)
  • 제목 입력 후 편집 페이지로 이동

플러그인 개발 기초

플러그인 구조

DokuWiki 플러그인은 다음과 같은 기본 구조를 가집니다:

필수 파일:

  • plugin.info.txt: 플러그인 메타데이터
  • action.php: 이벤트 처리 및 백엔드 로직

선택 파일:

  • script.js: 프론트엔드 JavaScript
  • style.css: 커스텀 CSS 스타일
  • conf/: 설정 관련 파일들
  • lang/: 다국어 지원 파일들

plugin.info.txt 작성법

base   플러그인명
author 개발자명
email  이메일주소
date   개발일자
name   플러그인 표시명
desc   플러그인 설명
url    관련 URL

이벤트 시스템

DokuWiki는 다양한 이벤트를 제공합니다:

주요 이벤트:

  • TOOLBAR_DEFINE: 툴바 버튼 추가
  • AJAX_CALL_UNKNOWN: AJAX 요청 처리
  • TPL_METAHEADER_OUTPUT: CSS/JS 파일 로드
  • TPL_CONTENT_DISPLAY: 콘텐츠 표시 전처리

이벤트 등록 예시:

public function register(Doku_Event_Handler $controller) {
    $controller->register_hook('TOOLBAR_DEFINE', 'AFTER', $this, 'insert_button');
    $controller->register_hook('AJAX_CALL_UNKNOWN', 'BEFORE', $this, 'handle_ajax');
}

AJAX 처리

AJAX 요청 처리:

public function handle_ajax(Doku_Event &$event, $param) {
    if ($event->data == 'my_plugin_action') {
        $event->preventDefault();
        $this->my_ajax_function();
    }
}

응답 전송:

private function my_ajax_function() {
    $response = array('status' => 'success', 'data' => $result);
    echo json_encode($response);
}

프론트엔드 개발

JavaScript 파일 로드:

public function load_js(Doku_Event &$event, $param) {
    $event->data['script'][] = array(
        'type' => 'text/javascript',
        'src' => DOKU_BASE . 'lib/plugins/myplugin/script.js',
        '_data' => ''
    );
}

CSS 파일 로드:

public function load_css(Doku_Event &$event, $param) {
    $event->data['link'][] = array(
        'rel' => 'stylesheet',
        'type' => 'text/css',
        'href' => DOKU_BASE . 'lib/plugins/myplugin/style.css',
    );
}

설정 관리

설정 파일 구조:

conf/
├── default.php     # 기본값 설정
└── metadata.php    # 설정 타입 정의

default.php 예시:

$conf['my_setting'] = 'default_value';

metadata.php 예시:

$meta['my_setting'] = array('string');

다국어 지원

언어 파일 구조:

lang/
├── en/lang.php     # 영어
└── ko/lang.php     # 한국어

언어 파일 예시:

$lang['my_plugin_title'] = 'My Plugin Title';
$lang['my_plugin_desc'] = 'My Plugin Description';

디버깅 및 테스트

디버깅 방법:

  • 오류 로그: DokuWiki 오류 로그 확인
  • 브라우저 개발자 도구: JavaScript 오류 및 네트워크 요청 확인
  • PHP 오류: PHP 오류 로그 확인

테스트 체크리스트:

  • [ ] 플러그인이 정상적으로 로드되는가?
  • [ ] 이벤트가 올바르게 등록되는가?
  • [ ] AJAX 요청이 정상적으로 처리되는가?
  • [ ] CSS/JS 파일이 올바르게 로드되는가?
  • [ ] 설정이 정상적으로 저장/로드되는가?
  • [ ] 다국어 지원이 정상적으로 작동하는가?

배포 및 관리

배포 준비사항:

  • README.md: 설치 및 사용법 문서
  • CHANGELOG: 버전별 변경사항
  • LICENSE: 라이선스 정보
  • 테스트: 다양한 환경에서 테스트

버전 관리:

  • 시맨틱 버저닝: MAJOR.MINOR.PATCH
  • Git 태그: 릴리스 버전 태그
  • 변경사항 문서화: 각 버전별 변경사항 기록

관련 링크

wiki/it/wiki/plugin_development.txt · 마지막으로 수정됨: 저자 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki