갓곰님의 조언에 힘입어 ㄱㄴㄷ별 abc별로 문서 목록 보기에 얼추 성공했습니다.

애드온으로요 ㅎㅎ

 

스크린샷 2024-11-18 180823.png

 

 

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 등 자주 사용되는 컬럼도 신축성 있게 사용하게끔 했어요.(참고로 메뉴탭이 특정 카테고리에서만 작동하는 것도 구현했습니다) 그러면 아래 스샷에서처럼 결과값이 나옵니다.

스크린샷 2024-11-18 192217.png스크린샷 2024-11-18 192348.png

- 그런데 문제는 한글의 경우는 db 쿼리 쪽에서는 초성만 따로 뽑아내기가 어렵더라는 겁니다. 1) 최초의 생각은 문서별로 초성만 인덱스처럼 모아놓은 테이블이나 컬럼을 만드는 걸 생각했는데요. 그치만 저는 어차피 대량의 데이터를 가진 게시판을 겨냥해서 제작하는 자료도 아닌지라 굳이, 라는 생각이 들더군요. 2) 그래서 아예 이 배열변수를 그냥 갖고와서 루프 한번 돌리면서 php단에서 따로 처리를 해주는 게 좋겠다는 생각이 들었습니다.

- 그래서 예전에 다른 자료에서도 사용했던 바 있는 제타위키의 라이브러리? 팁?을 인클루드해 초성이 같은 그룹들을 모으는 데 성공했습니다. 그리고 count도 잘 합산해주었구요. 그 결과 (변수명에서도 알 수 있듯) $result_abc,  $result_kor, $result_etc 등의 배열들을 머지해서 메뉴탭에 적용할 최종변수를 완성했습니다.

- 끝으로 스킨을 만들면 되는데요. 어차피 스케치북 게시판에 들어갈 html이니 위에서 만든 최종변수를 가져와서 카테고리 모양의 탭에 적용해주었습니다. 스타일도 살짝 손보구요.

 

... 그리하여 최종 완성!

공개자료실에 올릴까 생각도 했는데 개인적인 목적으로 만들어본 거고 범용성에 자신도 없고 해서 그냥 개발후기 끄적거리는 정도에 만족할까 합니다 ㅎㅎ

윤삼

profile
아무래도 중급 초반 수준의 코딩 오타쿠인 것 같습니다.
  • Lv9
    우왕, 윤삼님의 공부는 언제나 환영입니다! ㅎㅎㅎ
  • Lv9 Lv19
    사실 요 며칠 동안 막히는 부분이 있어서 골머리를 썩고 있습니다ㅋㅋㅋ
  • Lv19 Lv9
    또 많은 발전이 있겠네요 ㅎㅎ
  • Lv7
    흥미롭군요. 보고 나니 저도 어딘가에 적용하여 쓰고 싶은 마음이 마구드는데 너그러이 공개해주심을 한번더 고민해주시면 어떠실런지요^^
  • Lv7 Lv19

    그럼 테스트 용도로 막간 공유해보겠습니다 ㅎㅎ
    주의 사항이 있어요.

    - 아마 게시물이 많은 곳에서는 버벅임이 심할 겁니다.
    - 그리고 스샷에 나오는 게시판 용도에 맞춘 거여서 다른 용도에서는 손 볼 데가 많을 거예요.
    - 스킨도 스케치북에 의존하는 거여서 혹시 다른 스킨 사용 중이시라면 스타일링을 제법 고치셔야 할 거구요.
    - 그리고 무엇보다도 'A~Z'(소문자 포함), 'ㄱ~ㅎ', 그리고 '기타' 로 구성이 되어 있기 때문에, 혹시라도 숫자라든가 다른 외국어로 분류를 하시고자 한다면 훨씬 더 많이 손을 봐야 할 겁니다.

    - 또한 (가장 결정적으로는, 제 자료가 대개 그렇듯이ㅜ) 문서 목록에 관여하는 기존 서드 파티가 적용된 게시판이라면 충돌가능성이 매우 높습니다.

  • Lv19 Lv7
    감사합니다.
    새심한 설명까지^^
    공용으로 사용할 전화번호부를 만들어보면 좋을 것 같네요
    잘활용해보겠습니다.