vipertecpro/laravel-pretty-pagination

Laravel SEO友好分页路由。

dev-main 2023-07-18 14:52 UTC

This package is auto-updated.

Last update: 2024-09-18 17:27:37 UTC


README

Latest Stable Version Total Downloads Build Status Scrutinizer Code Quality Code Intelligence Status License

此包添加了paginate路由方法,支持通过自定义路由进行分页,而不是查询字符串。这也允许轻松翻译分页路由,例如:/news/page/2/nieuws/pagina/2

安装

通过Composer

composer require vipertecpro/laravel-pretty-pagination

首先在您的应用程序中注册服务提供者和外观。

// config/app.php

'providers' => [
    ...
    'Vipertecpro\PaginateRoute\PaginateRouteServiceProvider',
];

'aliases' => [
    ...
    'PaginateRoute' => 'Vipertecpro\PaginateRoute\PaginateRouteFacade',
];

然后在App\Providers\RouteServiceProvider::boot()中注册宏。

// app/Providers/RouteServiceProvider.php

use Vipertecpro\PaginateRoute\PaginateRouteFacade as PaginateRoute;

// ...

public function boot()
{
    PaginateRoute::registerMacros(); // Add this line

    parent::boot();
}

用法

paginate路由宏将为您注册两个路由。

// app/Http/routes.php

// Generates /users & /users/page/{page}
Route::paginate('users', 'UsersController@index');

在路由的操作中,您可以直接使用Laravel的常规分页方法。

// app/Http/Controllers/UsersController.php

public function index()
{
    return view('users.index', ['users' => \App\User::simplePaginate(5)]);
}

如果您想自定义或添加“page”URL段翻译,可以发布语言文件。

php artisan vendor:publish --provider="Vipertecpro\PaginateRoute\PaginateRouteServiceProvider"

生成URL

由于Laravel的分页器URL仍将使用查询字符串,PaginateRoute有自己的URL生成器和页面辅助函数。


@if(PaginateRoute::hasPreviousPage())
  <a href="{{ PaginateRoute::previousPageUrl() }}">Previous</a>
@endif

@if(PaginateRoute::hasNextPage($users))
  <a href="{{ PaginateRoute::nextPageUrl($users) }}">Next</a>
@endif

nextPage函数需要一个分页器实例作为参数,以便确定是否有更多记录。

/**
 * @param  \Illuminate\Contracts\Pagination\Paginator $paginator
 * @return int|null
 */
public function nextPage(Paginator $paginator)
/**
 * @param  \Illuminate\Contracts\Pagination\Paginator $paginator
 * @return bool
 */
public function hasNextPage(Paginator $paginator)
/**
 * @param  \Illuminate\Contracts\Pagination\Paginator $paginator
 * @return string|null
 */
public function nextPageUrl(Paginator $paginator)
/**
 * @return int|null
 */
public function previousPage()
/**
 * @return bool
 */
public function hasPreviousPage()
/**
 * @param  bool $full
 * @return string|null
 */
public function previousPageUrl($full = false)
/**
 * @param int  $page
 * @param bool $full
 * @return string
 */
public function pageUrl($page, $full = false)

如果$full为true,第一页将是一个完全限定的URL。例如:/users/page/1而不是仅仅/users(这是默认值)。

要检索非当前路由的分页特定页面的URL,可以使用addPageQuery函数。

/**
 * @param string $url
 * @param int $page
 * @param bool $full
 * @return string
 */
public function addPageQuery($url, $page, $full = false)

您还可以检索包含所有可用URL的数组。这些可以作为带有页码的纯HTML列表渲染。请注意,这些函数需要一个LengthAwarePaginator

/**
 * @param  \Illuminate\Contracts\Pagination\LengthAwarePaginator $paginator
 * @param  bool $full
 * @return array
 */
public function allUrls(LengthAwarePaginator $paginator, $full = false)
/**
 * @param  \Illuminate\Contracts\Pagination\LengthAwarePaginator $paginator
 * @param  bool $full
 * @param  string $class
 * @param  bool $additionalLinks
 * @return string
 */
public function renderPageList(LengthAwarePaginator $paginator, $full = false, $class = null, $additionalLinks = false)
/**
 * Example : {!! PaginateRoute::renderPageList($items,true,'pagination',true) !!}
 */
<!-- Example output: -->
<ul class="pagination">
    <li><a href="http://example.com/news">1</a></li>
    <li><a href="http://example.com/news/page/2">2</a></li>
    <li class="active"><a href="http://example.com/news/page/3">3</a></li>
    <li><a href="http://example.com/news/page/4">4</a></li>
    <li><a href="http://example.com/news/page/4">&raquo;</a></li>
</ul>

您还可以生成标记上一页和下一页的链接标签以利于SEO。请注意,这些函数需要一个LengthAwarePaginator

/**
 * @param  \Illuminate\Contracts\Pagination\LengthAwarePaginator $paginator
 * @param  bool $full
 * @return string
 */
public function renderRelLinks(LengthAwarePaginator $paginator, $full = false)
<!-- Example output: -->
<link rel="prev" href="http://example.com/news/page/2" />
<link rel="next" href="http://example.com/news/page/4" />

测试

该包包含一些使用Orchestra设置的集成/烟测试,可以通过phpunit运行这些测试。

$ phpunit

即将推出

  • 支持Bootstrap 4.*的分页渲染。

贡献

有关详细信息,请参阅CONTRIBUTING

安全性

如果您发现任何与安全性相关的问题,请通过电子邮件vipertecpro@gmail.com报告,而不是使用问题跟踪器。

鸣谢

许可

MIT许可证(MIT)。有关更多信息,请参阅许可文件