콘텐츠 수 313
게시판 확장변수 다중검색 애드온
최초 등록일: 2018.06.26 조회수 : 2402
무료





- 구매자 182
- 소개 게시판에서 확장변수를 읽어들여 다중검색 기능으로 확장시켜줍니다.
- 설치경로 ./addons/ap_extra_search
- 지원환경 XpressEngine,Rhymix
- 라이선스 기타 라이선스 (본문 기재)
- 분류 애드온
- 제작자 윤삼
-
다운로드
- 본 애드온의 제목은 '게시판 확장변수 다중검색 애드온'입니다.
- 게시판을 아카이브 등의 목적으로 사용할 때 좋습니다.
- 초보 실력으로 만든 것이어서 많이 부족합니다. 변수의 개수가 많거나 게시량이 많은 경우 서버에 무리를 줄 수 있습니다. (다중검색 기능이 정말로 필요한 게시판에서만 사용하시기 바랍니다.)
- 라이믹스에서만 테스트해봤습니다. => 0.1.0 버전에서 XE 작동 확인
기본 기능
- 검색
- 애드온 설정을 통해 교차검색(AND)과 누적검색(OR)을 모두 사용할 수 있습니다.
- 검색화면을 게시판 목록화면 원하는 곳 어디에나 삽입할 수 있습니다.
- 다중선택 체크박스로 이뤄진 확장변수도 무리 없이 잘 검색됩니다.
- 게시판의 기본검색(제목, 내용, 태그 등)과 연동해서 사용할 수 있습니다.(0.2.0부터)
- 회원들의 서명(프로필)도 다중검색 기능에 통합했습니다.(0.2.0부터)
- 연월일 형식의 변수와 수치로 이뤄진 변수에 범위검색(RANGE)을 적용할 수 있습니다.(0.3.0부터)
- 스킨
- 코어에서 사용하는 확장변수 입력화면과 최대한 유사하게 디자인되어 있습니다.
- 스케치북 스킨에 어울리는 검색창 스킨을 제공합니다. 아울러 XEDITION용 스킨도 사용할 수 있습니다.
- 사용자가 자신만의 애드온 스킨을 편하게 디자인할 수 있습니다.
기본 제공되는 스킨에서는 셀렉트 메뉴 형식의 확장변수가 라디오 형식으로 출력되도록 js로 처리했습니다. 셀렉트 메뉴 형식의 확장변수를 라디오 형식으로도 출력할 수 있는 옵션을 제공합니다.(0.2.0부터)
0.4.1 업데이트 (2019-04-07)
- 데이터 범위 검색시, 모바일에서도 터치 이벤트를 이용해 커서 이동이 가능하게 함 (아스타님 요청)
- 수정된 파일
- conf/info.xml (버전 정보 수정)
- js/data_range_search.js (터치 이벤트 추가)
0.4.0 업데이트 (2019-04-05)
- (검색 결과에 해당하는 문서 목록 취득시) 모든 문서의 정보를 가져온 뒤 페이지에 따라 목록을 나눠주던 방식을 폐지하고, 순서를 바꿔서 페이지에 따라 목록을 나눠준 뒤 list_count만큼만 문서 정보를 가져오게 함으로써 목록의 로딩 속도를 개선함 (마늘션님)
- 사용자정의 확장변수의 형식이 '라디오 버튼', '셀렉트 메뉴', '체크박스' 등일 경우 변수값의 검색 조건을 like에서 equal로 수정함으로써, 검색 결과의 오류를 방지하고 검색 속도도 개선함
- 수정된 파일
- ap_extra_search.addon.php
- conf/info.xml (버전 정보 수정)
- queries/getDocumentListWithExtraVarsEqual.xml (새로 추가)
0.3.2 업데이트 (2019-01-09)
- 데이터 범위 검색에서 슬라이드의 커서 이동 단위를 사용자가 직접 입력해서 사용할 수 있도록 함(기본값은 10이며, 예컨대 1을 입력하면 슬라이드 커서가 1 단위로 움직임)
- 스킨 파일에서 서버에 따른 스크립트 변수 인식 오류 수정
- 수정된 파일
- ap_extra_search.addon.php
- conf/info.xml
- js/data_range_search.js
- lang/lang.xml
- skins/sketchbook5/js/default.js
- skins/xedition/js/default.js
0.3.1 업데이트 (2018-07-11)
- 검색 쿼리에서 list_count를 없앰으로써 문서 누락을 방지함
(이 때문에 기존보다 로딩 시간 지연이 생길 수 있습니다. 문서량이 많은 게시판에서는 기존의 유료 모듈이나 위젯을 선택하시는 게 좋습니다^^) - 기본 스킨(sketchbook5, xedition)에서 필수항목 표시를 제거함
0.3.0 업데이트 (2018-07-10)
- 날짜 검색시 범위검색 적용 가능
- 수치 검색시에도 범위검색 적용 가능
- 애드온 설정 일부 추가
: 검색창을 삽입할 위치의 클래스(class) 이름을 복수로 입력할 수 있으며, 앞선 순번에 따라 삽입 위치를 탐색하게 됨
: 범위 검색을 적용할 확장변수의 사용자정의 이름(eid)를 임의로 입력할 수 있음 - 범위 검색 적용에 따라 스킨단 소스 구조에도 중요 수정이 있음
(기존에 스킨을 만드셨더나 수정하셨던 분들께 양해 부탁드립니다ㅜ 앞으로는 버그만 잡고 구조변경은 없을 예정이므로 안정적으로 스킨을 개발하셔도 됩니다ㅠㅠ)
0.2.0 업데이트 (2018-07-08)
- 기본검색(제목, 내용, 댓글, 태그 등)과 연동 가능
- 회원 서명(프로필)검색 기능도 추가 (skyo님) ... 단, 회원수가 많은 경우 서버 부하를 유발할 수 있음
- 셀렉트메뉴 형식 확장변수의 라디오버튼 형식 강제출력을 선택적 출력으로 변경 (루벤님)
- 애드온 옵션 구조화
- 애드온 버전업에 따라 스킨의 html, css, js 등 소스 파일도 수정
- 다국어 언어팩을 스킨이 아니라 애드온 단위에서 바로 처리 ... (기존 사용자들은 스킨 폴더의 lang 폴더를 지우시는 게 좋겠습니다.)
- 스킨에서 필수항목 별표 표시 삭제(검색 화면에서 필수항목 표기는 필요 없는 듯)
0.1.0 업데이트 (2018-06-28, 안정화 버전)
- 기본 설정이 교차검색(AND)이더라도 다중선택 체크박스는 자기 배열 내에서 누적검색(OR)이 가능하도록 함 (mospia님)
- (0.0.3 업데이트 이후 AND 검색일 때) 첫 번째 변수의 검색값을 주지 않고 두 번째 변수부터 검색을 시도했을 때 검색결과를 가져올 수 없는 치명적 버그 수정
- 다중검색 구조를 쉽게 알아볼 수 있도록 애드온 파일에 최대한 친절한 한글 주석 입력
- XE에서도 잘 작동하는 것으로 확인
0.0.4 업데이트 (2018-06-27)
- 일부 애드온 위치를 못 잡는 문제 수정 (mospia님)
0.0.3 업데이트 (2018-06-27)
- (AND 검색일 때) 교차검색 결과가 더 이상 없는 상황에서 추가로 검색 쿼리가 있을 경우, 검색결과가 새로 얻어지는 버그 수정
라이선스
- 기본적으로 XPM 라이선스를 준용합니다.
- XPM License 는 Xetown Point Market License 를 뜻하며, 구매자만 사용할 수 있도록 재배포를 금지합니다.
- 이 애드온으로 스킨을 개발하시는 경우, XETOWN 무료 콘텐츠 마켓을 통해 제공해주시길 당부드립니다.
- 그 외의 조항은 MIT License를 따릅니다.
동작 설명
- 검색이 허용된 확장변수가 하나 이상 있을 경우 검색창 출력
- 템플릿 핸들러 클래스를 통해 스킨 파일 불러들임
- 스킨 파일의 html 코드를 원하는 위치에 삽입
- 검색 결과를 $document_list 및 $page_navigation 변수에 반영하여 게시판 리스트로 뿌려줌
- 그 외의 설명은 힘들어서...
테스트 환경
- 크롬 66.0.3359.181 / IE 11.48.17134.0 / 엣지 42.17134.1.0
- 라이믹스 1.9.6 / PHP 버전: 7.0.22
- XE 1.9.7 / PHP 버전: 5.5
- 스포어 웹호스팅 / 카페24 웹호스팅
데모
- 미리보기 : https://bit.ly/2IECAeU
댓글 '74'





윤삼
2019.02.13 17:07 댓글
0.3.1 업데이트 이후에 공지했던 바와 같이 게시물 양이 많은 곳에서는 유료의 다른 모듈이나 위젯을 권합니다. 다소 무식한 방법으로 만든 다중검색 쿼리여서 DB를 읽을 때 시간이 많이 걸릴 겁니다.
- 개인적인 생각 1. 셀렉트나 라디오 버튼 형식의 확장변수에 대한 DB 쿼리를 like가 아니라 equal로 했으면 시간을 다소 단축했을 거란 생각은 듭니다. 하지만 그래도 속도 경감에 뚜렷한 효과가 있을지는 확신이 없네요.
- '유튜브 분류'를 그냥 카테고리로 설정하면 어떠실런지요. 현재 구조에선 사실 그렇게 하는 게 가장 나을 것 같다는 생각이 듭니다. 물론 DB 테이블 입력 방식을 다시 설계해야 하는 어려움은 있겠지만요ㅜㅜ
- 개인적인 생각 1. 셀렉트나 라디오 버튼 형식의 확장변수에 대한 DB 쿼리를 like가 아니라 equal로 했으면 시간을 다소 단축했을 거란 생각은 듭니다. 하지만 그래도 속도 경감에 뚜렷한 효과가 있을지는 확신이 없네요.
- '유튜브 분류'를 그냥 카테고리로 설정하면 어떠실런지요. 현재 구조에선 사실 그렇게 하는 게 가장 나을 것 같다는 생각이 듭니다. 물론 DB 테이블 입력 방식을 다시 설계해야 하는 어려움은 있겠지만요ㅜㅜ




마늘션
2019.02.14 17:27 댓글









안녕하세요 자꾸귀찮게 해서 죄송합니다. 사용할수 없을정도로 느린점은 개선했습니다.
파일목록만들때 검색결과인 모든 srl_list를 사용해서 getDocument하고 array_slice 하셨는데,
순서를 바꾸어 srl_list를먼저 array_slice해서 현재 페이지만 getDocument 하니 사용할수 없을정도로 느린문제는 해결은 되었습니다. 소스는 다음과같습니다.
php파일 480줄 쯤에,
$no = count($srl_list);
for ( $i = 0; $i < count($srl_list); $i++ )
{
$document_list[$no] = $oDocumentModel->getDocument($srl_list[$i]->document_srl);
$no--;
}
$document_list = array_slice($document_list, $module_info->list_count * ($page - 1), $module_info->list_count, true);
이부분을
array_reverse($srl_list);
$srl_list = array_slice($srl_list, $module_info->list_count * ($page - 1), $module_info->list_count, true);
$i=0;
foreach($srl_list as $l){
$document_list[$i] = $oDocumentModel->getDocument($l->document_srl);
$i++;
}
이렇게 수정하니 속도가 개선되었습니다.
그런데 모든 문서를 열람할때마다. 리스트를 계속해서 생성하는데, 그래서 열람속도가 불필요하게 느린것을 확인했습니다. 전역변수에 넣어 놓든지 하면 될 것같은데.. 잘모르겠더군요..
혹시 이것 개선하려면 어떻게 해야 할지 안 바쁘시다면 힌트 주시면 정말 고맙겠습니다.
파일목록만들때 검색결과인 모든 srl_list를 사용해서 getDocument하고 array_slice 하셨는데,
순서를 바꾸어 srl_list를먼저 array_slice해서 현재 페이지만 getDocument 하니 사용할수 없을정도로 느린문제는 해결은 되었습니다. 소스는 다음과같습니다.
php파일 480줄 쯤에,
$no = count($srl_list);
for ( $i = 0; $i < count($srl_list); $i++ )
{
$document_list[$no] = $oDocumentModel->getDocument($srl_list[$i]->document_srl);
$no--;
}
$document_list = array_slice($document_list, $module_info->list_count * ($page - 1), $module_info->list_count, true);
이부분을
array_reverse($srl_list);
$srl_list = array_slice($srl_list, $module_info->list_count * ($page - 1), $module_info->list_count, true);
$i=0;
foreach($srl_list as $l){
$document_list[$i] = $oDocumentModel->getDocument($l->document_srl);
$i++;
}
이렇게 수정하니 속도가 개선되었습니다.
그런데 모든 문서를 열람할때마다. 리스트를 계속해서 생성하는데, 그래서 열람속도가 불필요하게 느린것을 확인했습니다. 전역변수에 넣어 놓든지 하면 될 것같은데.. 잘모르겠더군요..
혹시 이것 개선하려면 어떻게 해야 할지 안 바쁘시다면 힌트 주시면 정말 고맙겠습니다.



다만 구체적인 설명이 어렵네요ㅜ
암튼 검색화면 출력할 때는 출생년도를 나이로 바꿔치기하고, 검색 질의가 전송될 때엔 다시 출생년도로 바꿔치기해서 검색을 돌리는 방법입니다ㅎ