2016-12-07 3 views
0

다소 얇은 docs을 확인했지만 아직 어떻게하는지 잘 모르겠습니다.페이징 기능을 만드는 방법은 무엇입니까?

나는 컬렉션이 있습니다. 페이 지 네이터를 수동으로 만들고 싶습니다.

나는 내 컨트롤러에서, 내가 좋아하는 뭔가를해야 생각 :

new \Illuminate\Pagination\LengthAwarePaginator() 

하지만, 내가 원하는 내가 컬렉션을 슬라이스 필요합니까 무엇 PARAMS? 또한 내보기에 '링크'를 어떻게 표시합니까?

누군가가 간단한 예를 게시하여 페이지 분류기를 만드는 방법이 있습니까?

예를 들어, 나는 웅변을 매기기를 원하지 않습니다. 사용자 :: 페이지 매기기 (10);

public function __construct($items, $total, $perPage, $currentPage = null, array $options = []) 
{ 
    foreach ($options as $key => $value) { 
     $this->{$key} = $value; 
    } 
    $this->total = $total; 
    $this->perPage = $perPage; 
    $this->lastPage = (int) ceil($total/$perPage); 
    $this->path = $this->path != '/' ? rtrim($this->path, '/') : $this->path; 
    $this->currentPage = $this->setCurrentPage($currentPage, $this->pageName); 
    $this->items = $items instanceof Collection ? $items : Collection::make($items); 
} 

보다 약 LengthAwarePaginator

표시를 참조하십시오 LengthAwarePaginator (생성자)에 대한 소스 코드에 따르면

$page = request()->get('page'); // By default LengthAwarePaginator does this automatically. 
$collection = collect(...array...); 
$total = $collection->count(); 
$perPage = 10; 
$paginatedCollection = new \Illuminate\Pagination\LengthAwarePaginator(
            $collection, 
            $total, 
            $perPage, 
            $page 
          ); 

:

답변

2

Illuminate\Eloquent\Builder::paginate 메서드를 만드는 방법에 대한 예제를 살펴보십시오.

결과 등을 꺼내 웅변 모델을 사용하여 일을하는 간단한 예 :

$page = 1; // You could get this from the request using request()->page 
$perPage = 15; 
$total = Product::count(); 
$items = Product::take($perPage)->offset(($page - 1) * $perPage)->get(); 

$paginator = new LengthAwarePaginator(
    $items, $total, $perPage, $page 
); 
  • 첫 번째 매개 변수는
  • 온있어 페이지에 표시 할 결과를 받아 들인다을 두 번째는 결과의 총 수입니다 (페이지에 표시된 항목의 총 수가 아닌 페이지 매김중인 항목의 총 수)
  • 세 번째는 표시 할 페이지 당 숫자입니다.
  • 네 번째 페이지는 현재 사용중인 페이지입니다.
  • 사물을 사용자 정의하려는 경우 추가 매개 변수를 다섯 번째 매개 변수로 전달할 수 있습니다.

링크 당신은 당신이 할 수있는 항목의 기존 컬렉션 Model::paginate()


를 사용한 경우와 마찬가지로 그냥 매기기에 ->render() 또는 ->links() 방법을 사용하여 생성 할 수 있어야한다 :

$page = 1; 
$perPage = 15; 
$total = $collection->count(); 
$items = $collection->slice(($page - 1) * $perPage, $perPage); 

$paginator = new LengthAwarePaginator(
    $items, $total, $perPage, $page 
); 
+0

감사하지만이 질문에 완전히 대답하지 않습니다. - "컬렉션이 있습니다. 수동으로 페이징 기능을 만들고 싶습니다." 당신은 웅변 모델에 대해 오프셋 등을 사용하고 있습니다. – panthro

+0

아, 그렇다면 컬렉션에 모든 요소가 포함되어 있습니까? 아니면 자체적으로 페이지가 매겨진 목록입니까? – Jonathon

+0

@panthro 업데이트 된 답변보기 – Jonathon

0

이 같은 매기기를 만들 수 있습니다 보기의 링크 :

$paginatedCollection->links(); 

희망이 있습니다.

관련 문제