카테고리+공지사항일 경우 해당 갯수만큼 제외하기
https://xetown.com/index.php?mid=alley&category=15157&document_srl=555841
이전 팁의 경우, 카테고리 내 공지사항이 있을 경우 제대로 카운트하지 못하는 문제점이 있었습니다.
그래서 해당 카테고리 내 공지사항을 체크하는 방법을 추가했습니다.
더불어 카테고리를 선택했을 경우 해당 카테고리 내에 공지사항의 갯수와
카테고리를 선택하지 않았을 경우 전체 게시판 $no를 체크하는 갯수가 달라
카테고리 선택 유무를 확인하여 계산하는 것을 추가하였습니다.
아래가 제가 쓴 소스이고요.
<div class="no"> {@ $oDB = &DB::getInstance(); $db_info = Context::getDBInfo(); $prefix = $db_info->master_db['db_table_prefix']; //공지사항 갯수 구하기 $query = $oDB->_query("select count(*) as cnt from ".$prefix."documents where module_srl = ".$module_info->module_srl." and is_notice = 'Y'"); $result = $oDB->_fetch($query); //공지사항 갯수 $noticeCnt = $result->cnt; //동일 모듈내 같은 카테고리 내 공지사항 갯수 구하기 $cat_srl = $category_list[$document->get('category_srl')]->category_srl; $cat_query = $oDB->_query("select count(*) as cnt from ".$prefix."documents where module_srl = ".$module_info->module_srl." and category_srl = ".$cat_srl." and is_notice = 'Y'"); $cat_result = $oDB->_fetch($cat_query); //해당 카테고리 내 공지시항의 갯수 $CatNotice_cnt = $cat_result->cnt; //0부터 시작하기에 +1한후에, 공지사항 갯수만큼 빼주기 // $CatNotice_cnt 를 빼주기 //$recno = -($no-$total_count)+1-$noticeCnt //$recno = $total_count-$no+1 //+$noticeCnt-$CatNotice_cnt // $recno = ($no-$total_count)*(-1)+$noticeCnt-$CatNotice_cnt+1-$noticeCnt //$recno = ($no-$total_count)*(-1)-$noticeCnt } <!--@if($category)--> {@ $recno = (($no+$CatNotice_cnt)-$total_count)*(-1)+1} <!--@else--> {@ $recno = (($no+$noticeCnt)-$total_count)*(-1)+1} <!--@end--> <!--@if($recno==1)--><div class="no1">BEST<strong>1</strong></div> <!--@elseif($recno==2)--><div class="no2">BEST <strong>2</strong></div> <!--@elseif($recno==3)--><div class="no3">BEST<strong>3</strong></div> <!--@else-->{$recno}<!--@end--> </div> <div> $recno = ($no - $total_count ) * (-1) <br> $category = {$category} $no : {$no} $total_count : {$total_count} $noticeCnt : {$noticeCnt} $CatNotice_cnt : {$CatNotice_cnt} </div>
이걸 풀어서 설명하자면,
1. 해당 게시판의 공지사항의 갯수 구하기
2. 해당 게시판의 해당 카테고리의 공지사항 갯수 구하기
3. 카테고리 선택 유무 확인해서 리스트 숫자 다르게 계산해주기
(서로 $no 체크가 다르기 때문에..)
이렇게 3가지가 필요했습니다.
1. 해당 게시판의 공지사항의 갯수 구하기 : $noticeCnt
//공지사항 갯수 구하기 $query = $oDB->_query("select count(*) as cnt from ".$prefix."documents where module_srl = ".$module_info->module_srl." and is_notice = 'Y'"); $result = $oDB->_fetch($query); //공지사항 갯수 $noticeCnt = $result->cnt;
2. 해당 게시판의 해당 카테고리의 공지사항 갯수 구하기 : $CatNotice_cnt
//동일 모듈내 같은 카테고리 내 공지사항 갯수 구하기 $cat_srl = $category_list[$document->get('category_srl')]->category_srl; $cat_query = $oDB->_query("select count(*) as cnt from ".$prefix."documents where module_srl = ".$module_info->module_srl." and category_srl = ".$cat_srl." and is_notice = 'Y'"); $cat_result = $oDB->_fetch($cat_query); //해당 카테고리 내 공지시항의 갯수 $CatNotice_cnt = $cat_result->cnt;
3. 카테고리 선택 유무를 확인해서 카운트 다르게 하기
<!--@if($category)--> {@ $recno = (($no+$CatNotice_cnt)-$total_count)*(-1)+1} <!--@else--> {@ $recno = (($no+$noticeCnt)-$total_count)*(-1)+1} <!--@end-->
$recno 는 출력하는 방법인데, 이전 팁에서처럼 5-4-3-2-1 이 아닌 1-2-3-4-5 순서대로 출력해주는 방법입니다.
1) 카테고리를 선택할 경우는
{@ $recno = (($no+$CatNotice_cnt)-$total_count)*(-1)+1}
a. $no : 해당 게시판의 공지사항을 제외한 글의 수
b. $CatNotice_cnt : 해당 카테고리의 공지사항 갯수
c. $total_count : 전체 게시판 수
((a+b)-c)을 하면 (게시물+카테고리공지)-전체게시물=0이 됩니다.
게시물 숫자가 -1,-2,-3,-4,-5가 되기 때문에 * -1를 해줍니다.
그리고 0부터 시작하기 때문에 +1를 해줍니다.
2) 카테고리 선택없이 게시판 목록을 볼 경우
{@ $recno = (($no+$noticeCnt)-$total_count)*(-1)+1}
여기서 $no는 해당 카테고리가 아닌 전체 게시물의 공지사항 갯수를 빼주기 때문에, 1)과 다릅니다.
예를 들어 선택한 카테고리의 공지사항은 1개이고, 전체 게시물에서 다른 카테고리의 공지사항도 있기 때문에
$no는 전체게시판의 공지사항의 갯수가 빠지게 됩니다. (XE 게시물 카운트 방식이 그런 것 같습니다.)
그래서. $no + $noticeCnt(전체공지사항갯수)를 더해주어야 합니다. 그리고 나서, 전체 게시물 수를 다시 빼주고,
1)에서와 같이 $total_count를 - 해주고, -1를 곱하고, 다시 1을 더해줍니다.

댓글 0