https://xetown.com/rxe_tip/248952
위 팁 제공해주셔서 잘 사용하고 있습니다.
그런데 신규 댓글이 무조건 맨 아래 달리는 경우가 아닌 일반적인 대댓글 형식을 제공하는 경우 댓글 새로고침 후 새로운 댓글이 위쪽에 대댓글로 달렸다면 새로운 댓글이 추가된 것을 알아채기 힘든데요.
새로고침 후 새로운 댓글이 없다면 없음으로
있다면 새로운 댓글이 몇개라고 표시해 주면 좋을 것 같은데 복잡하고 어렵겠죠??
마지막 댓글의 작성 시간을 비교해서 새로 불러온 댓글의 마지막 댓글 작성 시간이 커졌더면 신규 댓글이 있다고 인식하거나
혹은 댓글번호를 이용할 수도 있을 것 같기도 합니다.
댓글 19
댓글 수를 비교하는 것도 방법일 것 같아요.
ajax 호출 전에 기존 댓글 수를 가져오고, 호출 뒤의 댓글 수랑 비교하는...
머리로만 짜봤는데 될지는 잘 모르겠습니다.
var reqUrl = current_url.setQuery('mid', current_mid, 'document_srl', target_srl);
var cmtCount = Number(jQuery('#cmtPosition').find('.ui_font b').text());
jQuery('.loading-spinner').show();
jQuery('.comment-reload > span').hide();
jQuery.ajax ({
url:reqUrl,
dataType:'html',
success: function(data) {
var a = jQuery(data),
b = a.find('#cmtPosition').html();
jQuery('#cmtPosition').html(b);
},
complete: function() {
var newCount = Number(jQuery('#cmtPosition').find('.ui_font b').text());
if ( cmtCount < newCount ) {
alert((newCount - cmtCount) + '개의 댓글이 달렸습니다');
} else {
alert('새로운 댓글이 없습니다');
}
setTimeout(function() {
jQuery('.loading-spinner').fadeOut();
jQuery('.comment-reload > span').fadeIn();
}, 500);
}
});
}
위에서 새로 첨가한 아래 부분을 complete가 아니라 success에 넣어야 할지도 모르겠네요.
if ( cmtCount < newCount ) {
alert((newCount - cmtCount) + '개의 댓글이 달렸습니다');
} else {
alert('새로운 댓글이 없습니다');
}
흠, 근데 가능성은 드물겠지만 리로딩 동안 댓글이 사라지거나 하는 문제도 있겠네요.
댓글 수는 소통이 활발한 곳에서는 삭제된 댓글로 인해 문제가 될 것 같더라구요. 저희는 물론 삭제된 댓글로 남고 그리고 댓글이 빠르게 달리고 삭제되는 곳이 아니라 상관은 없을 지도 모르겠습니다.
그리고 더쿠넷을 봤더니 댓글이 없을때 알리는 것을 div로 했더라구요. 댓글수를 알려줄때는 사라지면 안되겠지만...
신규댓글이 없다고 출력되고 사라지게 했더라구요. 이런 동작도 좋은 것 같습니다.
댓글마다 댓글 번호가 붙을텐데요..
댓글 출력해주는 곳 어딘가에.. 마지막 댓글의 댓글번호를 기록해 놓고..
지금 주신 코드와 비슷하게..
댓글새로고침을 누른 순간 마지막 댓글의 댓글번호
ajax 로 새로 가지온 데이터에서 마지막 댓글의 댓글번호 두개를 비교해서 댓글번호 값이 커졌다면 새로운 댓글이 있다고 판단 할 수도 있을 것 같습니다.
xe에서 마지막 달린 댓글을 뽑아낼 수 있는지 잘 모르겠네요.
1) 존재하는 댓글 번호를 다 수집해서 최대값 하나만 추출하고,
2) 리로드된 댓글 번호를 다 수집해서 마찬가지로 최대값을 추출한 뒤,
3) 양자를 비교하는 방식이어야겠네요.
소스가 복잡해지겠습니다;;
같은 게시물에서 댓글이 계속 작성될때 마지막 작성되는 값이 이 값을 가지고 기존에 가졌던 댓글은 다시 그 값을 없애주고 하는..
이게 꼭 필요한지는 모르겠지만 일단 이 기능이 있다면 마지막에 작성된 댓글이 어 떤 것인지 전체 댓글에서 댓글번호가 가장 큰 댓글 또는 전체댓글에서 작성된 시간이 가장 늦은 댓글 이런 것을 찾아내지 않아도 되니 말입니다.
새로운 댓글 작성이 되었는지 확인하기 위해 이런 기능이 내장되는 것은 비효율적이겠죠....ㅡㅡ;
해당문서번호로 댓글을 조회하는 것인데요.
작성시간순/목록 1개
이값을 가져와 댓글보여주는 템플릿 어디에 값을 저장하구요.
- 댓글번호를 저장하는거죠.
이 값만 비교해서 나중에 불러온게 값이 커졌다면
"새 댓글이 달렸습니다."
값이 커지지 않았다면
"새 로운 댓글이 업습니다."
딱 갯수를 1개를 지정해서 불러오는 것이라 속도에 큰 영향을 주지 않을 것 같아서요...
새로운 댓글을 확인하지 않는 많은 방문자들에게는 작업이 추가되지 않을 수도 있으니 말입니다.
장.단점이 조금씩 있긴 하지만..
댓글 새로고침 시간이 조금 오려걸려도 추가적인 서비스라 쿤 문제는 아닐 것 같구요.
약간 무식하긴 하지만 대강 이런 식이 될 것 같네요.
var reqUrl = current_url.setQuery('mid', current_mid, 'document_srl', target_srl);
var cmtSrl = getRecentCommentSrl();
jQuery('.loading-spinner').show();
jQuery('.comment-reload > span').hide();
jQuery.ajax ({
url:reqUrl,
dataType:'html',
success: function(data) {
var a = jQuery(data),
b = a.find('#cmtPosition').html();
jQuery('#cmtPosition').html(b);
},
complete: function() {
var newSrl = getRecentCommentSrl();
if ( cmtSrl < newSrl ) {
alert('새로운 댓글이 달렸습니다');
} else {
alert('새로운 댓글이 없습니다');
}
setTimeout(function() {
jQuery('.loading-spinner').fadeOut();
jQuery('.comment-reload > span').fadeIn();
}, 500);
}
});
}
function getRecentCommentSrl() {
var max = 0;
jQuery('#cmtPosition').find('.fdb_itm').each(function() {
max = Math.max(Number(jQuery(this).attr('id').replace('comment_', '')), max);
});
return max;
}
이것도 돌려보진 않고 그냥 코딩한 거여서 될지는 모르겠어요;;;
이부분에서 에러가 난다고 콘솔에 뜨는데요.
그리고 이전 페이지에 댓글이 새로 달려도 감지해 내는건가요?
거기까지 감안하려면 코어에서 최근 댓글 추출을 하는 함수를 제공하고, 또 이걸 exec_json으로 가져올 액션도 제공해줘야 하는데, 별도로 모듈을 개발하지 않는 한 그렇게까지는 실질적으로 어려워 보입니다;;;
(가끔 개발자님들이 트리거, 액션 등등만 몰아서 사용하는 별도 모듈을 만들어 활용한다고 하던데 이래서 그런 건가봐요)
에러 내용은 어떻게 되나요?
그런데 사실 저희 xe 댓글 구조가 페이지와 대댓글 구조라 새로 달린 댓글이 있는지 확인이 어려워 댓글이 추가된 것을 알려주는게 좋을 것 같아 시도해 보려고 한건데요.
더쿠넷 처럼 무조건 아래로 새 댓글이 달리지 않는 구조 이기 때문에
위쪽의 대댓글,이전페이지에 새댓글 등을 알려주어야 할 것 같아서요.
댓글 리스트에 광고가 있어서 undefined 값이 들어왔군요ㅜ
이걸로 바꿔보시죠.
var max = 0, cmtID;
jQuery('#cmtPosition').find('.fdb_itm').each(function() {
cmtID = jQuery(this).attr('id');
if ( cmtID != '' && typeof cmtID != 'undefined' ) {
max = Math.max(Number(cmtID.replace('comment_', '')), max);
}
});
return max;
}
추후에 댓글 출력 템플릿에
마지막 댓글 하나만 쿼리해서 댓글번호만 변수에 담아 출력해서 그 값의 변동을 이용해서 지금 도움주신 코드에 응용을 해봐야 할 것 같습니다.
도움 감사합니다.
https://xetown.com/qna/1056205
위 질문 내용대로 쿼리한 값을 변수에 담는 것이 문제 없다면 이렇게 해도 될 것 같습니다.
js코드에 클래스,id와 html의 클래스id가 일치한다면 안될 이유가 없습니다.