갓곰님의 조언에 힘입어 ㄱㄴㄷ별 abc별로 문서 목록 보기에 얼추 성공했습니다.
애드온으로요 ㅎㅎ
1. 우선은 문서 목록 만들기를 시도해서 이 기능이 실현 가능한지 알아봐야 했는데요.
- url에 title_prefix라는 파라미터가 들어오면 그에 준하는 첫 글자 또는 초성을 기준으로 문서 목록을 생성하는 방식입니다.
- document 모듈에 있는 setSearchOption 함수를 참조해서(즉, 거의 베끼다시피 해서) 목록을 만드는 데 성공했습니다. https://xetown.com/questions/1846020 참조
- 그리고 한글이나 영어로 시작하지 않는 제목의 문서들은 notbetween을 연산자로 써서 별도로 그룹화할 수 있도록 했구요.
- document모듈에서 총 4개의 쿼리 (getDocumentList, getDocumentListWithExtraVars, getDocumentListWithinComment, getDocumentListWithinTag)를 복붙해와서, title_prefix 부분을 추가하는 방식으로 했습니다.
- 복붙의 연속이어서 목록 만들기 자체는 큰 품은 들지 않았네요.
2. 그 다음은 A~Z, ㄱ~ㅎ에 이르는 메뉴 탭을 만드는 작업입니다.
- 위 스샷에서 보듯 before_display_content 시점에 끼어들어서 메뉴탭을 게시판 스킨 안에 넣어주었습니다.
- 메뉴탭 구성은 커스텀 쿼리를 이용해서 시도했습니다. SELECT LEFT(title, 1) AS first_letter, COUNT(*) AS count FROM documents WHERE module_srl IN (?) 를 기본 구문으로 하되, category_srl, is_notice, status 등 자주 사용되는 컬럼도 신축성 있게 사용하게끔 했어요.(참고로 메뉴탭이 특정 카테고리에서만 작동하는 것도 구현했습니다) 그러면 아래 스샷에서처럼 결과값이 나옵니다.
- 그런데 문제는 한글의 경우는 db 쿼리 쪽에서는 초성만 따로 뽑아내기가 어렵더라는 겁니다. 1) 최초의 생각은 문서별로 초성만 인덱스처럼 모아놓은 테이블이나 컬럼을 만드는 걸 생각했는데요. 그치만 저는 어차피 대량의 데이터를 가진 게시판을 겨냥해서 제작하는 자료도 아닌지라 굳이, 라는 생각이 들더군요. 2) 그래서 아예 이 배열변수를 그냥 갖고와서 루프 한번 돌리면서 php단에서 따로 처리를 해주는 게 좋겠다는 생각이 들었습니다.
- 그래서 예전에 다른 자료에서도 사용했던 바 있는 제타위키의 라이브러리? 팁?을 인클루드해 초성이 같은 그룹들을 모으는 데 성공했습니다. 그리고 count도 잘 합산해주었구요. 그 결과 (변수명에서도 알 수 있듯) $result_abc, $result_kor, $result_etc 등의 배열들을 머지해서 메뉴탭에 적용할 최종변수를 완성했습니다.
- 끝으로 스킨을 만들면 되는데요. 어차피 스케치북 게시판에 들어갈 html이니 위에서 만든 최종변수를 가져와서 카테고리 모양의 탭에 적용해주었습니다. 스타일도 살짝 손보구요.
... 그리하여 최종 완성!
공개자료실에 올릴까 생각도 했는데 개인적인 목적으로 만들어본 거고 범용성에 자신도 없고 해서 그냥 개발후기 끄적거리는 정도에 만족할까 합니다 ㅎㅎ