팁/튜토리얼

카테고리+공지사항일 경우 해당 갯수만큼 제외하기

2017.04.08 09:14
826
0
0

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을 더해줍니다.

 

 

 

eond Lv. 12

댓글 0