묻고답하기
회원 포인트 순위 출력 위젯에 페이지 네비게이션을 달고 싶습니다.
2013.07.17 19:34
위의 포인트 랭킹에서 목록밑에 게시판 모듈처럼 페이지 네비게이션을 달려고 합니다.
위젯 클래스 파일인 rank_point.class.php 파일에 function proc() 함수 안에서
--------------------------------------------------------------------------------------
if($args->with_group || $args->without->group) {
if($args->with_group) $obj->selected_group_srl = $args->with_group;
else $obj->selected_group_without_srl = $args->without_group;
$output = executeQuery('widgets.rank_point.getMemberListWithinGroup', $obj);
}
else {
//전체 포인트 목록을 구해옴
$output = executeQuery("widgets.rank_point.getMemberList",$obj);
}
Context::set('total_count', $output->total_count);
Context::set('total_page', $output->total_page);
Context::set('page', $output->page);
Context::set('page_navigation', $output->page_navigation);
// 오류가 생기면 그냥 무시
if(!$output->toBool()) return;
// 결과가 있으면 각 문서 객체화를 시킴
if(count($output->data)) {
foreach($output->data as $key => $val) {
$point_list[$key] = $val;
}
} else {
$point_list = array();
}
---------------------------------------------------------------------------------------
위와 같이 파란색 부분을 추가하고
스킨의 list.html 파일에서
--------------------------------------------------------------------------------------
<!-- 페이지 네비게이션 -->
<div class="pagination a1">
<a href="{getUrl('page','','module_srl','')}" class="prevEnd">{$lang->first_page}</a>
<!--@while($page_no = $page_navigation->getNextPage())-->
<!--@if($page == $page_no)-->
<strong>{$page_no}</strong>
<!--@else-->
<a href="{getUrl('page',$page_no)}">{$page_no}</a>
<!--@end-->
<!--@end-->
<a href="{getUrl('page',$page_navigation->last_page,'module_srl','')}" class="nextEnd">{$lang->last_page}</a>
</div>
---------------------------------------------------------------------------------------------
이렇게 추가 했습니다.
그리고 위젯을 삽입하고 결과를 보면
회원1
회원2
회원3
회원4
회원5
첫페이지 1 2 3 끝페이지
이런식으로 출력이 되는데요, 위젯 설정의 list_count를 설정한대로 1페이지는 잘 나오지만 2,3페이지는 버튼을 눌러도 아무 변화가 없습니다.
제가 XE 코어에 대한 이해가 많이 부족한 상태인데요... 페이지 네비게이션을 달려면 위젯으로는 안되고 모듈로 만들어야 하는건가요?
댓글 2
-
sejin7940
2013.07.17 19:56
-
Summer
2013.07.17 20:29
display 효과가 아닌, 게시판 모듈처럼 page가 달라질때마다 그 page에 해당하는 문서를 새로 DB에서 불러오도록 하고싶었습니다. 정확히 게시판 페이지 네비게이션과 똑같이, 주소에 ?page=3 파라미터가 넘어가면 그 파라미터에 해당하는 글들이 출력되게끔요... display 효과로 구현하게되면 회원수가 1000명이 넘을때 위젯에서 매번 1000개의 DB를 가져오면 홈페이지 속도가 느려질것 같다는 생각이 되서요... -
sejin7940
2013.07.17 20:52
의견주신대로라면..
우선 page 변수를 위젯 class.php 로 전달을 해줘야겠죠
$obj->page = Context::get('page');
if(!$obj->page) $obj->page=1; 을 넣고
이 페이지별로 돌아가고 query 문을 맞추시면 됩니다.
query문의 navigator 부분을 다른 목록보기 부분 query 를 참조해서 추가하시면 될겁니다.
-
Summer
2013.07.17 22:23
감사합니다 ^_^ 이미 쿼리부분에 navigator는 모두 구현이 되어잇어서 위젯 클래스에 $obj->page = Context::get('page'); -
Summer
2013.07.17 22:24
한줄만 추가했는데도 페이지 네비게이션이 잘 작동하네요! 사실 어떻게 작동되는건지 이해는 잘 안가서 공부해야 겠습니다.
위젯기반으로 구현됩니다. (위젯이 오히려 맞죠. 위젯은 원하는 곳에 넣을 수 있지만, 모듈은 그렇게 되는게 아니거든요)
단지 페이징 구현방식이 스킨부분에서 잘못 되셨습니다. 쿼리도 페이징이 가능하게 고치셨는지 모르겠네요
위젯 페이징은 href 로 링크가 걸리는게 아니라, 실제로는 한꺼번에 모든페이지를 다 뿌려주고 display 효과를 주는거거든요.
정확한건 content 위젯의 페이징 부분 소스를 분석해서 넣어보세요
해보고 어려우시면 차라리 제작의뢰에 남기시는 것도 한 방법이 될겁니다.