Extra Form
PHP PHP 7.2
CMS Rhymix 2.x

스케치북5스킨에 게시판 목록 상단에 카테고리를 표시하고 각 카테고리에 속한 게시글 숫자를 표시하는 기능이 있습니다.

 

오늘 카테고리를 변경할 일이 있어 목록순번에 영향을 주기 싫어서 db에서 변경을 하고 캐시파일 재생성을 했습니다.

 

해당 게시글의 카테고리는 잘 변경이 되었는데요.

 

문제는 게시판 상단에 카테고리에 소속된 게시글 수가 변경이 적용이 안됩니다.

이거 참 요상하네요.

 

실제 카테고리를 선택하면 전체의 숫자가 해당 카테고리의 숫자로 바뀌는데 여기는 정상으로 바뀌고 선택된 카테고리의 글 목록도 변경된 것으로 잘 출력이 됩니다.

 

유독 게시글 숫자를 loop를 돌려서 출력해주는 부분에서 과거 데이터가 출력이 됩니다.

이렇게 되는 이유가 뭘까요??

 

게시글 수정까지 해서 다시 봐도 마찬가지네요.

 

<!--@foreach($category_list as $key=>$val)-->
    <!--@if(!$val->depth)-->
        {@
            $cate_list[$key] = $val;
            $cate_list[$key]->children = array();
            $current_key = $key;
        }
    <!--@elseif($current_key)-->
        {@ $cate_list[$current_key]->children[] = $val }
    <!--@end-->
<!--@end-->

 

 

 

    <div cond="!$mi->cnb" class="bd_cnb clear css3pie<!--@if($mi->cnb_open)--> open<!--@end-->">
        <a class="home" href="{getUrl('category','','page','','document_srl','')}" title="{$lang->document_count} '{number_format($total_count)}'"><i class="home ico_16px">Category</i></a>
        <div class="dummy_ie fr"></div>
        <ul class="bubble bg_f_f9 css3pie">
            <li class="cnbMore"><a href="#" class="bubble" title="{$lang->category} {$lang->more}"><i class="fa<!--@if($mi->cnb_open)--> fa-caret-up<!--@else--> fa-caret-down<!--@end-->"></i></a></li>
            <li loop="$cate_list=>$key,$val" class="on"|cond="$category==$val->category_srl">
                <a class="a1<!--@if($category==$val->category_srl)--> on<!--@end-->" href="{getUrl('category',$val->category_srl,'document_srl','','page','')}" title="{$lang->document_count} {$val->document_count}"|cond="!$mi->cnb_count" style="color:{$val->color}"|cond="$val->color!='transparent'">{$val->title}<small cond="$mi->cnb_count">({$val->document_count})</small></a>
                <ul cond="count($val->children)" class="wrp">
                    <li loop="$val->children=>$idx,$item" class="li2<!--@if($category==$item->category_srl)--> on<!--@end-->"><a href="{getUrl('category',$item->category_srl,'document_srl','','page','')}" title="{$lang->document_count} {$item->document_count}"|cond="!$mi->cnb_count" style="color:{$item->color}"|cond="$item->color!='transparent'">{$item->title}<small cond="$mi->cnb_count">({$item->document_count})</small></a></li>
                </ul>
            </li>
        </ul>
    </div>
    <ul cond="$mi->cnb=='cTab'" class="cTab clear">
        <li class="home<!--@if(!$category)--> on<!--@end-->"><a href="{getUrl('category','','page','','document_srl','')}" title="{$lang->document_count} {number_format($total_count)}">{$lang->total}<small cond="$mi->cnb_count">({number_format($total_count)})</small></a></li>
        <li loop="$cate_list=>$key,$val" class="on"|cond="$category==$val->category_srl">
            <a href="{getUrl('category',$val->category_srl,'document_srl','','page','')}" style="color:{$val->color}"|cond="$val->color!='transparent'">{$val->title}<small cond="$mi->cnb_count">({$val->document_count})</small></a>
            <ul cond="count($val->children)">
                <li loop="$val->children=>$idx,$item" class="on"|cond="$category==$item->category_srl"><a href="{getUrl('category',$item->category_srl,'document_srl','','page','')}" style="color:{$item->color}"|cond="$item->color!='transparent'">{$item->title}</a></li>
            </ul>
        </li>
    </ul>
    <ul cond="$mi->cnb=='cnb3' || $mi->cnb=='cnb4'" class="cnb3 {$mi->cnb} {$mi->cnb3_align} clear">
        <li class="home<!--@if(!$category)--> on<!--@end-->">
            <a href="{getUrl('category','','page','','document_srl','')}" title="{$lang->document_count} {number_format($total_count)}">{$lang->total}<small cond="$mi->cnb_count">({number_format($total_count)})</small></a></li><li loop="$cate_list=>$key,$val" class="on"|cond="$category==$val->category_srl"><a href="{getUrl('category',$val->category_srl,'document_srl','','page','')}" style="color:{$val->color}"|cond="$val->color!='transparent'">{$val->title}<small cond="$mi->cnb_count">({$val->document_count})</small></a>
        </li>
    </ul>
</div>

  • profile
    이유는 모르겠고 일단 게시글 수정을 통해 다른 카테고리로 변경했다가 다시 원하는 카테고리로 변경해주니 해결은 되네요.
  • profile

    카테고리별 게시물 갯수가 DB에 저장되어 있습니다. 스케치북 스킨은 이 정보를 불러와서 보여주는 것이고요. 게시판별 갯수는 따로 저장 안 하면서 왜 카테고리만 그렇게 했는지 의문이지만, 아무튼 원래 설계가 그렇더군요.

     

    DB를 직접 조작하지 않고 사이트에서 글을 이동하면 해당 카테고리의 게시물 갯수가 갱신됩니다.

  • profile profile
    어??? db에 있어요? 찾아봐서 없는거 같아서 문서만 수정한건데요... 다시 눈뜨고 찾아볼게요.
  • profile profile
    이런 카테고리 테이블에 document_count 라는 컬럼이 있네요.
    여기에 게시글을 카운트하고 있었군요. 여기 것을 불러오니 그런 현상이 있을 수 밖에 없었네요.
  • profile profile
    카테고리에 document_count가 사실상 고정값인데,
    게시판 검색이나 각종 필터링을 통해 목록을 불러올 경우엔 가져온 '전체 문서갯수'와 '카테고리별 문서 갯수의 총합'이 어긋나곤 하더라구요.
  • profile profile

    전체카테고리의글 총합수가 특정카테고리를 선택하면 그 카테고리 글수로 변하더라구요.
    이거죠?

  • profile profile

    다른 파라미터가 없고 카테고리만 있으면 전체 갯수와 카테고리 글수가 일치해도 무방할 것 같아요.

    근데 제 기억으로는 다른 파라미터(page 말고 검색어 같은 거요)가 있어서 목록이 필터링이 되면, 특정 카테고리 선택시, 글갯수 표시와 실제 목록에 로딩된 문서 갯수에 차이가 나타났던 것 같아요.

  • profile profile

    아.. 그건 아마도 기진곰님께서 설명하신 카테고리에 글수 표현하는것이 스킨에서 카테고리테이블의 document_count 의 값을 가져오게 하드코딩되어 있어 그럴것 같네요. 거긴 목록에 뭐가 나오는지 알수 없는 db 입력값만 가져오니까요.

     

    카테고리 전체의 글수에 사용되는 $total_count 값이 오히려 지금 말씀 하신 검색어 변수등이 다 고려되어 실제 목록에 출력되는 게시글 수가 되니 이게 최종 출력되는 글 수에 사용될 변수 일 것 같습니다.

  • profile profile

    비슷하지만 살짝 다른 이야기인데
    제가 어제 게시판별로 게시글수를 보여주고 싶어서

    $total_count 를 사용했습니다.

    그런데 말씀 하신 카테고리 선택시 $total_count 값이 해당 카테고리를 선택한 최종 목록의 결과로 반영이 되더라구요.

    그래서 별도로 게시판 글수를 쿼리하는 것을 추가하고
    카테고리가 선택이 되면 쿼리한 값을
    카테고리가 없으면 $total_count 값을 사용 하는 것으로 적용했네요.

  • profile profile
    말 나온 김에 평상시 그 컬럼에 대해 가졌던 불만을 적어봤어요ㅋㅋ
    암튼 category_srl과 document_count가 서로 연결돼 있으니, 바꾸시려면 document_count도 바꿔치기를 하셔야 할 겁니다ㅎ
  • profile profile
    아... 댓글 쓰고 보니 조건을 바꿔야 겠네요.
    어제는 카테고리로 정렬할때만 일 줄 알았더니 필터링 변수들이 들어가면 무조건 틀어지는군요....
  • profile profile

    total_count 조정하는 것도 방법이었겠네요.
    다만 저는 total_count는 어차피 불러온 document_list의 총합이니까 그러려니 하고 이해는 되는 편이에요.
    바라는 점이 있다면 document_list 생성할 때 total_count가 유동적으로 변하듯 category_document_count 같은 걸 만들어서 유동적으로 제공하면 좋겠더라구요.

     

    덧. 근데 또 그렇게 하려면 리스트 만들 때 시간이 좀 많이 길어지겠죠ㅜ