====== 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 트러블슈팅]]