메뉴 건너뛰기

Karma's Place

로그인하지 않고 댓글을 달 수 있습니다. 하지만 본사이트의 취지에 맞지않는 댓글은 예고없이 삭제될 수 있습니다.
Rhymix & XE
2011.05.17 18:06

모바일에서의 통합검색기능

조회 수 21280 추천 수 0 댓글 6
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 게시글 수정 내역 댓글로 가기 인쇄 첨부
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 게시글 수정 내역 댓글로 가기 인쇄 첨부
스마트폰 인구가 급증하고 있지만 아직 모바일 레이아웃에서 통합검색을 지원하지 못하고 있습니다.
이유는 간단합니다.
통합검색모듈에서 모바일 기능이 아직 들어있지 않기 때문입니다.
c1.png


오늘은 통합검색기능에 모바일기능을 넣어주고 모바일 레이아웃에서도  통합검색기능을 추가하는 방법을 알아보도록 하겠습니다.

1. 레이아웃에 검색폼추가
 <div class="hd">
<form action="{getUrl()}" method="post" class="search">
            <input type="hidden" name="mid" value="{$mid}" />
            <input type="hidden" name="act" value="IS" />
            <input type="hidden" name="where" value="{$where}" />
            <input type="hidden" name="search_target" value="title_content" />
            <input name="is_keyword" type="text" class="inputText" value="{htmlspecialchars($is_keyword)}"/>
            <input type="submit" class="bn dark" value="통합검색" />
        </form>
</div>
위의 소스를 사용하는 모바일 레이아웃의 layout.html의 적당한 위치에 추가해줍니다.
SC20110517-170640.jpeg


위는 수정전의 화면, 아래는 수정후의 화면입니다.
SC20110517-171413.jpeg


2. integration_search.mobile.php 생성

레이아웃 수정만으로도 검색은 가능합니다.
SC20110517-171710.jpeg

하지만 PC화면의 검색결과가 나타나게 됩니다.
앞서 설명드린데로 integration_search.mobile.php 화일이 없기 때문입니다.
 <?php
	//class integration_searchView extends integration_search {
    class integration_searchMobile extends integration_search {

        var $target_mid = array();
        var $skin = 'default';

        /**
         * @brief 초기화
         **/
        function init() {
        }

        /**
         * @brief 통합 검색 출력
         **/
        function IS() {
            $oFile = &getClass('file');
            $oModuleModel = &getModel('module');

            // 권한 체크
            if(!$this->grant->access) return new Object(-1,'msg_not_permitted');

            $config = $oModuleModel->getModuleConfig('integration_search');
            if(!$config->skin) $config->skin = 'default';
            Context::set('module_info', unserialize($config->skin_vars));
            //$this->setTemplatePath($this->module_path."/skins/".$config->skin."/");
	    $this->setTemplatePath($this->module_path."/m.skins/".$config->skin."/");
			 
            $target = $config->target;
            if(!$target) $target = 'include';
            $module_srl_list = explode(',',$config->target_module_srl);

            // 검색어 변수 설정
            $is_keyword = Context::get('is_keyword');

            // 페이지 변수 설정
            $page = (int)Context::get('page');
            if(!$page) $page = 1;

            // 검색탭에 따른 검색
            $where = Context::get('where');

            // integration search model객체 생성
            if($is_keyword) {
                $oIS = &getModel('integration_search');
                switch($where) {
                    case 'document' :
                            $search_target = Context::get('search_target');
                            if(!in_array($search_target, array('title','content','title_content','tag'))) $search_target = 'title';
                            Context::set('search_target', $search_target);

                            $output = $oIS->getDocuments($target, $module_srl_list, $search_target, $is_keyword, $page, 10);
                            Context::set('output', $output);
                            $this->setTemplateFile("document", $page);
                        break;
                    case 'comment' :
                            $output = $oIS->getComments($target, $module_srl_list, $is_keyword, $page, 10);
                            Context::set('output', $output);
                            $this->setTemplateFile("comment", $page);
                        break;
                    case 'trackback' :
                            $search_target = Context::get('search_target');
                            if(!in_array($search_target, array('title','url','blog_name','excerpt'))) $search_target = 'title';
                            Context::set('search_target', $search_target);

                            $output = $oIS->getTrackbacks($target, $module_srl_list, $search_target, $is_keyword, $page, 10);
                            Context::set('output', $output);
                            $this->setTemplateFile("trackback", $page);
                        break;
                    case 'multimedia' :
                            $output = $oIS->getImages($target, $module_srl_list, $is_keyword, $page,20);
                            Context::set('output', $output);
                            $this->setTemplateFile("multimedia", $page);
                        break;
                    case 'file' :
                            $output = $oIS->getFiles($target, $module_srl_list, $is_keyword, $page, 20);
                            Context::set('output', $output);
                            $this->setTemplateFile("file", $page);
                        break;
                    default :
                            $output['document'] = $oIS->getDocuments($target, $module_srl_list, 'title', $is_keyword, $page, 5);
                            $output['comment'] = $oIS->getComments($target, $module_srl_list, $is_keyword, $page, 5);
                            $output['trackback'] = $oIS->getTrackbacks($target, $module_srl_list, 'title', $is_keyword, $page, 5);
                            $output['multimedia'] = $oIS->getImages($target, $module_srl_list, $is_keyword, $page, 5);
                            $output['file'] = $oIS->getFiles($target, $module_srl_list, $is_keyword, $page, 5);
                            Context::set('search_result', $output);
                            $this->setTemplateFile("index", $page);
                        break;
                }
            } else {
                $this->setTemplateFile("no_keywords");
            }
        }
	}
?>
위의 내용으로 integraiont_search.mobile.php를 생생시켜줍니다.
작업은 integration_search.view.php를 integration-search.mobile.php로 복사하신후 수정하시는 것이 빠릅니다.
자세히 살펴보시면 두군데 바뀌었습니다.
즉 
//class integration_searchView extends integration_search {
    class integration_searchMobile extends integration_search {

//$this->setTemplatePath($this->module_path."/skins/".$config->skin."/");
 $this->setTemplatePath($this->module_path."/m.skins/".$config->skin."/");
가 바뀌었습니다.
SC20110517-174544.jpeg

검색을 해보니 m.skins/default/index.html이 없다고 아우성이네요.


3. 모바일 스킨생성
m.skins 폴더와 해당 화일을 만들어줘야하지만 이 역시 간단합니다.
기존 skins 폴더를 통채로 서브디렉토리 및 서브화일까지 포함해서 m.skins로 복사해넣으시면 됩니다.

리눅스의 경우
  cp skins/ m.skins -f -R
명령어로 간단히 복사했습니다.
SC20110517-174848.jpeg


4. 커스터마이징

이제 드디어 모바일 레이아웃을 입은 검색결과 화면이 나타납니다.
하지만 모바일에서 별 필요도 없는 엮인글, 이미지/동영상, 첨부화일 등등이 다 출력되면서 화면이 보기 싫습니다.
해서 문서와 댓글만 남기고 몽땅 다 없앴습니다.
SC20110517-175312.jpeg

integration_search.mobile.php의 fuction IS()에서 필요없는 부분을 주석처리하고
m.skins/default/index.html과 m.skins/default/header.html에서 각기 필요없는 부분을 삭제하시며됩니다.
커스터마이징은 각자의 취향이고 수정이라기  보다는 필요없는  부분을 삭제만 하기 때문에 별도로 설명드리지 않습니다.

그럼 모바일과 함께 즐거운 시간 되시기를....
?
  • ?
    김호영 2011.05.20 20:08

    멋지십니다. 언젠가 한번은 꼭 이용해 볼 가치가 있는 팁이네요~^^

  • ?
    유진 2012.03.11 20:33

    저는 잘 안되네요. 위에 말씀해 주신 대로 다 한(?) 것 같은데..

    모바일에서 검색을 해 보면 PC 화면의 검색 결과가 나오네요..

    혹시 XE 버전이 1.4.5.10 이어서 그런건가요? ^^;

  • ?
    카르마 2012.03.11 20:54

    http://www.wildgreen.co.kr/

    1.4.5.10을 사용하는 사이트입니다.


    setting에서 모바일뷰 사용에 체크하셨는지...

    레이아웃의 모바일레이아웃의 사용하시는 레이아웃 설정에서

    레이아웃 일괄적용

    모바일뷰 일괄적용 두군데 체크하고 저장하십시요.


    그래도 안되신다면 수정에 문제가 좀 있으실 것같네요.

  • ?
    유진 2012.03.11 21:39

    빠른 답변 감사드립니다. 레이아웃 설정을 해 보았는데도 잘 안되어서

    말씀해 주신 대로 혹시 수정 쪽에 문제가 없을까 살펴 보았더니..

    파일을 만드는 과정에서 문제가 있었던 것 같습니다. ^^;

     

    제가 윈도우즈 탐색기에서 integration_search.view.php 파일을 바로 복사해서

    integration_search.mobile.php 파일을 만들었더니 문제가 생긴 것 같습니다.

    에디터 플러스에서 integration_search.view.php 를 불러 온 다음

    수정해서 integration_search.mobile.php 파일을 만들었더니 이제 검색이 되네요. ^^

    정말 좋은 팁을 올려 주셔서 감사합니다. ^^

  • ?
    유진 2012.03.12 11:38

    http://www.wildgreen.co.kr/ 사이트를 가 보았는데, 참 잘해 놓으셨네요.

    검색 부분도 '도감', '식물정보'도 나오도록 해 두셨고요.

    특히 '도감' 부분이 놀라웠는데, 이런 부분은 어떻게 하면 되는지 궁금해지네요. ^^

     

    저는 검색 결과에 해당 문서가 어느 게시판의 글인지 '게시판 명'이 나오도록 하고 싶은데..

    비전문가가 검색만으로 하려고 하다 보니 한계를 느낍니다. ^^;

  • ?
    카르마 2012.03.12 14:25

    코어에 포함된 integration_search가 아니고 integration_seach의 확장모듈을 제작해서 사용하고 있습니다.

    손을봐서 마켓에 등록할까 생각중인데

    기왕이면 검색키워드를 검색창에 출력해주는 autocomplete까지 포함시키려다가 손을 놓고 있네요.


List of Articles
번호 분류 제목 날짜 조회 수
53 Rhymix & XE XE 속도 개선을 위한 위젯 수정법 1 2011.03.15 50095
52 Rhymix & XE 이미지프로세스 모듈 (매직버전) 111 file 2010.03.01 46055
51 Rhymix & XE 이미지 자동출력 애드온 58 file 2010.04.09 35612
50 애드온 및 모듈 제작 초간단 애드온 제작법 2 file 2011.03.25 32495
49 기타등등 루씬, 큐브리드그리고 XE 3 file 2010.10.07 30685
48 Rhymix & XE 구글 웹앨범 연동모듈 설정 58 file 2010.03.31 30268
47 Rhymix & XE JPG 축소 및 워터마크 애드온 ver 0.7 21 file 2010.02.18 27116
46 기타등등 큐브리드 변환후 index 재설정 2 file 2010.10.22 26555
45 기타등등 윈도우즈에서 ImageMgick을 이용한 imageprocess 사용 2 file 2011.03.10 24086
44 기타등등 malware에 의한 해킹 사이트 대처 순서 2011.04.01 24039
43 Rhymix & XE 한국우편번호 확장모듈 file 2011.03.10 23703
42 Rhymix & XE picasa_upload component 34 file 2010.04.05 23208
41 Rhymix & XE 자동 그룹변경 애드온 17 file 2010.02.18 22531
40 Rhymix & XE 구글 웹앨범 최근사진 위젯 file 2010.04.05 22345
39 Rhymix & XE 비회원에게 다른 메뉴보이게하기 2012.03.15 21932
38 Rhymix & XE reCaptcha를 이용한 새로운 캡차애드온 file 2011.04.01 21867
» Rhymix & XE 모바일에서의 통합검색기능 6 file 2011.05.17 21280
36 Rhymix & XE 이미지 포맷 변환테스트 27 file 2012.02.01 19582
35 Rhymix & XE 이미지프로세스 모듈 설정방법 24 file 2010.02.25 19331
34 Rhymix & XE 이미지프로세스 모듈의 설정 및 사용방법(new version) file 2012.02.08 15843
계속 검색
Board Pagination Prev 1 2 3 Next
/ 3
위로