【问题标题】:Pagination showing all results分页显示所有结果
【发布时间】:2015-01-07 13:25:38
【问题描述】:

我正在从外部来源检索我的数据,因此必须手动构建分页。但是它只输出所有结果,起初我认为这可能是因为我的数组里面有 Objects 但似乎在这两种情况下都会发生。我做错了什么?

<?php

class MainController extends BaseController {
    // Base controller specifies layout
    // protected $layout = 'master';
    public function index()
    {
        $this->layout->title = 'testing';
        $this->layout->main = View::make('testing');

        $objArray = array();
        $entry = new \stdClass();
        $entry->title = "testing";
        $objArray[] = $entry;
        $objArray[] = $entry;
        $objArray[] = $entry;
        $objArray[] = $entry;

        $this->layout->main->paginated = Paginator::make($objArray, count($objArray), '2');
        // var_dump($paginated->count()); // returns 4

        $array = array(
            array('title' => 'test'),
            array('title' => 'test'),
            array('title' => 'test'),
            array('title' => 'test')
        );

        $this->layout->main->arrayPaginated = Paginator::make($array, count($array), '2');
        // var_dump($arrayPaginated->count()); // returns 4
    }

}

查看文件

## view/testing

@foreach($paginated as $entry)
    {{$entry->title}}
@endforeach
{{$paginated->links()}} //outputs "testing" four times

@foreach($arrayPaginated as $entry)
    {{$entry['title']}}
@endforeach
{{$arrayPaginated->links()}} //outputs "test" four times

【问题讨论】:

  • 你的意思是只输出所有结果?
  • 您必须对数组进行切片以进行分页。 array_slice
  • 如果您使用Paginator::make,您只需将应该为特定页面而不是所有元素显示的元素作为数组传递。当然,如果您从数据库中获取数据,则不必这样做,但如果您有一些需要手动创建的复杂数据,则需要自己完成
  • 我需要自己构建分页部分吗?所以使用我的例子,我必须分解数组,所以它们每个只有 2 个条目?如果是这样,参数“每页的项目数”有什么用?

标签: php laravel laravel-4 pagination


【解决方案1】:

正如 cmets 中所指出的,您必须自己对数组进行切片,但我无法理解的一件事是第三个参数 “每页的项目数” 的用户是什么,如果你必须限制的话将条目传递给分页器之前的条目。

$objArray = array();
for($i = 0; $i < 4; $i++) {
    $entry = new \stdClass();
    $entry->title = "test {$i}";
    $objArray[] = $entry;
}

$perPage = 2;
$page = Input::get('page', 1); // Set default to 1 if nothing is passed
// ($page - 1) so that when page is 1 you are targetting the start of the array

$pagedData = array_slice($objArray, ($page - 1) * $perPage, $perPage);
$this->layout->main->paginated = Paginator::make($pagedData, count($objArray), $perPage);

视图文件中没有任何变化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-14
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 2017-03-28
    • 1970-01-01
    • 2012-08-02
    • 2019-03-26
    相关资源
    最近更新 更多