use*_*178 49 php pagination laravel-5
Laravel 4.2可以选择指定自定义视图,app/config/view.php
例如:
/*
|--------------------------------------------------------------------------
| Pagination View
|--------------------------------------------------------------------------
|
| This view will be used to render the pagination link output, and can
| be easily customized here to show any view you like. A clean view
| compatible with Twitter's Bootstrap is given to you by default.
|
*/
'pagination' => 'pagination_slider-alt'
Run Code Online (Sandbox Code Playgroud)
这至少在Laravel 5中已经消失了view.php
.
有没有办法在Laravel 5中复制这种行为?
Man*_*s D 112
在Laravel 5.3+中使用
$users->links('view.name')
Run Code Online (Sandbox Code Playgroud)
在Laravel 5.0 - 5.2而不是
$users->render()
Run Code Online (Sandbox Code Playgroud)
使用
@include('pagination.default', ['paginator' => $users])
Run Code Online (Sandbox Code Playgroud)
视图/分页/ default.blade.php
@if ($paginator->lastPage() > 1)
<ul class="pagination">
<li class="{{ ($paginator->currentPage() == 1) ? ' disabled' : '' }}">
<a href="{{ $paginator->url(1) }}">Previous</a>
</li>
@for ($i = 1; $i <= $paginator->lastPage(); $i++)
<li class="{{ ($paginator->currentPage() == $i) ? ' active' : '' }}">
<a href="{{ $paginator->url($i) }}">{{ $i }}</a>
</li>
@endfor
<li class="{{ ($paginator->currentPage() == $paginator->lastPage()) ? ' disabled' : '' }}">
<a href="{{ $paginator->url($paginator->currentPage()+1) }}" >Next</a>
</li>
</ul>
@endif
Run Code Online (Sandbox Code Playgroud)
而已.
如果您有很多页面,请使用此模板:
视图/分页/ limit_links.blade.php
<?php
// config
$link_limit = 7; // maximum number of links (a little bit inaccurate, but will be ok for now)
?>
@if ($paginator->lastPage() > 1)
<ul class="pagination">
<li class="{{ ($paginator->currentPage() == 1) ? ' disabled' : '' }}">
<a href="{{ $paginator->url(1) }}">First</a>
</li>
@for ($i = 1; $i <= $paginator->lastPage(); $i++)
<?php
$half_total_links = floor($link_limit / 2);
$from = $paginator->currentPage() - $half_total_links;
$to = $paginator->currentPage() + $half_total_links;
if ($paginator->currentPage() < $half_total_links) {
$to += $half_total_links - $paginator->currentPage();
}
if ($paginator->lastPage() - $paginator->currentPage() < $half_total_links) {
$from -= $half_total_links - ($paginator->lastPage() - $paginator->currentPage()) - 1;
}
?>
@if ($from < $i && $i < $to)
<li class="{{ ($paginator->currentPage() == $i) ? ' active' : '' }}">
<a href="{{ $paginator->url($i) }}">{{ $i }}</a>
</li>
@endif
@endfor
<li class="{{ ($paginator->currentPage() == $paginator->lastPage()) ? ' disabled' : '' }}">
<a href="{{ $paginator->url($paginator->lastPage()) }}">Last</a>
</li>
</ul>
@endif
Run Code Online (Sandbox Code Playgroud)
Joy*_*yal 30
对于Laravel 5.3(可能在其他5.X版本中),在您的视图文件夹中放置自定义分页代码.
资源/视图/分页/ default.blade.php
@if ($paginator->hasPages())
<ul class="pagination">
{{-- Previous Page Link --}}
@if ($paginator->onFirstPage())
<li class="disabled"><span>«</span></li>
@else
<li><a href="{{ $paginator->previousPageUrl() }}" rel="prev">«</a></li>
@endif
{{-- Pagination Elements --}}
@foreach ($elements as $element)
{{-- "Three Dots" Separator --}}
@if (is_string($element))
<li class="disabled"><span>{{ $element }}</span></li>
@endif
{{-- Array Of Links --}}
@if (is_array($element))
@foreach ($element as $page => $url)
@if ($page == $paginator->currentPage())
<li class="active"><span>{{ $page }}</span></li>
@else
<li><a href="{{ $url }}">{{ $page }}</a></li>
@endif
@endforeach
@endif
@endforeach
{{-- Next Page Link --}}
@if ($paginator->hasMorePages())
<li><a href="{{ $paginator->nextPageUrl() }}" rel="next">»</a></li>
@else
<li class="disabled"><span>»</span></li>
@endif
</ul>
@endif
Run Code Online (Sandbox Code Playgroud)
然后从主视图文件中调用此分页视图文件
{{ $posts->links('pagination.default') }}
Run Code Online (Sandbox Code Playgroud)
根据需要更新pagination/default.blade.php
Jav*_*olz 22
在Laravel 5中,自定义分页基于演示者(类)而不是视图.
在您的路由代码中假设您有
$users = Users::paginate(15);
Run Code Online (Sandbox Code Playgroud)
在L4中,您曾经在视图中执行过类似的操作:
$users->appends(['sort' => 'votes'])->links();
Run Code Online (Sandbox Code Playgroud)
在L5中你做了:
$users->appends(['sort' => 'votes'])->render();
Run Code Online (Sandbox Code Playgroud)
该render()
方法接受一个Illuminate\Contracts\Pagination\Presenter
实例.您可以创建实现该合同的自定义类并将其传递给该render()
方法.请注意,这Presenter
是一个接口,而不是一个类,因此您必须实现它,而不是扩展它.这就是你得到错误的原因.
或者,您可以扩展Laravel paginator(以便使用其分页逻辑),然后将现有的分页实例($users->...
)传递给扩展类构造函数.这确实是我根据Laravel提供的Bootstrap演示者创建自定义Zurb Foundation演示者所做的.它使用所有Laravel分页逻辑,仅覆盖渲染方法.
使用我的自定义演示者,我的视图如下所示:
with(new \Stolz\Laravel\Pagination($users->appends(['sort' => 'votes'])))->render();
Run Code Online (Sandbox Code Playgroud)
我定制的分页主持人是:
<?php namespace Stolz\Laravel;
use Illuminate\Pagination\BootstrapThreePresenter;
class Pagination extends BootstrapThreePresenter
{
/**
* Convert the URL window into Zurb Foundation HTML.
*
* @return string
*/
public function render()
{
if( ! $this->hasPages())
return '';
return sprintf(
'<ul class="pagination" aria-label="Pagination">%s %s %s</ul></div>',
$this->getPreviousButton(),
$this->getLinks(),
$this->getNextButton()
);
}
/**
* Get HTML wrapper for disabled text.
*
* @param string $text
* @return string
*/
protected function getDisabledTextWrapper($text)
{
return '<li class="unavailable" aria-disabled="true"><a href="javascript:void(0)">'.$text.'</a></li>';
}
/**
* Get HTML wrapper for active text.
*
* @param string $text
* @return string
*/
protected function getActivePageWrapper($text)
{
return '<li class="current"><a href="javascript:void(0)">'.$text.'</a></li>';
}
/**
* Get a pagination "dot" element.
*
* @return string
*/
protected function getDots()
{
return $this->getDisabledTextWrapper('…');
}
}
Run Code Online (Sandbox Code Playgroud)
use*_*178 13
而在Laravel 4.2中我会使用:
{{ $users->links('view.name') }}
Run Code Online (Sandbox Code Playgroud)
在Laravel 5中,您可以使用以下内容复制上述内容:
@include('view.name', ['object' => $users])
Run Code Online (Sandbox Code Playgroud)
现在,在包括视图,$object
将有分页可用的方法,如currentPage()
,lastPage()
,perPage()
,等.
您可以在http://laravel.com/docs/5.0/pagination查看所有可用的方法
在看来工作类似的5.5
links()
替换render()
为。[官方DOC]
更换
{{ $replies->links() }}
Run Code Online (Sandbox Code Playgroud)
与
{{ $replies->render("pagination::default") }}
Run Code Online (Sandbox Code Playgroud)
以下命令将在以下位置生成分页模板 resources/views/vendor/pagination
artisan vendor:publish --tag=laravel-pagination
artisan vendor:publish
Run Code Online (Sandbox Code Playgroud)
在任何视图文件(刀片文件)中,您都可以使用以下模板,例如:
{{ $replies->render("pagination::default") }}
{{ $replies->render("pagination::bootstrap-4") }}
{{ $replies->render("pagination::simple-bootstrap-4") }}
{{ $replies->render("pagination::semantic-ui") }}
如果有人需要,Laravel 5附带一个Bootstrap 4分页器.
首先创建一个新的服务提供者.
php artisan make:provider PaginationServiceProvider
Run Code Online (Sandbox Code Playgroud)
在该register
方法中,将一个闭包传递给Laravel的paginator类,该类创建并返回新的presenter.
<?php
namespace App\Providers;
use Illuminate\Pagination\BootstrapFourPresenter;
use Illuminate\Pagination\Paginator;
use Illuminate\Support\ServiceProvider;
class PaginationServiceProvider extends ServiceProvider
{
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot()
{
//
}
/**
* Register the application services.
*
* @return void
*/
public function register()
{
Paginator::presenter(function($paginator)
{
return new BootstrapFourPresenter($paginator);
});
}
}
Run Code Online (Sandbox Code Playgroud)
在中注册新的提供商 config/app.php
'providers' => [
//....
App\Providers\PaginationServiceProvider::class,
]
Run Code Online (Sandbox Code Playgroud)
我在Bootstrap 4 Pagination With Laravel中找到了这个例子
也许为时已晚,但我想分享另一个我创建的自定义分页模板,它创建了第一个/下一个和最后一个/上一个链接.当用户已经在第一页/最后一页时,它还隐藏链接.
(可选)您还可以确定链接的间隔(当前页面之前和之后的链接数)
用法示例:
@include('pagination', ['paginator' => $users])
Run Code Online (Sandbox Code Playgroud)
要么
@include('pagination', ['paginator' => $users, 'interval' => 5])
Run Code Online (Sandbox Code Playgroud)
这是要点:https://gist.github.com/xxnoobmanxx/33f6082d009c20f77499252b89c35dea
和代码:
@if (isset($paginator) && $paginator->lastPage() > 1)
<ul class="pagination">
<?php
$interval = isset($interval) ? abs(intval($interval)) : 3 ;
$from = $paginator->currentPage() - $interval;
if($from < 1){
$from = 1;
}
$to = $paginator->currentPage() + $interval;
if($to > $paginator->lastPage()){
$to = $paginator->lastPage();
}
?>
<!-- first/previous -->
@if($paginator->currentPage() > 1)
<li>
<a href="{{ $paginator->url(1) }}" aria-label="First">
<span aria-hidden="true">«</span>
</a>
</li>
<li>
<a href="{{ $paginator->url($paginator->currentPage() - 1) }}" aria-label="Previous">
<span aria-hidden="true">‹</span>
</a>
</li>
@endif
<!-- links -->
@for($i = $from; $i <= $to; $i++)
<?php
$isCurrentPage = $paginator->currentPage() == $i;
?>
<li class="{{ $isCurrentPage ? 'active' : '' }}">
<a href="{{ !$isCurrentPage ? $paginator->url($i) : '#' }}">
{{ $i }}
</a>
</li>
@endfor
<!-- next/last -->
@if($paginator->currentPage() < $paginator->lastPage())
<li>
<a href="{{ $paginator->url($paginator->currentPage() + 1) }}" aria-label="Next">
<span aria-hidden="true">›</span>
</a>
</li>
<li>
<a href="{{ $paginator->url($paginator->lastpage()) }}" aria-label="Last">
<span aria-hidden="true">»</span>
</a>
</li>
@endif
</ul>
@endif
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
120979 次 |
最近记录: |