웹마스터 팁

이상한 댓글이 생기면서 제 게시물이 안릭혀졌습니다. -ㅅ-;;
어찌하다보니 게시물이 없어져 버려서 다시 적을게요 ^^


미령전설님의 압박에 만들어봤습니다. ㅠㅠ

함수 내용이 깁니다. 아래 파란 색 내용을 클릭해서 복사하여 사용하세요.



modules/document/document.model.php
제일 하단에 "}" 전에 추가해주세요.
function getDivision_next($order,$division){
    $oDocumentModel = &getModel('document');
    return $oDocumentModel->_getDocumentDivision('next',$order,$division);
}

function getDivision_prev($order,$division){
    $oDocumentModel = &getModel('document');
    return $oDocumentModel->_getDocumentDivision('prev',$order,$division);
}


function _getDocumentDivision($type,$order,$division){
    if(!$division->document_srl) {
        if(context::get('document_srl')) $division->document_srl = context::get('document_srl');
        else return;
    }
    if(!$division->search_target) {
        if(context::get('search_target')) $division->search_target = context::get('search_target');
    }
    if(!$division->search_keyword) {
        if(context::get('search_keyword')) $division->search_keyword = context::get('search_keyword');
    }
    if(!$division->list_count) $division->list_count = 1;
    if(!$type) $type = 'next';
    if(!$order) $order = 'list_order'+ '+ ';


    $oDocumentModel = &getModel('document');
    $oDocument = $oDocumentModel->getDocument($division->document_srl, '');

    if($order == 'list_order') {
        $args->list_order = $oDocument->get('list_order');
        if($type == 'next')    $args->first_list_order = $oDocument->get('list_order');
        elseif($type == 'prev') $args->last_list_order = $oDocument->get('list_order');
    } elseif($order == 'update_order') {
        $args->update_order = $oDocument->get('update_order');
        if($type == 'next')    $args->first_update_order = $oDocument->get('update_order');
        elseif($type == 'prev')    $args->last_update_order = $oDocument->get('update_order');
    }

    $args->module_srl = $oDocument->get('module_srl');
    $args->sort_index = ($order == 'list_order')?'list_order':'update_order';
    $args->order_type = ($type == 'next')? ($division->list_count > 0)? 'desc':'asc' :'asc';
    $args->list_count = ($division->list_count > 1)? $division->list_count:1;
    $args->page_count = 1;
    $args->page = 1;

    // 검색 옵션 정리
    $search_target = (!$division->no_search)? $division->search_target:'';
    $search_keyword = (!$division->no_search)? $division->search_keyword:'';
    $query_id = "document.getDivisionDocument";
    if($search_target && $search_keyword) {
       
        switch($search_target) {
            case 'title' :
                    if($search_keyword) $search_keyword = str_replace(' ','%',$search_keyword);
                    $args->{"s_".$search_target} = $search_keyword;
            case 'content' :
                    if($search_keyword) $search_keyword = str_replace(' ','%',$search_keyword);
                    $args->{"s_".$search_target} = $search_keyword;
                break;
            case 'title_content' :
                    if($search_keyword) $search_keyword = str_replace(' ','%',$search_keyword);
                    $args->s_title = $search_keyword;
                    $args->s_content = $search_keyword;
                break;
            case 'user_id' :
                    if($search_keyword) $search_keyword = str_replace(' ','%',$search_keyword);
                    $args->s_user_id = $search_keyword;
                    $args->sort_index = 'documents.'.$args->sort_index;
                break;
            case 'user_name' :
            case 'nick_name' :
            case 'email_address' :
            case 'homepage' :
                    if($search_keyword) $search_keyword = str_replace(' ','%',$search_keyword);
                    $args->{"s_".$search_target} = $search_keyword;
                break;
            case 'is_notice' :
            case 'is_secret' :
                    if($search_keyword=='Y') $args->{"s_".$search_target} = 'Y';
                    else $args->{"s_".$search_target} = '';
                break;
            case 'member_srl' :
            case 'readed_count' :
            case 'voted_count' :
            case 'comment_count' :
            case 'trackback_count' :
            case 'uploaded_count' :
                    $args->{"s_".$search_target} = (int)$search_keyword;
                break;
            case 'regdate' :
            case 'last_update' :
            case 'ipaddress' :
                    $args->{"s_".$search_target} = $search_keyword;
                break;
            case 'comment' :
                    $args->s_comment = $search_keyword;
                    $args->sort_index = 'documents.'.$args->sort_index;
                    $query_id = 'document.getDivisionComment';
                break;
            case 'tag' :
                    $args->s_tags = str_replace(' ','%',$search_keyword);
                    $args->sort_index = 'documents.'.$args->sort_index;
                    $query_id = 'document.getDivisionTag';
                break;
            default :
                    preg_match('/^extra_vars([0-9]+)$/',$search_target,$matches);
                    if($matches[1]) {
                        $args->{"s_extra_vars".$matches[1]} = $search_keyword;
                    }
                break;
        }
    }

    $output = executeQuery($query_id, $args);

    if($output->data) {
        if($type == '+ 'next'){
            $division_count = $division->list_count;
            foreach($output->data as $division_no2){
                $division_next[$division_count--] = $division_no2;
            }
            for($i=($division_count+1);$i<($division->list_count+1);$i++){
                $division_document[$i] = $division_next[$i];
            }
        }elseif($type == 'prev'){
            $division_document = $output->data;
        }

        return $division_document;
    }
}


추가설명
/**
         * @brief 문서 설정 정보를 구함
         **/
        function getDocumentConfig() {
            if(!$GLOBLAS['__document_config__'])  {
                $oModuleModel = &getModel('module');
                $config = $oModuleModel->getModuleConfig('document'+ ');

                if(!$config->thumbnail_type) $config->thumbnail_type = 'crop';
                $GLOBLAS['__document_config__'] = $config;
            }

            return $GLOBLAS['__document_config__'];
        }
-- 여기다가 추가해주세요 --
}




modules/document/queries/getDivisionDocument.xml
파일경로명으로 저장하셔서 해당경로에 추가해주세요
<query id="getDivisionDocument" action="select">
    <tables>
        <table name="documents" />
    </tables>
    <columns>
        <column name="*" />
    </columns>
    <conditions>
    <condition operation="in" column="module_srl" var="module_srl" filter="number" />
        <condition operation="in" column="category_srl" var="category_srl" pipe="and" />
        <condition operation="equal" column="is_notice" var="s_is_notice" pipe="and" />
        <condition operation="equal" column="member_srl" var="member_srl" filter="number" pipe="and" />
        <group pipe="and">
            <condition operation="below" column="list_order" var="first_list_order" filter="number" pipe="and" />
            <condition operation="excess" column="list_order" var="last_list_order" filter="number" pipe="and" />
        </group>
        <group pipe="and">
            <condition operation="like" column="title" var="s_title" />
            <condition operation="like" column="content" var="s_content" pipe="or" />
            <condition operation="like" column="user_name" var="s_user_name" pipe="or" />
            <condition operation="like" column="user_id" var="s_user_id" pipe="or" />
            <condition operation="like" column="nick_name" var="s_nick_name" pipe="or" />
            <condition operation="like" column="email_address" var="s_email_addres" pipe="or" />
            <condition operation="like" column="homepage" var="s_homepage" pipe="or" />
            <condition operation="like" column="tags" var="s_tags" pipe="or" />
            <condition operation="equal" column="is_secret" var="s_is_secret" pipe="or" />
            <condition operation="equal" column="member_srl" var="s_member_srl" pipe="or" />
            <condition operation="more" column="readed_count" var="s_readed_count" pipe="or" />
            <condition operation="more" column="voted_count" var="s_voted_count" pipe="or" />
            <condition operation="more" column="comment_count" var="s_comment_count" pipe="or" />
            <condition operation="more" column="trackback_count" var="s_trackback_count" pipe="or" />
            <condition operation="more" column="uploaded_count" var="s_uploaded_count" pipe="or" />
            <condition operation="like_prefix" column="regdate" var="s_regdate" pipe="or" />
            <condition operation="like_prefix" column="last_update" var="s_last_update" pipe="or" />
            <condition operation="like_prefix" column="ipaddress" var="s_ipaddress" pipe="or" />
            <condition operation="like" column="extra_vars1" var="s_extra_vars1" pipe="or" />
            <condition operation="like" column="extra_vars2" var="s_extra_vars2" pipe="or" />
            <condition operation="like" column="extra_vars3" var="s_extra_vars3" pipe="or" />
            <condition operation="like" column="extra_vars4" var="s_extra_vars4" pipe="or" />
            <condition operation="like" column="extra_vars5" var="s_extra_vars5" pipe="or" />
            <condition operation="like" column="extra_vars6" var="s_extra_vars6" pipe="or" />
            <condition operation="like" column="extra_vars7" var="s_extra_vars7" pipe="or" />
            <condition operation="like" column="extra_vars8" var="s_extra_vars8" pipe="or" />
            <condition operation="like" column="extra_vars9" var="s_extra_vars9" pipe="or" />
            <condition operation="like" column="extra_vars10" var="s_extra_vars10" pipe="or" />
            <condition operation="like" column="extra_vars11" var="s_extra_vars11" pipe="or" />
            <condition operation="like" column="extra_vars12" var="s_extra_vars12" pipe="or" />
            <condition operation="like" column="extra_vars13" var="s_extra_vars13" pipe="or" />
            <condition operation="like" column="extra_vars14" var="s_extra_vars14" pipe="or" />
            <condition operation="like" column="extra_vars15" var="s_extra_vars15" pipe="or" />
            <condition operation="like" column="extra_vars16" var="s_extra_vars16" pipe="or" />
            <condition operation="like" column="extra_vars17" var="s_extra_vars17" pipe="or" />
            <condition operation="like" column="extra_vars18" var="s_extra_vars18" pipe="or" />
            <condition operation="like" column="extra_vars19" var="s_extra_vars19" pipe="or" />
            <condition operation="like" column="extra_vars20" var="s_extra_vars20" pipe="or" />
        </group>
        <group pipe="and">
            <condition operation="below" column="update_order" var="first_update_order" filter="number" pipe="and" />
            <condition operation="excess" column="update_order" var="last_update_order" filter="number" pipe="and" />
        </group>
    </conditions>
    <navigation>
        <index var="sort_index" default="list_order" order="order_type" />
        <list_count var="list_count" default="1" />
        <page_count var="page_count" default="1" />
        <page var="page" default="1" />
    </navigation>
</query>




modules/document/queries/getDivisionComment.xml
파일경로명으로 저장하셔서 해당경로에 추가해주세요
<query id="getDivisionComment" action="select">
    <tables>
        <table name="documents" alias="documents" />
        <table name="comments" alias="comments"/>
    </tables>
    <columns>
        <column name="documents.*" />
    </columns>
    <conditions>
        <condition operation="in" column="documents.module_srl" var="module_srl" filter="number" />
        <condition operation="equal" column="documents.category_srl" var="category_srl" pipe="and" />
        <condition operation="equal" column="documents.document_srl" default="comments.document_srl" notnull="notnull" pipe="and" />
        <condition operation="equal" column="documents.member_srl" var="member_srl" filter="number" pipe="and" />
        <group pipe="and">
            <condition operation="below" column="documents.list_order" var="first_list_order" filter="number" pipe="and" />
            <condition operation="excess" column="documents.list_order" var="last_list_order" filter="number" pipe="and" />
        </group>
        <group pipe="and">
            <condition operation="below" column="documents.update_order" var="first_update_order" filter="number" pipe="and" />
            <condition operation="excess" column="documents.update_order" var="last_update_order" filter="number" pipe="and" />
        </group>
        <condition operation="like" column="comments.content" var="s_comment" notnull="notnull" pipe="and" />
    </conditions>
    <navigation>
        <index var="sort_index" default="document.list_order" order="order_type" />
        <list_count var="list_count" default="20" />
        <page_count var="page_count" default="10" />
        <page var="page" default="1" />
    </navigation>
</query>




modules/document/queries/getDivisionTag.xml
파일경로명으로 저장하셔서 해당경로에 추가해주세요
<query id="getDivisionTag" action="select">
    <tables>
        <table name="documents" alias="documents" />
        <table name="tags" alias="tags"/>
    </tables>
    <columns>
        <column name="documents.*" />
    </columns>
    <conditions>
        <condition operation="in" column="documents.module_srl" var="module_srl" filter="number" />
        <condition operation="equal" column="documents.document_srl" default="tags.document_srl" notnull="notnull" pipe="and" />
        <condition operation="equal" column="documents.member_srl" var="member_srl" filter="number" pipe="and" />
        <condition operation="like" column="tags.tag" var="s_tags" notnull="notnull" pipe="and" />
        <group pipe="and">
            <condition operation="below" column="documents.list_order" var="first_list_order" filter="number" pipe="and" />
            <condition operation="excess" column="documents.list_order" var="last_list_order" filter="number" pipe="and" />
        </group>
        <group pipe="and">
            <condition operation="below" column="documents.update_order" var="first_update_order" filter="number" pipe="and" />
            <condition operation="excess" column="documents.update_order" var="last_update_order" filter="number" pipe="and" />
        </group>
    </conditions>
    <navigation>
        <index var="sort_index" default="documents.list_order" order="order_type" />
        <list_count var="list_count" default="20" />
        <page_count var="page_count" default="10" />
        <page var="page" default="1" />
    </navigation>
</query>




출력하기(스킨파일 등에 추가해주세요)

설명
getDivision_next(),getDivision_prev() <- 기본 값입니다. list_order정렬, 문서번호,검색내용을 자동 입력합니다.

옵션(next 함수 기준으로 설명)

getDivision_next('update_order') <- 정렬 기준을 update 순으로 합니다.

{@$divi->list_count = 3}
getDivision_next('',$divi) <- 리스트 출력 카운터 수를 추가 합니다.
getDivision_next('update_order',$divi) <- update 순으로 리스트 출력 카운터 수를 추가 합니다.

{@$divi->document_srl = $oDocument->document_srl} <- 특정 게시물 부터 구하기
(위젯이나 게시물 리스트 등에는 document_srl 변수가 없기 때문에 임의의 게시물 번호를 입력해 줍니다.
변수의 경우는 각 위젯, 게시물 리스트에서 표기하는 document_srl 변수명으로 대체해주세요)
{@$divi->search_target = context::get('search_target')} <- 특정 검색 대상
{@$divi->search_keyword = context::get('+ 'search_keyword')} <- 특정 검색어로 부터 구하기
{@$divi->no_search = 'Y'} <- 검색된 상태라도 이를 무시, 전체 게시물에서 구합니다.
{@$divi->list_count = 3} <- 리스트 출력 카운터 수

최대 5가지 항목으로 원하는 결과물을 출력합니다.
검색어의 경우 search_target,search_keyword가 동시에 선언 되어야 합니다.

스킨에 입력 형태

{@$divi->no_search = 'Y'}
{@$oDivision = &getModel('document')}
{@$divi_next = $oDivision->getDivision_next('',$divi)}
<!--@foreach($divi_next as $division_no)-->
<h4><a href="{getUrl('document_srl',$division_no->document_srl, 'listStyle', $listStyle, 'cpage','')}">다음글 {$division_no->document_srl} {$division_no->title}</a></h4><br />
<!--@end-->
{@$divi_prev = $oDivision->getDivision_prev('',$divi)}
<!--@foreach($divi_prev as $division_no)-->
<h4><a href="{getUrl('document_srl',$division_no->document_srl, 'listStyle', $listStyle, 'cpage','')}">이전글 {$division_no->document_srl} {$division_no->title}</a></h4><br />
<!--@end-->


foreach안에서의 $division_no->document_srl 와같은 결과물을 xe_documents 테이블의 컬럼 내용 전체를 뽑아낼 수 있습니다.

ps1 : 저는 document 모듈에 안넣고 애드온으로 해서 쓰기 때문에 위 내용 적용 시 오류가 발생할 가능성이 있습니다.
(하지만 테스트는 해보았기에 될거로 봅니다.)
ps2 : 왠만하면 이 이상 요구하는건 좀... -_-;;


태그 연관 글
  1. [2018/05/18] 묻고답하기 확장변수 사용자정의에 입력한 일자(년월일)을 특정기간으로 검색하려면.. by 찬란하리 *1
  2. [2016/09/05] 묻고답하기 게시판에서 검색 버튼 활성화 방법 문의드립니다. by lifema**** *4
  3. [2015/10/16] 묻고답하기 검색이 안됩니다. by sports21
  4. [2015/09/30] 묻고답하기 메타 태그를 홈페이지 주소에 입력하는 방법 좀 부탁드려요. by seamaster *3
  5. [2015/07/09] 포럼 내 사이트, 네이버 검색은 요원한가? by 마래바 *9
제목 글쓴이 날짜
php 세션을 memcache에 저장할 때 주의할 점 XE러버 2014.07.04
클리어픽스(clearfix)의 개념과 방법 시니시즘 2014.07.04
XE Core:1.7.5.3 조회수 증가, 자기 게시글 클릭시 조회수 증가 [1] file 때린데 또때려 2014.07.04
에디터 컴포넌트에 현재 mid 값 넘겨주기. [1] 애니즌 2014.07.03
jqm(jQuery Mobile) 사용 시 XE의 CSS 와 충돌할 때 file Canto 2014.07.03
[javascript] 기초강좌 | 4장. 비교제어문(if문) hiwebs 2014.07.02
[javascript] 기초강좌 | 03 논리연산자, 비트, 삼항연산자, 기타연산자 hiwebs 2014.07.02
외국어 스팸 방어 [2] DoorWeb 2014.07.01
[nginx] Rewrite 예외 설정 okiz 2014.06.30
닉네임 중복체크 버그 해결방법 [7] 소렌트. 2014.06.29
BlogAPI 활용하기 file 맞장 2014.06.29
php에서 한글언어 작성이 깨질때 [1] 광개토대왕3 2014.06.28
min.js min.css 정리해서 보기 Happyphp 2014.06.26
관리자가 글 쓸때는 분류를 선택 안 해도 등록되도록 (공지글을 쓸때를 위해) 개선 [2] sejin7940 2014.06.21
XE에서 신디케이션 제거하기 [1] mAKEkr 2014.06.20
상단에 스르르~ 닫기 가능한 배너 달기 [30] file 야옹잉 2014.06.20
관리자페이지에서 콘텐츠->파일 에서 등록된 파일 전체 리스트에 이미지가 바로 나타나도록 [2] sejin7940 2014.06.19
목록에서 이미지 팝업 이용하기 Happyphp 2014.06.19
손님이 비밀글 작성한 직후에도 글 보려면 반드시 비밀번호 넣게 하는 방법 [1] sejin7940 2014.06.18
htm과 html의 차이는 ? 디테일 2014.06.17