PHP8에서의 스티커 모듈 오류 개선필요 (2)
CMS/프레임워크 | Rhymix 1.9 |
---|---|
개발 언어 | PHP 7.4 |
PC에서는 스티커가 12개씩 로딩이되지만, 모바일에서는 반응형을 구현을 위해 스티커가 5개씩만 출력되고, 다음페이지를 눌러야 출력이 되는 형태로 기존에 구현이 되어 있습니다.
아래가 그 코드인데요
function getCommentStickerList(){
$logged_info = Context::get('logged_info');
$sticker_array = $this->getDefaultSticker();
//debugPrint($stocker_array);
$defaultStickerCount = countobj($sticker_array);
$page = Context::get('page') ? Context::get('page') : 1;
$date = date('YmdHis');
$list_count = Mobile::isMobileCheckByAgent() ? 5 : 12;
if($logged_info){
$args = new stdClass();
$args->page = $page;
$args->list_count = $page == 1 ? ($list_count-$defaultStickerCount) : $list_count;
$args->page_count = 2;
$args->order_type = 'asc';
$args->member_srl = $logged_info->member_srl;
$args->date = $date;
$output2 = executeQueryArray('sticker.getStickerMylist', $args);
$count = $page > 1 || $defaultStickerCount == 5 ? $defaultStickerCount : 0;
if($page > 1){
unset($sticker_array);
$sticker_array = array();
$prev_page = new stdClass();
$prev_page->page = $page-1;
$prev_page->list_count = $list_count;
$prev_page->order_type = 'asc';
$prev_page->member_srl = $logged_info->member_srl;
$prev_page->date = $date;
$output = executeQueryArray('sticker.getStickerMylist', $prev_page);
$prev_data = $output->data;
$prev_page_count = countobj($output->data);
if($prev_page_count > $list_count-$defaultStickerCount){
end($prev_data);
$countMovePos = $defaultStickerCount && $defaultStickerCount - ($list_count - $prev_page_count) > 0 ? $defaultStickerCount - ($list_count - $prev_page_count) : $defaultStickerCount;
for($i=1; $i<$countMovePos; $i++){
prev($prev_data);
}
for($i=$countMovePos; $i>0; $i--){
$current = current($prev_data);
$args = new stdClass();
$args->sticker_srl = $current->sticker_srl;
$args->no = 0;
$output1 = executeQuery('sticker.getStickerMainImage', $args);
$obj = new stdClass();
$obj->sticker_srl = $current->sticker_srl;
$obj->title = $current->title;
$obj->main_image = $output1->data->url;
if($i !== 1){
next($prev_data);
}
array_push($sticker_array, $obj);
$count++;
}
}
}
foreach($output2->data as $key=>$sticker){
if($count >= $list_count){
break;
}
$args1 = new stdClass();
$args1->sticker_srl = $sticker->sticker_srl;
$args1->no = 0;
$output1 = executeQueryArray('sticker.getStickerMainImage', $args1);
$obj = new stdClass();
$obj->sticker_srl = $sticker->sticker_srl;
$obj->title = $sticker->title;
$obj->main_image = $output1->data[0]->url;
array_push($sticker_array, $obj);
$count++;
}
//$this->add("page_navigation", $output2->page_navigation);
}
$this->add("sticker", $sticker_array);
}
$logged_info = Context::get('logged_info');
$sticker_array = $this->getDefaultSticker();
//debugPrint($stocker_array);
$defaultStickerCount = countobj($sticker_array);
$page = Context::get('page') ? Context::get('page') : 1;
$date = date('YmdHis');
$list_count = Mobile::isMobileCheckByAgent() ? 5 : 12;
if($logged_info){
$args = new stdClass();
$args->page = $page;
$args->list_count = $page == 1 ? ($list_count-$defaultStickerCount) : $list_count;
$args->page_count = 2;
$args->order_type = 'asc';
$args->member_srl = $logged_info->member_srl;
$args->date = $date;
$output2 = executeQueryArray('sticker.getStickerMylist', $args);
$count = $page > 1 || $defaultStickerCount == 5 ? $defaultStickerCount : 0;
if($page > 1){
unset($sticker_array);
$sticker_array = array();
$prev_page = new stdClass();
$prev_page->page = $page-1;
$prev_page->list_count = $list_count;
$prev_page->order_type = 'asc';
$prev_page->member_srl = $logged_info->member_srl;
$prev_page->date = $date;
$output = executeQueryArray('sticker.getStickerMylist', $prev_page);
$prev_data = $output->data;
$prev_page_count = countobj($output->data);
if($prev_page_count > $list_count-$defaultStickerCount){
end($prev_data);
$countMovePos = $defaultStickerCount && $defaultStickerCount - ($list_count - $prev_page_count) > 0 ? $defaultStickerCount - ($list_count - $prev_page_count) : $defaultStickerCount;
for($i=1; $i<$countMovePos; $i++){
prev($prev_data);
}
for($i=$countMovePos; $i>0; $i--){
$current = current($prev_data);
$args = new stdClass();
$args->sticker_srl = $current->sticker_srl;
$args->no = 0;
$output1 = executeQuery('sticker.getStickerMainImage', $args);
$obj = new stdClass();
$obj->sticker_srl = $current->sticker_srl;
$obj->title = $current->title;
$obj->main_image = $output1->data->url;
if($i !== 1){
next($prev_data);
}
array_push($sticker_array, $obj);
$count++;
}
}
}
foreach($output2->data as $key=>$sticker){
if($count >= $list_count){
break;
}
$args1 = new stdClass();
$args1->sticker_srl = $sticker->sticker_srl;
$args1->no = 0;
$output1 = executeQueryArray('sticker.getStickerMainImage', $args1);
$obj = new stdClass();
$obj->sticker_srl = $sticker->sticker_srl;
$obj->title = $sticker->title;
$obj->main_image = $output1->data[0]->url;
array_push($sticker_array, $obj);
$count++;
}
//$this->add("page_navigation", $output2->page_navigation);
}
$this->add("sticker", $sticker_array);
}
PHP8에서는 모바일에서의 스티커 목록 페이징이 제대로 되지 않습니다
즉 페이지는 PC버전에서의 12개 기준으로 페이지가 나눠지고
모바일에서는 PC버전과 달리 5개씩 출력되므로 페이지가 더 필요함에도 불구하고, 페이지 계산이 제대로되지 않네요
예)
사용자는 총 30개의 스티커를 보유중
PC에서는 12개씩 출력하니까 3페이지면 30개 출력 가능
모바일에서는 5개씩 출력하니까 6페이지가 필요, 그러나 PC기준으로 계산된 3페이지에 도달하면 다음 페이지 버튼 클릭시 '마지막 페이지입니다' 라는 메시지 발생
댓글 2
$list_count = Mobile::isMobileCheckByAgent() ? 5 : 12;
이러한 조건문이 오류가 나는걸까요?
요부분이 모바일에 5개 아닌경우 12개 할당하는거 같은데요.
if(Mobile::isMobileCheckByAgent())
{
$list_count = 5;
}
else
{
$list_count = 12;
}
이렇게 고쳐서 시도해보면 어떨까요??