Extra Form
PHP PHP 7.4
CMS Rhymix

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);

}

 

PHP8에서는 모바일에서의 스티커 목록 페이징이 제대로 되지 않습니다

 

즉 페이지는 PC버전에서의 12개 기준으로 페이지가 나눠지고

 

모바일에서는 PC버전과 달리 5개씩 출력되므로 페이지가 더 필요함에도 불구하고, 페이지 계산이 제대로되지 않네요

 

예)

사용자는 총 30개의 스티커를 보유중

 

PC에서는 12개씩 출력하니까 3페이지면 30개 출력 가능 

모바일에서는 5개씩 출력하니까 6페이지가 필요, 그러나 PC기준으로 계산된 3페이지에 도달하면 다음 페이지 버튼 클릭시 '마지막 페이지입니다' 라는 메시지 발생

  • ?
    저 혹시 8.0 버전에서도 스티커 모듈에서 모듈 설정을 변경해도 변경되지 않는 그런 점이 발생하나요?
  • profile
    지난번 문제처럼 php8에서
    $list_count = Mobile::isMobileCheckByAgent() ? 5 : 12;
    이러한 조건문이 오류가 나는걸까요?
    요부분이 모바일에 5개 아닌경우 12개 할당하는거 같은데요.


    if(Mobile::isMobileCheckByAgent())
    {
    $list_count = 5;
    }
    else
    {
    $list_count = 12;
    }

    이렇게 고쳐서 시도해보면 어떨까요??