포인트 마켓에 올리기엔 부끄러워서 자꾸 여기에 올립니다ㅋ
드디어 자동 완성 검색어 애드온을 일단락 지었ㅎㅎ
-> 무료 포인트 마켓에 올렸습니다. https://xetown.com/rxe_point/986687
- 주의!!!! 확인 결과 여러 게시판에서 동시 사용하는 데 문제가 확인됐습니다. 일단은 게시판 하나에서만 사용하시고, 이 문제는 추후 업데이트에서 수정하도록 하겠습니다. -> 수정함
개요
게시판 검색창에서 제목+내용, 제목, 내용, 닉네임, 태그를 검색 대상으로 설정하고, 키워드를 입력할 때 기존 내용에 따라 자동완성을 시켜주는 애드온
기본 기능
- 게시물 양이 많은 게시판의 경우, 사용자가 자동완성 검색어를 수집할 문서의 갯수를 임의로 제한할 수 있음 (구름이님 조언)
- 검색 옵션을 '제목+내용'으로 하면 기존의 '제목' 또는 '태그'를 수집해서 자동완성
- 검색 옵션을 '제목'으로 하면 기존의 '제목' 또는 '태그'를 수집해서 자동완성
- 검색 옵션을 '내용'으로 하면 기존의 '태그'를 수집해서 자동완성 (태그로 자동완성 기능은 웹지기님 제안)
- 검색 옵션을 '닉네임'으로 하면 기존의 '닉네임'을를 수집해서 자동완성
- 검색 옵션을 '태그'로 하면 기존의 '태그'를 수집해서 자동완성
- 수집된 검색어들은 로컬 저장소(localStorage)로 저장하며, 분 단위로 시간을 설정하고 해당 시간이 지나면 새로 추가된 문서로부터도 검색어를 추가 수집할 수 있음
동작 설명
- 애드온 설정에서 옵션 체크
- 애드온 변수를 js 파일에 전달
- jQuery.ui가 로드되지 않은 게시판의 경우엔, 애드온에 포함된 로컬 js와 css 파일을 별도로 로드
- 브라우저가 '파이어폭스'일 경우, 한글 검색 문제 해결을 위한 keydown 이벤트 지연 설정 (구름이님 조언)
- js 파일에서 ajax를 이용, 별도의 php 파일과 xml 쿼리 파일로부터 서버의 자동완성 키워드 데이터를 json 형태로 호출
- 호출된 json 데이터는 {전체 : {title : [~~~], nick_name : [~~~], tag : [~~~], 카테고리1 : {title : [~~~], nick_name : [~~~], tag : [~~~], 카테고리2 : {title : [~~~], nick_name : [~~~], tag : [~~~], 카테고리3 ~~~ } 의 형식으로 계층적으로 설정
- 호출된 json 데이터는
{모듈번호1 :
{전체 : {title : [~~~], nick_name : [~~~], tag : [~~~]}
, 카테고리1 : {title : [~~~], nick_name : [~~~], tag : [~~~]}
, 카테고리2 : {title : [~~~], nick_name : [~~~], tag : [~~~]}
, 카테고리3 ~~~ }
, 모듈번호 2 :
{전체 : ~~ } 의 형식으로 계층적으로 설정
- 또한 데이터를 사용자의 브라우저 localStorage에 저장함으로써, 서버의 DB 쿼리 실행 빈도를 (최소화하고 싶지만ㅠ) 낮춤
- 애드온 설정에서 입력해둔 '로컬 저장 기한'이 지나면 localStorage의 데이터를 비우고, 페이지 로드 및 검색 옵션 선택을 할 때마다 다시 데이터를 축적
이 애드온을 사용하면 좋은 게시판
- FAQ 게시판, 태그 입력이 활성화된 게시판, 게시물이 아주 많지는 않은 게시판(ㅠ), 사전/위키/웹툰/웹소설처럼 구성된 게시판(그런 게 있나요;;;)
테스트 환경
- 크롬 66.0.3359.181 / IE 11.48.17134.0 / 엣지 42.17134.1.0
- 라이믹스 1.8.42 / PHP 버전: 7.0.22
- XE 1.8.43 / PHP 버전: 5.5
- 스포어 웹호스팅, 카페24 웹호스팅
파일 다운로드
여건 또는 능력이 된다면, 앞으로 하고 싶은 것
1. 검색창 input 이벤트 디바운싱 (후하니님)
2. json 객체의 캐시 사용 (그렇지만 저는 캐알못이에요ㅜ)
3. 표시되는 검색어 최대 갯수 제한 (0.1.3 버전 커밍순)
4. 검색어 박스의 너비를 input의 innerWidth로 조정 (0.1.3)
5. "와 &apm;를 각각 "와 &로 치환 (0.1.3)
6. 초성 입력만으로 검색어 자동완성 (하고 싶은 것과 할 수 있는 것 사이의 괴리ㅡㅜ)