충북 by아포리아 postedMay 06, 2017

스킨에서 댓글 cpage 자동 감지

Views 537 Likes 0 Replies 0
Extra Form
입금자 성명 윤삼
필요장비 화이트 보드, 보드마카, 지우개
대관시간 1200
신청공간 세미나실
대관일 2011-10-10

이런 글이 안개 골목 > 개발이야기 게시판에 어울리는지 모르겠습니다.

안개 골목은 처음인지라 무섭..ㅎㅎ

 

- 이 글과 관련된 문제의식은 여기( https://www.xetown.com/square/582193 )를 참조!

- 스케치북 게시판 스킨 기준이에요~

- 개인적으로 '새로고침 없는 댓글'과 '대댓글 ajax 호출'을 적용한 상태여서, 일반 스케치북 게시판 스킨에서도 제대로 작동할지는 좀 더 봐야겠구요;;;

 

 

1. _comment.html 맨 위에 스크립트 구문을 넣어줌

jQuery(function($){
    var target_id = location.hash.replace(/#comment_/,''),
        container = '#cmtPosition';
    if(target_id != '') {
        $.cookie('target_id',target_id);
        if(target_id != '{$_COOKIE["target_id"]}') {
            setCookieNReload();
        }
    } else {
        $.cookie('target_id','');
        '{@ if(isset($_COOKIE["target_id"])) '+setCookieNReload()+'; }';
    }

    function setCookieNReload() {
        $.ajax({
            global: false,
            cache: false,
            url: location.href,
            dataType: 'html',
            success: function(data) {
                var content = $(data),
                    selectedContent = content.find(container).html();
                $(container).html(selectedContent);
            },
            complete: function() {
                if(location.href.indexOf('#comment_')!=-1) $(document).scrollTop($(location.hash).offset().top);
            }
        });
    };
});

 

2. 스크립트 구문이 끝나면 이어지는 곳에 다음과 같이 php 구문의 xe 템플릿 문법을 적용함

{@
    if(isset($_COOKIE['target_id'])):

        $oModuleModel = getModel('module');
        $comment_config = $oModuleModel->getModulePartConfig('comment',$module_info->module_srl);
        $cmt_lst_count = $comment_config->comment_count;

        $args = new stdClass();
        $args->document_srl = $oDocument->document_srl;

        $cl = executeQuery('comment.getCommentList', $args);
        foreach($cl->data as $key => $val):
            if($val->comment_srl == $_COOKIE['target_id']):
                $cpage = ceil(($oDocument->getCommentcount()-$key)/$cmt_lst_count);
                break;
            endif;
        endforeach;

    endif;

    if(Context::get('cpage')) $cpage = Context::get('cpage');
}

 

아직 손봐야 할 것이 적지 않은 것 같지만, 대강 이런 식으로 하면 되는 듯합니다.

암튼, 그래도 cpage 자동 감지의 단초를 찾은 거 같아요.

 

테스트는 여기: http://bit.ly/2pF5a8V

(주소 링크의 파라미터에 cpage는 없지만, 댓글번호를 보고 자동으로 cpage를 감지해서 해당 댓글 페이지로 넘어갈 거예요)

 

3. 덧붙여, _comment.html을 include하고 있는 _read.html에 다음과 같은 hashchange 이벤트를 붙여주면 더 완벽한 작동이 가능합니다.

(function($) {
    if(location.href.indexOf('#comment_')!=-1) {
        var container = '#cmtPosition';
        $(window).on('hashchange',function(){
            $.ajax({
                global: false,
                cache: false,
                url: location.href,
                dataType: 'html',
                success: function(data) {
                    var content = $(data),
                        selectedContent = content.find(container).html();
                    $(container).html(selectedContent);
                }
            });
        });
    }
})(jQuery);

 

?