详解laravel中blade模板带条件分页
Blade模板简介
问:什么是Blade模板?
答:Blade模板是Laravel提供一个既简单又强大的模板引擎;
和其他流行的PHP模板引擎不一样,他并不限制你在视图里使用原生PHP代码;
所有Blade视图页面都将被编译成原生的PHP代码并缓存起来,除非你的模板文件被修改,否则不会重新编译。
而这些都意味着Blade不会给我们增加任何负担。
在其他框架中,分页可能是件非常痛苦的事,Laravel让这件事变得简单、易于上手。Laravel的分页器与查询构建器和EloquentORM集成在一起,并开箱提供方便的、易于使用的、基于数据库结果集的分页。分页器生成的HTML兼容BootstrapCSS框架。
基本使用
基于查询构建器进行分页有多种方式实现分页功能,最简单的方式就是使用查询构建器或Eloquent查询提供的paginate方法。该方法基于当前用户查看页自动设置合适的偏移(offset)和限制(limit),直白点说就是页码和每页显示数量。默认情况下,当前页通过HTTP请求查询字符串参数page的值判断。当然,该值由Laravel自动检测,然后自动插入分页器生成的链接中。
让我们先来看看如何在查询中调用paginate方法。在本例中,传递给paginate的唯一参数就是你每页想要显示的数目,这里我们指定每页显示15个:
paginate(15); returnview('user.index',['users'=>$users]); } }
注:目前,使用groupBy的分页操作不能被Laravel有效执行,如果你需要在分页结果中使用groupBy,推荐你手动查询数据库然后创建分页器。
简单分页
如果你只需要在分页视图中简单的显示“下一页”和“上一页”链接,可以使用simplePaginate方法来执行一个更加高效的查询。在渲染包含大数据集的视图且不需要显示每个页码时这一功能非常有用:
$users=DB::table('users')->simplePaginate(15);
显示分页结果
当调用paginate方法时,你将获取Illuminate\Pagination\LengthAwarePaginator实例,而调用方法simplePaginate时,将会获取Illuminate\Pagination\Paginator实例。这些对象提供相关方法描述这些结果集,除了这些辅助函数外,分页器实例本身就是迭代器,可以像数组一样对其进行循环调用。所以,获取到结果后,可以按如下方式使用Blade显示这些结果并渲染页面链接:
@foreach($usersas$user) {{$user->name}} @endforeach
links方法将会将结果集中的其它页面链接渲染出来。每个链接已经包含了page查询字符串变量。记住,render方法生成的HTML兼容BootstrapCSS框架。
带条件的分页
publicfunctionindex() { $type=$this->request->get('type',1); $users=DB::table('users')->where(function($query)use($type){ if($type){ $query->where('type',$type); } })->paginate(15); returnview('user.index',['users'=>$users]); } ]@foreach($usersas$user) {{$user->name}} @endforeach
知识点补充:
Laravel框架中Blade模板的用法
1.继承、片段、占位、组件、插槽
1.1继承
1、定义父模板Laravel/resources/views/base.blade.php
2、子模板继承@extends('base')
1.2片段
1、父模板定义片段
@section('part') //中间内容即使是一个片段 @show
2、子模板填充片段
@section('part') //片段填充内容(后台的表单、列表等) @endsection
1.3占位
1、父模板占位
@yield('title')
2、子模板填充占位
第一种填充(文本):
@section('title','填充的文本占位')
第二种填充(文本orhtml)
@section('title') //填充的占位 @endsection
1.4组件、插槽
1、定义组件
//路径:Laravel/resources/views/component.blade.php{{$title}}