그러냐

[xe]모바일에서의 통합검색기능 본문

php

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

관절분리 2016. 1. 25. 14:38
반응형
://xe3rdparty.com/relfeed/6774



스마트폰 인구가 급증하고 있지만 아직 모바일 레이아웃에서 통합검색을 지원하지 못하고 있습니다.
이유는 간단합니다.
통합검색모듈에서 모바일 기능이 아직 들어있지 않기 때문입니다.



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

1. 레이아웃에 검색폼추가
1
2
3
4
5
6
7
8
9
10
<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의 적당한 위치에 추가해줍니다.



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



2. integration_search.mobile.php 생성

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


하지만 PC화면의 검색결과가 나타나게 됩니다.
앞서 설명드린데로 integration_search.mobile.php 화일이 없기 때문입니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
<?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."/");
가 바뀌었습니다.


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


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

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



4. 커스터마이징

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


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

그럼 모바일과 함께 즐거운 시간 되시기를....

?Who's 카르마

profile

이 길의 끝이 어디인지 아직 알지 못합니다.


malware에 의한 해킹 사이트 대처 순서 Next »

malware에 의한 해킹 사이트 대처 순서2011.04.01by
<form class="bd_wrt cmt_wrt clear" action="./" method="post" editor_sequence="2"><input name="error_return_url" type="hidden" value="/relfeed/6774" /><input name="act" type="hidden" value="" /><input name="vid" type="hidden" value="" /> <input name="mid" type="hidden" value="relfeed" /> <input name="document_srl" type="hidden" value="6774" /> <input name="comment_srl" type="hidden" value="" /> <input name="content" type="hidden" value="" />
» 편집 도구모음 건너뛰기
<iframe id="editor_iframe_2" src="http://xe3rdparty.com/modules/editor/styles/default/editor.html" frameborder="0" scrolling="yes" style="width: 100%; height: 120px; display: block;" allowtransparency="true"></iframe><textarea id="xpress-editor-2" style="width: 100%; display: none;" rows="8" cols="42"></textarea><textarea class="input_syntax white" style="display: none;" rows="8" cols="42"></textarea>
문서 첨부 제한 : 0Byte/ 8.00MB
파일 크기 제한 : 8.00MB (허용 확장자 : *.*)
<input name="nick_name" class="itx n_p" id="nick_name_6774" type="text" />
<input name="recaptcha_response_field" id="recaptcha_response_field" style="border: 1px solid rgb(60, 60, 60); border-image: none; width: 302px;" type="text" placeholder="텍스트 입력" autocomplete="off" />
<noscript>&amp;amp;amp;amp;amp;lt;iframe src="&lt;a href="http://www.google.com/recaptcha/api/noscript?k=6LfpSvMSAAAAANWbxCvsF6YJRXmpSrqut9BngL_1"&gt;http://www.google.com/recaptcha/api/noscript?k=6LfpSvMSAAAAANWbxCvsF6YJRXmpSrqut9BngL_1&lt;/a&gt;" height="300" width="500" frameborder="0"&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;lt;/iframe&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;lt;br /&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;lt;textarea name="recaptcha_challenge_field" rows="3" cols="40"&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;lt;/textarea&amp;amp;amp;amp;amp;gt;&amp;amp;amp;amp;amp;lt;input type="hidden" name="recaptcha_response_field" value="manual_challenge" /&amp;amp;amp;amp;amp;gt;</noscript>
<input name="password" class="itx n_p" id="password_6774" type="password" /> <input name="email_address" class="itx m_h" id="email_address_6774" type="text" /> <input name="homepage" class="itx m_h" id="homepage_6774" type="text" /> <input class="bd_btn fr" type="submit" value="등록" />
</form>
<form class="bd_wrt clear" action="./" method="post"><input name="error_return_url" type="hidden" value="/relfeed/6774" /><input name="act" type="hidden" value="" /><input name="vid" type="hidden" value="" /> <input name="mid" type="hidden" value="relfeed" /> <input name="document_srl" type="hidden" value="6774" /> <input name="content" type="hidden" value="" /> <input name="parent_srl" type="hidden" value="" />
<input id="htm_2" type="hidden" value="n" /> <textarea id="editor_2" style="height: auto; overflow: hidden;" rows="5" cols="50"></textarea>
<input name="nick_name" class="itx n_p" id="nick_name" type="text" /> <input name="password" class="itx n_p" id="password" type="password" /> <input name="email_address" class="itx m_h" id="email_address" type="text" /> <input name="homepage" class="itx m_h" id="homepage" type="text" /> <input class="bd_btn fr" type="submit" value="등록" />
<span class="opt_chk"></span> </form>
  • ?
    김호영 2011.05.20 20:08

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

  • ?
    유진 2012.03.11 20:33

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

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

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

  • profile
    카르마 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/ 사이트를 가 보았는데, 참 잘해 놓으셨네요.

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

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

     

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

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

  • profile
    카르마 2012.03.12 14:25

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

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

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

 

반응형