基于Laravel5.5 在项目实施过程中,需要对从接口中获取的数据(或者通过搜索工具查询出来的数据)进行分页
一、创建手动分页
在laravel自带的分页中,一般是通过数据库查询访问paginate()方法来达到分页的效果 ,like this:
class IndexControllerextends Controller
{ publicfunctionindex() { $person = DB::table('person')->paginate(15); return view('index.pagTest',['person'=> $person]); } }
查看框架的分页源代码
#vender/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php
/** * Paginate the given query. * * @param int $perPage * @param array $columns * @param string $pageName * @param int|null $page * @return \Illuminate\Contracts\Pagination\LengthAwarePaginator * * @throws \InvalidArgumentException */ public function paginate($perPage = null, $columns = ['*'], $pageName = 'page', $page = null) { $page = $page "htmlcode"><"htmlcode">#每页显示记录 $prePage = $prepage; //$total =count($data); $allitem = $prepage *100; $total > $allitem "REQUEST_URI"]; if(strpos($url,'&page')) $url=str_replace('&page='.$request->page, '',$url); # $data must be array $item =array_slice($data,($current_page-1)*$prePage,$prePage); $paginator = new LengthAwarePaginator($item,$total,$prePage,$current_page,[ 'path'=>$url, 'pageName'=>'page' ]); return $paginator; }($data 为需要进行分页的数据)
说明:
1、在考虑到代码的复用性,我将分页代码封装到app/Controllers/Controller.php中的一个方法里面,这样在其他控制器里只需要$this->setPage(Request $request,$data,$prepage,$total) 就能使用了,(前提:其他控制器继承了Controller.php)
2、分页的URL,因为我的项目的url一定会携带一个kw参数,所以我直接用str_replace替换"&page",如果是存在不携参分页的话,需要判断,到底是""还是"&page"。(url的逻辑可以自己写)
#分页 php
$paginator = $this->setPage2($request,$data,25,$sum); $data =$paginator->toArray()['data'];在模板中:{{$paginator->render()}}即能输出分页HTML,样式如下:
二、自定义分页样式
在实际开发中,不希望用户在浏览时直接浏览最后几页,只想用户从前往后依次的浏览,如百度搜索分页,这时候,就想修改分页的样式,经过一个下午的奋战,贴出解决过程
在上一环节中,手动创建了分页,了解HTML的模板生成是render()方法,
#\Illuminate\Contracts\Pagination\LengthAwarePaginator
/** * Render the paginator using the given view. * * @param string|null $view * @param array $data * @return \Illuminate\Support\HtmlString */ public function render($view = null, $data = []) { return new HtmlString(static::viewFactory()->make($view "htmlcode"><"<ul class='pagination'>%s %s %s</ul>", $this->pre_page(), $this->pages_num(), $this->next_page() ); } } #上一页 public function pre_page(){ if($this->currentPage == 1){ //dd($this->currentPage); return "<li class='disabled'><span>《</span></li>"; }else{ $url = $this->path."&page=".($this->currentPage-1); //dd($url); return "<li><a href=".$url." rel="external nofollow" rel='prev'>《</a></li>"; } } #页码 public function pages_num(){ $pages = ''; if($this->currentPage <= 6){ for($i = 1; $i <= $this->de_page; $i++){ if($this->currentPage == $i){ $pages .= "<li class='active'><a href=".$this->path." rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" &page=".$i.">".$i."</a></li>"; }else{ $pages .="<li><a href=".$this->path." rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" &page=".$i.">".$i."</a></li>"; } } }else{ #当前页前边部分 for($i = 5; $i >=1 ; $i--){ $url =$this->currentPage-$i; $pages .= "<li><a href=".$this->path." rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" &page=".$url.">".$url."</a></li>"; } #当前页 $pages .= "<li class='active'><span>".$this->currentPage."</span></li>"; #当前页后边部分 for($i = 1;$i < 5; $i++ ){ $nowpage =$this->currentPage+$i; $pages .= "<li><a href=".$this->path." rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" &page=".$nowpage.">".$nowpage."</a></li>"; } } return $pages; } #下一页 public function next_page(){ if($this->currentPage < $this->total){ $page =$this->currentPage+1; return "<li><a href=".$this->path." rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" &page=".$page." rel='next'><span>》</span></a></li>"; }else{ return "<li class='disabled'><span>》</span></li>"; } } }我选择的方法是自定义新的方法生成HTML模板,模板中通过:{{$paginator->newrender()}}输出HTML
如果选择重构render()方法,只需要将上面的newrender()方法做一些小变动
public function render($view=null,$data=[]){ if($this->hasPages()) { return sprintf("<ul class='pagination'>%s %s %s</ul>", $this->pre_page(), $this->pages_num(), $this->next_page() ); } }模板中通过:{{$paginator->render()}}输出HTML
最终效果如图:
注意:自定义HTML后因为新建了一个类继承了LengthAwarePaginator类,需要将第一步手动分页的方法中new LengthAwarePaginator 修改为 new Newpage 参数不变。
以上这篇Laravel5.5 手动分页和自定义分页样式的简单实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
DDR爱好者之家 Design By 杰米
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
更新日志
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]