Laravel5.5 手动分页和自定义分页样式的简单实现(2)
如果要实现手动分页,只需要使用这个构造方法,给定参数,就能达到分页的效果
贴代码:
public function setPage2(Request $request,$data,$prepage,$total){
#每页显示记录 $prePage = $prepage; //$total =count($data); $allitem = $prepage *100; $total > $allitem ? $total = $allitem : $total; if(isset($request->page)){ $current_page =intval($request->page); $current_page =$current_page<=0?1:$current_page; }else{ $current_page = 1; } #url操作 $url = $url='http://'.$_SERVER['SERVER_NAME'].$_SERVER["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"还是"&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 ?: static::$defaultView, array_merge($data, [ 'paginator' => $this, 'elements' => $this->elements(), ]))->render()); }
内容版权声明:除非注明,否则皆为本站原创文章。