详解laravel中blade模板带条件分页

所属分类: 网络编程 / PHP编程 阅读数: 794
收藏 0 赞 0 分享

Blade模板简介

问: 什么是Blade模板?

答: Blade模板是Laravel提供一个既简单又强大的模板引擎;
和其他流行的PHP模板引擎不一样,他并不限制你在视图里使用原生PHP代码;
所有Blade视图页面都将被编译成原生的PHP代码并缓存起来,除非你的模板文件被修改,否则不会重新编译。
而这些都意味着Blade不会给我们增加任何负担。

在其他框架中,分页可能是件非常痛苦的事,Laravel 让这件事变得简单、易于上手。Laravel 的分页器与查询构建器和 Eloquent ORM 集成在一起,并开箱提供方便的、易于使用的、基于数据库结果集的分页。分页器生成的 HTML 兼容 Bootstrap CSS 框架。

基本使用

基于查询构建器进行分页 有多种方式实现分页功能,最简单的方式就是使用查询构建器或 Eloquent 查询提供的 paginate 方法。该方法基于当前用户查看页自动设置合适的偏移(offset)和限制(limit),直白点说就是页码和每页显示数量。默认情况下,当前页通过 HTTP 请求查询字符串参数 page 的值判断。当然,该值由 Laravel 自动检测,然后自动插入分页器生成的链接中。

让我们先来看看如何在查询中调用 paginate 方法。在本例中,传递给 paginate 的唯一参数就是你每页想要显示的数目,这里我们指定每页显示 15 个:

<?php

namespace App\Http\Controllers;

use Illuminate\Support\Facades\DB;
use App\Http\Controllers\Controller;

class UserController extends Controller
{
 /**
 * 显示应用中的所有用户
 *
 * @return Response
 */
 public function index()
 {
 $users = DB::table('users')->paginate(15);
 return view('user.index', ['users' => $users]);
 }
}

注:目前,使用 groupBy 的分页操作不能被 Laravel 有效执行,如果你需要在分页结果中使用 groupBy,推荐你手动查询数据库然后创建分页器。

简单分页

如果你只需要在分页视图中简单的显示“下一页”和“上一页”链接,可以使用 simplePaginate 方法来执行一个更加高效的查询。在渲染包含大数据集的视图且不需要显示每个页码时这一功能非常有用:

$users = DB::table('users')->simplePaginate(15);

显示分页结果

当调用 paginate 方法时,你将获取Illuminate\Pagination\LengthAwarePaginator 实例,而调用方法simplePaginate 时,将会获取 Illuminate\Pagination\Paginator 实例。这些对象提供相关方法描述这些结果集,除了这些辅助函数外,分页器实例本身就是迭代器,可以像数组一样对其进行循环调用。所以,获取到结果后,可以按如下方式使用 Blade 显示这些结果并渲染页面链接:

<div class="container">
 @foreach ($users as $user)
 {{ $user->name }}
 @endforeach
</div>

{{ $users->links() }}

links 方法将会将结果集中的其它页面链接渲染出来。每个链接已经包含了 page 查询字符串变量。记住,render 方法生成的 HTML 兼容 Bootstrap CSS 框架。

带条件的分页

public function index()
{
 $type = $this->request->get('type',1);
 $users = DB::table('users')->where(function ($query) use ($type) {
 if($type) {
  $query->where('type', $type);
 }
 })->paginate(15);
 return view('user.index', ['users' => $users]);
}
]

<div class="container">
 @foreach ($users as $user)
 {{ $user->name }}
 @endforeach
</div>

{!! $list->appends(['type'=>$type])->links() !!}

知识点补充:

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' , '填充的文本占位')

第二种填充(文本 or html)

 @section('title')
 // 填充的占位
 @endsection

1.4 组件、插槽

1、定义组件

// 路径:Laravel/resources/views/component.blade.php

<div class='component'>
 <!-- $title,$content 变量实际上就是预定义的插槽 -->
 <div class='title'>{{ $title }}</div>
 <div class='content'>{{ $content }}</div>
</div>

2、使用组件

// 路径:Laravel/resources/views/test.blade.php

@component('component')

 @slot('title')
 组件标题
 @endsolt

 @slot('content')
 组件内容
 @endslot

@endcomponent

2.数据显示

2.1 转义输出

{{ $name }}

2.2 未转义输出

{!! $name !!}

2.3 打印内容并带一个默认值

{{ $var or 'default' }}

2.4 原格式输出

// 第一种(适合量不多):
 @{{ name }}

// 第二种(适合量多):
 @verbatim
 {{ name }}
 {{ sex }}
 {{ age }}
 @endverbatim

3. 流程控制

3.1 for

@for ($i = 0; $i < 10; ++$i)
 {{ $i }} <br />
@endfor

3.2 foreach

@foreach ($data as $k => $v)
 {{ $k }} <br />
@endforeach

3.3 forelse

@foreach ($data as $k => $v)
 // $data有值
 {{ $k }} <br />
@empty
 // $data没有值
@endforeach

3.4 if

@if(condition) - if开始

@else - else不带条件

@elseif(condition) - else带条件

@endif - 结束if

3.5 while

@while(condition) - while循环开始

@endwhile - while循环结束

3.6 unless

@unless(condition) - unless开始
@endunless - unless结束

4. 使用原生 PHP

@php 
 // 里面写php代码
 echo "使用原生 PHP";
@endphp

5. 包含子视图

被包含的子视图可以引用父视图定义的所有变量。
你可以传递额外的数据到子视图

定义父视图 parent.blade.php,并包含子视图 child.blade.php,且传入额外数据

<!-- 包含子视图 -->
@include("child" , [
"other" => "额外数据"
])

总结

更多精彩内容其他人还在看

CI框架实现创建自定义类库的方法

这篇文章主要介绍了CI框架实现创建自定义类库的方法,结合实例形式分析了CI框架创建自定义类库的相关原理、步骤、实现方法与操作注意事项,需要的朋友可以参考下
收藏 0 赞 0 分享

Yii2.0 RESTful API 基础配置教程详解

这篇文章主要介绍了Yii2.0 RESTful API 基础配置教程,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

CI框架附属类用法分析

这篇文章主要介绍了CI框架附属类用法,结合实例形式分析了CI框架附属类相关资源访问操作技巧,需要的朋友可以参考下
收藏 0 赞 0 分享

CI框架网页缓存简单用法分析

这篇文章主要介绍了CI框架网页缓存简单用法,结合实例形式分析了CI框架网页缓存的原理,以及开启缓存、删除缓存等操作技巧,需要的朋友可以参考下
收藏 0 赞 0 分享

php实现的PDO异常处理操作分析

这篇文章主要介绍了php实现的PDO异常处理操作,结合实例形式分析了pdo异常处理的相关原理、用法及操作注意事项,需要的朋友可以参考下
收藏 0 赞 0 分享

php PDO属性设置与操作方法分析

这篇文章主要介绍了php PDO属性设置与操作方法,结合实例形式分析了php pdo常见属性功能及相关的设置、获取操作技巧,需要的朋友可以参考下
收藏 0 赞 0 分享

PHP抽象类基本用法示例

这篇文章主要介绍了PHP抽象类基本用法,结合实例形式分析了php抽象类的概念、原理、定义、使用方法及相关操作注意事项,代码注释包含较为详尽的说明信息,需要的朋友可以参考下
收藏 0 赞 0 分享

PHP面向对象程序设计继承用法简单示例

这篇文章主要介绍了PHP面向对象程序设计继承用法,结合具体实例形式分析了php面向对象程序设计中继承的相关概念、原理、使用技巧与相关操作注意事项,需要的朋友可以参考下
收藏 0 赞 0 分享

PHP实现函数内修改外部变量值的方法示例

这篇文章主要介绍了PHP实现函数内修改外部变量值的方法,涉及php全局变量、传值调用、引用等相关操作技巧,需要的朋友可以参考下
收藏 0 赞 0 分享

PHP命名空间简单用法示例

这篇文章主要介绍了PHP命名空间简单用法,结合具体实例形式分析了php命名空间的简单定义与使用相关操作技巧,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多