在我的 Laravel (5.7) 控制器中,我已将分页+“每侧导航”设置为 2 个项目。然而,这在我看来是行不通的。我收到的项目比 2 个多得多,这导致我的窗口在小型移动设备上破裂。
造成这种情况的原因是什么以及如何解决?我的意思是,我可以用 CSS 修复它,但我想以正确的方式修复它。
我在控制器中的代码:
public function index(Request $request)
{
$type = 'all';
if ($request->has('type')) {
if ($request->type == 'all') {
$materials = Material::paginate(10)->onEachSide(2);
} else {
$type = $request->type;
$materials = Material::where('type', $type)->paginate(10)->onEachSide(2);
}
} else {
$materials = Material::paginate(10)->onEachSide(2);
}
$stock = array(
'enkelzitKajaks' => Material::where('type', 'Enkelzitkajak')->count(),
'dubbelzitKajaks' => Material::where('type', 'Dubbelzitkajak')->count(),
'canadeseKanos' => Material::where('type', 'Canadese kano')->count(),
'langePeddels' => Material::where('type', 'Lange peddel')->count(),
'kortePeddels' => Material::where('type', 'Korte peddel')->count(),
'tonnetjes' => Material::where('type', 'Tonnetje')->count(),
'zwemvesten' => Material::where('type', 'Zwemvest')->count()
);
return view('materials.index')->with('materials', $materials)->with('stock', $stock)->with('type', $type);
}
我在视图中的代码:
<section class="pagination">
<div class="container">
<div class="row">
<div class="col-12">
{{ $materials->links() }}
</div>
</div>
<hr>
</div>
</section>
我在小型设备上的视图截图:
首先 Laravel 分页 onEachSide(x) 除了中间部分之外还有 前导和尾部部分。前两页,尾两页。
您正在尝试使用 onEachSide(2) 和第 6 页。所以现在我们尝试看看分页的逻辑。
在 laravel 中使用 onEachSide(2) 时会显示这样的分页
领先双页 | 当前页 - 2 | 当前页 | 当前页+2 | 拖尾双页 |
---|---|---|---|---|
1,2 | 4,5 | 6 | 7,8 | 22,23 |
然后考虑分页的第一部分,它需要显示第 1 页到第 8 页,而不显示第 3 页。 它需要是一个带点的显示按钮,而不是第三页。
然后,它将显示原始的第 3 页码,而不是显示第三页的带点的按钮。
第 6 页之后,laravel 分页 onEachSide(2) 将正常工作
你应该在刀片中使用
onEachSide
这个。
从控制器上取下
onEachSide
。当您创建 API 时,在控制器中使用 onEachSide
将会很有帮助。而是在刀片文件中使用 onEachSide
。
<section class="pagination">
<div class="container">
<div class="row">
<div class="col-12">
{{ $materials->onEachSide(1)->links() }}
</div>
</div>
<hr>
</div>
</section>
用户可以通过更改
onEachSide
中的参数来管理链接窗口
https://laravel.com/docs/8.x/pagination# adjustment-the-pagination-link-window
您可以在移动设备上尝试
class="pagination pagination-sm"
这是因为 Laravel 5.* 版本中的一个错误。如果您不想升级您的应用程序,您应该手动更改一些代码:
供应商/laravel/framework/src/Illuminate/Pagination/UrlWindow.php
正如下面泰勒·奥特韦尔的链接中提到和讨论的那样。 讨论 Laravel 5 中的各个方面的错误。*
Laravel 10 在这里。
感谢耶和华的帮助,在四处寻找后,对我有用的是手动路线。
调用
$paginatorVariable->links();
时,可以选择将其传递为视图。
例如
$paginatorVariable->links('thePaginatorView');
为此,请在 Laravel 项目的资源文件夹中创建一个视图:
MyLaravelProject/resources/views/
因此以类似以下内容结尾:
MyLaravelProject/resources/views/thePaginatorView.blade.php
您可以在
文件夹中看到现成的示例。vendor/laravel/framework/src/illuminate/Pagination/resources/
、default.blade.php
和semantic-ui.blade.php
文件是如何构建视图的相对有效的示例。tailwind.blade.php
视图本身将被“注入”一个
$paginator
变量和一个 $elements
变量,其中包含每个“页面元素”(页码和 url)。
因此,如果您使用
$myPaginatorVar->links('myView');
,则在 myView.blade.php
文件内,您将拥有 $paginator
变量,该变量将等于 $myPaginatorVar
。还有一个 $elements
变量,它将等于分页器变量的项目数组。
因此,通过
$paginator->currentPage()
函数调用,您可以检查页码并与元素进行比较,方法是减去它距离索引有多远,或者通过简单的 if-else 语句,然后根据需要跳过或填充。
如果您不想硬编码固定数量,或者需要“模仿”之前和之后的值,则可以将
['key' => value]
数组传递给 links 方法调用,以便在自定义分页器视图中具有此类值,如文档中所示。
例如
$myPaginatorVar->links('myView', ['PagesBeforeAndAfter' => 2]);
您甚至可以添加多个不同的值。例如:
$myPaginatorVar->links('myView', ['showFirstPageWhenNotOnIt' => false,
'pagesAfterFirstPage' => 0,
'pagesBeforeLastPage' => 3,
'showLastPageWhenNotOnIt' => true,
'pagesBeforeAndAfterCurrentPage' => 2]);
并用它们与
$paginator->firstItem()
、$paginator->lastItem()
、$paginator->lastPage()
、$paginator->currentPage()
等进行比较...
以下是在分页器视图中使用的可用函数:https://laravel.com/docs/10.x/pagination#paginator-instance-methods
可以选择使用
命令执行同样的操作来“覆盖”默认视图,如here所示(或者至少这是我可以理解的)。不过我发现常规查看方式更直接。artisan vendor:publish