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