====== 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 텍스트 수정**: 수정할 텍스트 선택 후 녹색 버튼 클릭
**관련 문서**: [[wiki:it:ai:services:dokuwiki_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:development|DokuWiki 개발 환경]]
* [[wiki:it:wiki:gemini_api_integration|Gemini API 연동 개발]]
* [[wiki:it:ai:services:dokuwiki_ai|DokuWiki AI 기능]]
* [[wiki:it:wiki:dokuwiki_setup|DokuWiki 구축 가이드]]
* [[wiki:it:wiki:css_troubleshooting|CSS 트러블슈팅]]