웹마스터 팁
조회수 제한 풀고, 조회수 증가값을 더 크게 하는 소스
2011.08.21 02:07
원본글 : http://sejin7940.co.kr/index.php?mid=xe_tips&document_srl=19264&page=1
제 사이트의 글을 퍼온거기에 말이 짧습니다. 양해 부탁드립니다.
----------------------------------------------------------------
지난 1년 여간은 저도 이 소스를 이용해서 이 기능 원하는 경우 고쳐주었는데.
아예 이번에 이 기능을 그대로 구현한 애드온으로 만들었기에 (애드온을 배포할지 Market 에 내놓을지 확실치가 않네요)
이 소스는 반대로 배포해드립니다 ^^;;
커뮤니티 나 신규 사이트의 경우.. 조회수를 증가시키고 픈 경우가 많이 생긴다.
그러나, XE자체에서는 자기글은 아예 안 되고 남의 글도 한번만 조회수 증가가 가능하다
(IP 자체로 막고 있기에.. 원책적으로는 방법이 없다.)
아래의 소스는 일반유저에게는 조회수 횟수 제한 풀고, 한번클릭시마다 1씩 올라가고
관리자의 경우는 조회수가 10씩 올라가는 소스이다. 조회수 횟수제한을 풀고
(추가로 끝에 적어둔걸 이용하면 고정된 값이 아니라 랜덤하게 증가시킬 수도 있다)
1. modules/document/document.controller.php 에서
function updateReadedCount(&$oDocument) { 에서
// 조회수 업데이트가 되면 trigger 호출 (after)
$output = ModuleHandler::triggerCall('document.updateReadedCount', 'after', $oDocument);
if(!$output->toBool()) return $output;
// session에 정보로 조회수를 증가하였다고 생각하면 패스
if($_SESSION['readed_document'][$document_srl]) return false;
// 글의 작성 ip와 현재 접속자의 ip가 동일하면 패스
if($document->ipaddress == $_SERVER['REMOTE_ADDR']) {
$_SESSION['readed_document'][$document_srl] = true;
return false;
}
// document의 작성자가 회원일때 글쓴이와 현재 로그인 사용자의 정보가 일치하면 읽었다고 판단후 세션 등록하고 패스
if($member_srl && $logged_info->member_srl == $member_srl) {
$_SESSION['readed_document'][$document_srl] = true;
return false;
}
// 조회수 업데이트
$args->document_srl = $document_srl;
$output = executeQuery('document.updateReadedCount', $args);
전체를 주석처리하고..
하단에 기재
// 권한 체크
$oModuleModel = &getModel('module'+
');
$module_info = $oModuleModel->getModuleInfoByModuleSrl($args->module_srl);
$grant = $oModuleModel->getGrant($module_info, Context::get('logged_info'));
// 조회수 업데이트
$args->document_srl = $document_srl;
if($grant->manager) $output = executeQuery('document.updateReadedCount10', $args);
else $output = executeQuery('document.updateReadedCount', $args);
2. modules/document/queries/updateReadedCount10.xml 추가
<query id="updateReadedCount10" action="update">
<tables>
<table name="documents" />
</tables>
<columns>
<column name="readed_count" var="readed_count" default="plus(10)" />
</columns>
<conditions>
<condition operation="equal" column="document_srl" var="document_srl" filter="number" notnull="notnull" />
</conditions>
</query>
3. (추가사항) 만약.. 조회수를 랜덤으로 변하게 하고프면.
1번 소스중에서 끝부분을 아래처럼 바꿔주면 됩니다.
$args->document_srl = $document_srl;
$hits = rand(6,10);
if($grant->manager) $output = executeQuery('document.updateReadedCount'.$hits, $args);
else $output = executeQuery('document.updateReadedCount', $args);
그리고 modules/document/queries/updateReadedCount6.xml ~ modules/document/queries/updateReadedCount10.xml
plus() 값만 살짝 바꿔서 추가하면 됩니다 ^^
댓글 7
-
글문
2011.08.21 11:19
조회수 증가 애든온 마켓에 나와 있습니다. 랜덤한 부분 증가는 아니고 1씩 증가하는 애든온이네요. 관리자일 경우는 10씩 증가하고 랜덤으로 증가하는 부분이 매력이네요. -
네. XE Market 에 있더군요.
문제점은.. 지금 배포한 이 소스 안의 모든 기능이 다 포함되어있는..
애드온이 현재 제 컴퓨터 쪽에는 제작이 되어있다는거예요. ^^;;
그걸 여기에 배포하면 Market 에 올리신 분의 자료가 완전히 사장되어버리기에..
(기능적으로 그 마켓의 기능은 다 있는 상태에서 그 자료보다 몇가지가 더 추가되어있으니.. ㅡㅡ;)
어찌해야할지 조금 고민중이긴합니다 ^^;
XE Market 의 자료 말이 나와서 그런데.. 제 애드온 기능이....
중복 조회수 기능 사용대상 -> 관리자 / 모든 회원 / 사용 안함 (-> 모두에게 권한 준게 Xe Market의 기능)
중복 회수 제한 (-> 이게 XE Market 에 있는 기능이죠 )
랜덤 조회수 상승 사용대상 -> 관리자 / 모든 회원 / 사용 안함
랜덤 범위 지정 -> 최소값 / 최대값 (두개를 동일하게 하면 특정조회수로 상승이 되겠죠) -
그리고 여기 적어놓진 않았지만...
추천수 제한 푸는 소스도 물론있고.. 이를 애드온으로 만들어둔것도 있습니다.
(단지 이 추천수 제한 푼 애드온은.. 기능은 돌아가는데, Core 수정이 없으면 에러 alert 창은 어쩔 수 없이 계속 뜨죠.
뭐 추천수는 상관없이 올라가니까.. 그리고 이건 거의 관리자가 쓸 기능일 듯하니...)
이것도 배포하면 같이 하든지 할꺼예요... 말 그대로 이래저래 조금 고민중이랍니다. -
송동우
2011.08.21 11:54
의도가 악의적이지 않는 이상 market 상관없이 올려도 된다고 생각합니다.
그럼으로해서 market의 상품들도 더 신중하게 퀄리티 있는 것들이 올라오겠죠 -
WonArtSchool
2011.08.21 12:33
기능이 많으면 기존 것보다 가격을 높게 책정 하면 되지요.
레이아웃이나 스킨등이 다양하게 많이 올려 지듯이... -
완전히 같은 기능의 애드온이라도 마켓에 올리던 무료로 배포하던 신경쓰지 않으셔도 될것 같습니다.
그래야 사람들의 선택폭이 늘어나고, 경쟁으로 인하여 좀 더 발전할수 있을 테니깐요.
그리고 슈퍼마켓에 과자 한가지, 우유 한가지 뭐 이런식으로만 팔진 않으니.. ^^: -
이 공개한 소스를 이용해서 직접 수정을 하셔도 되고 ^^;;
아니면 오늘 배포해놓은 sejin7940_reaed_count (조회수 기능 확장 애드온) 을 사용해도 됩니다
기능적으로는 여기 적어둔 소스보다 조금 더 세부설정이 가능할꺼예요 ^^
(일일이 수정할 필요도 없고, XE 업데이트 신경도 안 써도 되고.. ^^;; 바로 달려가세요~ ^^;;)
제목 | 글쓴이 | 날짜 |
---|---|---|
htaccess 보안 팁 | 포럼위트 | 2015.02.24 |
300기가 Zboard4->XE 이전기
[14]
![]() | forest535 | 2015.02.13 |
스케치북 최신버전에서 미리 덧글 입력해두기
[5]
![]() | LI-NA | 2015.02.18 |
추천 취소 기능 만들기
[5]
![]() | Summer | 2013.09.11 |
xe core 설치 화면 오류 있습니다. 이렇게 바꿔주세요. [2] | 한꼬마 | 2015.02.18 |
데이타 이전 시 xml 파일 임포트 속도 높이기 ^^ | forest535 | 2015.02.17 |
jquery 외부로드하기 [22] | DynamicLaser | 2014.04.07 |
XE와 별도 프로그램 연동시 세션공유 [15] | 똑디 | 2008.12.12 |
snoop가 안될때 curl 로 가져오기 [3] | 한꼬마 | 2015.02.13 |
템플릿등에서 PHP 제어 구조(if, for, foreach)의 대체 문법 적용 [3] | 총모아 | 2015.01.30 |
1.4.2.3 에서 1.4.3 이상 버전으로 업그레이드 시 백지화면 해결팁 [4] | 2년후 | 2010.12.15 |
회원가입후 24시간 이후 글작성 가능하기 [2] | 샵사이드 | 2015.02.09 |
인증메일을 gmail의 smtp로 보내기 [29] | showjean | 2012.07.17 |
XE 비회원이 귀찮게 이메일 홈페이지 입력 안하도록 하기 [7] | jhrun | 2012.12.16 |
제로보드4에서 xe로 이전시 갤러리 게시판 이미지 깨어지는 현상 해결방법 [2] | 최르토스 | 2012.04.22 |
스케치북5 1.7.0 버전 모바일 게시판 스킨 댓글수 안나올때 [2] | 키스투엑스이 | 2014.10.22 |
제가 쓰는 자동링크 (스킨수정) [4] | okiz | 2014.04.29 |
사용자 매뉴에 회원정보와 포인트설정 바로가기 기능 삽입
[1]
![]() | 간장게장같은남자 | 2015.01.23 |
사용자정의 중 전화번호 형식을 쓰는경우 - 사이에 한칸씩 여백이 생기는 걸 없애는방법 [1] | sejin7940 | 2015.01.23 |
xe 폰갭 제작시 admob 광고 글쓰기 방해 하지 않으려면 | 한꼬마 | 2015.01.26 |