쓸모가 있는 기능인지 모르겠는데, 작성 글 보기에서 검색을 가능하게 해주는 소스입니다.

당장 저만 해도 타운에서 쓴 글이 240개 정도 되는데요.

어떤 때는 제가 쓴 글 내에서 검색이 되면 좋겠다는 생각이 들더군요.

 

그래서 일단은 코어에서 커닝해서ㅋ 스킨 부분에 검색창을 달아봤습니다.

modules/member/skins/default/document_list.html 에서 상단 부분의 h1 태그 바로 아래에 다음의 소스를 넣어줍니다.

(회원모듈에서 기본 스킨 말고 다른 스킨을 사용하고 있다면 default 대신 다른 폴더 이름을 지정해야겠죠ㅎ)

{@
    if ($s_target && $s_keyword):
        $args = new stdClass();
        $args->page = Context::get('page');
        $args->list_count = 30;
        $args->page_count = 5;
        $args->sort_index = 'list_order';

        $args->search_target = Context::get('s_target');
        $args->search_keyword = Context::get('s_keyword');

        $member_srl = $logged_info->member_srl;
        $args->member_srls = implode(',', array($member_srl, $member_srl * -1));

        $args->module_srl = Context::get('module_srl');

        $oDocumentModel = getModel('document');
        $columnList = array('document_srl', 'module_srl', 'title', 'member_srl', 'nick_name', 'readed_count', 'voted_count', 'blamed_count', 'regdate', 'ipaddress', 'status', 'category_srl', 'comment_count');
        $output = $oDocumentModel->getDocumentList($args, false, true, $columnList);

        $statusNameList = $oDocumentModel->getStatusNameList();

        Context::set('total_count', $output->total_count);
        Context::set('total_page', $output->total_page);
        Context::set('page', $output->page);
        Context::set('document_list', $output->data);
        Context::set('status_name_list', $statusNameList);
        Context::set('page_navigation', $output->page_navigation);
    endif;
}
<form action="{getUrl()}" method="get" no-error-return-url="true">
    <input type="hidden" name="mid" value="{$mid}" />
    <table>
        <tr>
            <td>
                <span>
                    <select name="s_target">
                        <option value="title" selected="selected"|cond="$s_target=='title'">{$lang->title}</option>
                       <option value="content" selected="selected"|cond="$s_target=='content'">{$lang->content}</option>
                       <option value="tag" selected="selected"|cond="$s_target=='tag'">{$lang->tag}</option>
                       <option value="regdate" selected="selected"|cond="$s_target=='regdate'">{$lang->regdate}</option>
                       <option value="last_update" selected="selected"|cond="$s_target=='last_update'">{$lang->last_update}</option>
                    </select>
                </span>
            </td>
            <td>
                <input type="text" name="s_keyword" value="{htmlspecialchars($s_keyword)}" />
            </td>
            <td>
                <button type="submit">{$lang->cmd_search}</button>
                <a cond="$last_division" href="{getUrl('page',1,'document_srl','','division',$last_division,'last_division','')}">{$lang->cmd_search_next}</a>
            </td>
        </tr>
    </table>
</form>

 

응용해서 사용하면 쓸모가 있을 것 같기도 하고, 영 쓸데없을 것 같기도 하고 그러네요 :)

윤삼

profile
아무래도 중급 초반 수준의 코딩 오타쿠인 것 같습니다.
  • ?
    오호! 작성글 검색기능? 좋네요 ㅋ
  • ? profile
    실수요가 있는 것 같으면 애드온으로 만들어볼까 하는 생각도 드네요ㅎ
  • profile ?
    만들면 좋지요 ^^
    바로 씁니다.
  • ?
    팁 감사합니다.
  • ?
    오 유용해보이네요 감사합니다 :)
  • ?
    https://github.com/rhymix/rhymix/issues/1112

    여기에 퍼가도록 할게요^^
  • ? profile

    역시 실수요가 있었군요. 키워드 유효성 테스트 등이 빠져 있긴 한데 코어에 반영된다면 좋겠어요. 기존 서드파티 스킨들도 보수가 뒤따라야겠지만요ㅎ

  • profile
    검색을 스킨이나 애드온으로 만들면 성능 문제 발생시 원인을 찾기가 무척 까다롭습니다.
    검색은 거의 99%의 확률로 성능 문제가 생길 수밖에 없는 부분이라...
  • profile profile
    그렇군요. 그러면 애드온 제작은 하지 않도록 하겠습니다.
    궁여지책으로 스킨에 첨가를 한 것인데 일단은 코어에서 기능 추가 검토되는 걸 기다려야겠네요