page-form - 목록 보여줄 항목 수 적용하기

inhalin·2021년 7월 2일
0

일터지식

목록 보기
6/14

목록이 보여지는 블레이드 파일 1개만 수정

검색 창을 페이지 명이 있는 곳으로 올릴 경우.

<div class="page-header">
    @include('layouts.partial.header', [...])

    @include('partial.search-form', [...])
</div>

항목수 선택기능 추가

<div class="text-right flex justify-end">
    <div class="flex">
        <!-- 있으면 이안에 같이 -->
        @include('partial.list-order-form')

        @include('partial.page-form')
    </div>
</div>

페이지 이동시에 선택된 항목수 유지시키기

  • paginate_qs_only() 인 경우: 'perPage' 추가
<div class="paging-box">
    @include('partial.pagination-simple', [
            'paginator' => $model, 'appends' => paginate_qs_only([... , 'perPage'])
            ])
</div>
  • paginate_qs_except() 인 경우: 그대로 두기
<div class="paging-box">
    @include('partial.pagination-simple', [
            'paginator' => $model, 'appends' => paginate_qs_except()
            ])
</div>

페이징 쿼리스트링

라라벨 페이징 appends에 urlencode 처리가 없어서 임의로 urlencode 처리 추가

paginate_qs_only

  • 페이징 할때 특정 키의 쿼리스트링만 반환
function paginate_qs_only(array $keys)

예시

// 현재 url - htts://test.com/dev?field=all&q=hello&location=seoul

paginate_qs_only(['field', 'q', 'perPage']);
// htts://test.com/dev?field=all&q=hello&perPage=10

paginate_qs_except

  • 페이징 할때 특정 키의 쿼리스트링만 반환
function paginate_qs_only(array $keys)

예시

// 현재 url - htts://test.com/dev?field=all&q=hello&location=seoul

paginate_qs_except(['perPage']);
// htts://test.com/dev?perPage=10

참고

위에서 paginate_qs_only()인 경우에는 'perPage' 추가하고 paginate_qs_except()인 경우는 그대로 두었다.

왜 그런걸까?

paginate_qs_except()는 지정된 쿼리스트링 외 나머지를 다 지워버린다. 그래서 남겨줄 조건을 지정하지 않고 다른 페이지로 넘어가면 원하는 조건의 목록에 대한 페이징 결과가 제대로 나오지 않는다.

예를 들어서,

paginate_qs_except(['perPage']);

여기서는 남겨줄 쿼리 스트링에 type을 넣지 않은 상태다. type=company인 목록을 페이지당 10개씩 보이도록 하면 첫 페이지에서는 type이 company에 해당하는 목록들이 잘 보인다.

// 현재는 type이 company인 목록들을 제대로 보여주고 있다.
https://test.com/dev?type=company&perPage=10

그런데 2번 페이지(또는 몇번째든 다른 페이지)로 넘어가는 순간 쿼리 스트링에서 type=company가 빠져버리게 된다. 따라서 type=company인 목록의 2번 페이지를 보여주는 게 아니라 전체 목록의 2번 페이지의 내용을 보여주게 된다.

// type에 대한 쿼리스트링이 제외되어 버리면서 
// 전체 목록에 대한 2번 페이지를 보여주게 된다.
https://test.com/dev?perPage=10&page=2

처음에 paginate_qs_only, paginate_qs_except 차이 생각안하고 무조건 paginate_qs_only로 바꿔버렸다.

단순 문구수정이 아니고 기능 수정되거나 추가된 경우에는 무조건 다양한 상황을 먼저 테스트하고 코드리뷰 요청하자.

0개의 댓글