포인트 마켓에 올리기엔 부끄러워서 자꾸 여기에 올립니다ㅋ

드디어 자동 완성 검색어 애드온을 일단락 지었ㅎㅎ

-> 무료 포인트 마켓에 올렸습니다. 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 웹호스팅

 

파일 다운로드

 

ap_autocomplete.0.1.2.zip

ap_autocomplete.0.1.1.zip

윤삼

profile
아무래도 중급 초반 수준의 코딩 오타쿠인 것 같습니다.
  • profile

    여건 또는 능력이 된다면, 앞으로 하고 싶은 것
    1. 검색창 input 이벤트 디바운싱 (후하니님)
    2. json 객체의 캐시 사용 (그렇지만 저는 캐알못이에요ㅜ)

    3. 표시되는 검색어 최대 갯수 제한 (0.1.3 버전 커밍순)

    4. 검색어 박스의 너비를 input의 innerWidth로 조정 (0.1.3)

    5. "와 &apm;를 각각 "와 &로 치환 (0.1.3)

    6. 초성 입력만으로 검색어 자동완성 (하고 싶은 것과 할 수 있는 것 사이의 괴리ㅡㅜ)

  • profile
    오 이거 좋은데요
    매번 좋은 프로그램 감사합니다
    잘 쓰겠습니다
  • profile profile
    ㅎㅎ 감사합니다~ 문제가 발견되어 수정했으니 0.1.2로 사용 부탁 드려요~
  • profile

    좋은자료 감사합니다. 게시판내에 존재하는 태그가 추천되지 않는 것이 확인되는데요. 어떠한 이유에선지 추천하지 못하는 태그들이 발견이 되네요.

     

     

  • profile profile
    헐;;; 제가 큰 실수를 한 거 같아요.
    테스트할 때 게시판 하나만 가지고 테스트를 한 바람에 여러 게시판을 사용할 때 문제를 전혀 고려를 못했네요.
    다른 게시판으로 갔을 때 검색어가 갱신이 안 되는 것 같아요;;;
    웹지기님 사이트 보니 공지사항 게시판의 태그가 반려견일기장에 나타나더라구요;;
    일단 게시판 1군데에서만 사용을 하는 게 좋을 것 같구요.
    '로컬 저장 기한'을 1분 정도로 두시고 1분후에 다시 사용해야 할 것 같네요.
    여러 게시판 사용의 경우는 다시 코드를 짜야 할 것 같아요ㅜ
  • profile profile
    아.. 그렇군요. 그럼 일단 1개 게시판 묻고답하기에만 적용을 해 봐야겠습니다.
    혹시 슈퍼캐시의 페이징,검색결과 캐시 는 영향을 주지 않나요 ?
    많은 곳이 슈퍼캐시를 사용중일 것이라 여쭤 봅니다.
  • profile profile

    자동완성 검색어는 사용자의 웹브라우저 로컬저장소(쿠키 쪽)로 가는 경로니까, 슈퍼캐시에는 영향을 안 줄 건데요.
    반대로 슈퍼캐시가 자동완성까지 캐시하는지는 저도 알 수가 없네요;;

  • profile profile
    묻고답하기 게시판만 적용해서 해보니 별다른 이상 증상은 없는 것 같아요. 슈퍼캐시의 캐시 영향은 없는 것 같습니다.
  • profile profile
    아.. 쿠키 혹시 모르니까 쿠키 이름이 뭐죠? 일단 슈퍼캐시 전체화면 캐시때문에 영향받을 수도 있으니 예외 등록을 해놓을 필요도.. 비로그인으로 테스트를 제가 해보질 않아서.... 그리고 다른 브라우저의 쿠키를 제가 사용한다 해도 결과는 큰 차이는 없을 것 같긴 하구요.
  • profile profile
    정확하게는 쿠키는 아니구요.
    HTML5에서 지원하는 localStorage이구요.
    그 안에 expire랑, keywords라는 아이템이 있어요.
    슈퍼캐시는 안 써봐서 localStorage도 예외 처리가 가능한지는 잘 모르겠습니다.
  • profile profile
    쿠키가 아니라면 예외처리는 안될 것 같구요. 해당 내용까지 슈퍼캐시에서 캐시해 버리는지는 저도 잘 모르겠네요. 일단 쿠키가 아니라니 그냥 사용해보면 될 것 같습니다.
  • profile profile
    수정했으니 확인해보세요.
    키워드를 모듈별로 수집 공간을 따로 만들었고, 혹시 몰라 태그 수집할 때 null값은 예외처리했습니다.
    다시 사용해보시고 아니다 싶으시면 롤백을;;;
  • profile profile
    감사합니다. 잠시후 사용해 볼게요.
  • profile profile
    아주 잘됩니다. 감사합니다!
  • profile profile
    휴~ 다행이네요!! 확인 감사합니다!