前言:
解释我们将在本文中讨论的内容。
分页的使用将教会你如何一步一步地去做。
分页链接页和分页类可以自定义哪些属性?
寻呼类LinkPager如何扩展到我们需要的范围?
首先,让我们看看如何使用yii2附带的分页类。
1、控制器动作
使用yii 数据分页;$ query=article : find()-其中([' status '=1]);$countQuery=克隆$ query$pages=新分页([' total count '=$ count query-count()]);$ models=$ query-offset($ page-offset)-limit($ page-limit)-all();返回$this-render('index ',[ 'models'=$models,' pages'=$pages,]);2、视图
使用yii widgets LinkPager//循环显示foreach ($ models)的数据作为$ model {//.}//显示页码Echo Link page :3360 Widget([' Pagination '=$ Pages,])代码基本可以完全复制,只能修改部分数据,相信大部分人都能理解。
让我们看看第二步。独立分页类可以定义哪些属性?
让我们从LinkPager组件开始。
那个。分页参数是必需的。这是我们分页类的一个实例。
默认的分页类如下所示。
上下按钮和10个按钮。
首先,我们把上下页的按钮换成中文。
?=link pager : widget([' pagination '=$ pages,'下一页标签'='下一页',' prevPageLabel '='上一页',]);如果不想显示上下页,可以将上一页标签和下一页标签设置为false。
?=linkpage : widget([' pagination '=$ pages,' nextPageLabel'=false,' prevPageLabel '=false,]);默认情况下,不显示第一页和最后一页,这可以根据需要进行设置。
?=link page : widget([' pagination '=$ pages,' first page label '=' first page label ',' lastPageLabel'=' last page ',]);如果您的数据太小,不足2页,默认情况下不会显示分页。如果需要,请设置hideOnSinglePage=false。
?=linkpage : widget([' pagination '=$ pages,' hideOnSinglePage '=false,]);默认页码是10页,您可以将maxButtonCount设置为要显示的页数。
?=linkpage : widget([' pagination '=$ pages,' maxButtonCount'=5,]);有些人不喜欢默认的样式,但想在页面上自带样式。可以设置选项,别忘了自己实现pre、next、disabled等样式。
?=linkpage : widget([' pagination '=$ pages,' options '=[' class '=' m-pagination '],]);接下来,让我们谈谈分页组件。
默认寻呼路由如下。让我们看看我们能做什么。
/控制器/动作?page=2per-page=20
首先,我们必须指定totalCount。没有这个参数,分页就无法实现。
$pages=新分页([ 'totalCount'=$totalCount,]);默认页数为20,您可以根据需要设置页面大小。
$pages=新分页([ 'totalCount'=$totalCount,' pageSize'=5,]);从上面的分页路径中,我们可以看到每页的默认页数是每页。如果不想显示此参数,只需设置pageSizeParam=false。
$pages=新分页([ 'totalCount'=$totalCount,' pageSizeParam'=false,]);我们还可以看到默认页面依赖于参数页面。如果要将此参数更改为p,只需设置pageparam=p。
$pages=新分页([ 'totalCount'=$totalCount,' pageParam'='p ',]);如果首页有你的分页符,我相信你肯定想要/?P=1而不是/site/index?P=1,我们来看看如何隐藏路线。
$pages=新分页([ 'totalCount'=$totalCount,' route'=false,]);您可能会发现分页类Pagination有一个错误。如果我们只有一页数据,但是在地址栏手动更改page=20,那么page=1的数据也会显示出来?当然,这在大多数接口API中都是很无聊的。不过,这不是bug,而是友好的验证。设置validatePage=false可以避免这个问题。
$pages=新分页([ 'totalCount'=$totalCount,' validatePage'=false,]);最后,我们整点新花样,扩展下他这个自带的分页!别一看见扩展俩字下面的就直接不看了,只有自己学会扩展了,以后才能越来越强!怎么个扩展法呢?我们把分页组件改为上下页那种,具体参考下图做个对比吧
接下来我们就来看看右侧的效果具体是如何通过扩展链接寻呼机组件实现的。源码分享给大家,喜欢的拿去自己研究即可。
?phpnamespace前端组件;使用yii 小部件链接寻呼机使用yii 助手 Html类传呼机扩展了LinkPager { public $ previpagelabel=' I class=' fa fa-angle-left '/I ';public $ next page label=' I class=' fa fa-angle-right '/I ';public $currentCountPageLabel='第{currentPage}页/共{countPage}页;public $currentCountPageClass='页码;public $ hideOnSinglePage=false公共函数init(){ parent : init();} public function run(){ $ page count=$ this-pagination-getpage count();if($ page count 2 $ this-hideosingpage){ return " ";} $ button=[];$ CurrentPage=$ this-page-GetPage();//prev页if($ this-prev页标签!==false){ if($ page=$ CurrentPage-1)0){ $ page=0;} $ buttons[]=$ this-renderPageButton($ this-previpagelabel,$page,$ this-previpagecsclass,$currentPage=0,false);} //当前页面/计数页面if ($this-currentCountPageLabel!==false $页数){ $ currentCountPageLabel=str _ replace([' { currentPage } ',' {countPage}'],[$currentPage 1,$pageCount],$ this-currentCountPageLabel);$ buttons[]=html :标记(' span ',$currentCountPageLabel,array(' class '=$ this-currentCountPageClass));} //下一页if ($this-nextPageLabel!==false){ if(($ page=$ CurrentPage 1)=$ PageCount-1){ $ page=$ PageCount-1;} $ buttons[]=$ this-renderPageButton($ this-nextPageLabel,$page,$ this-nextpagecsclass,$currentPage=$pageCount - 1,false);}返回HTMl :3360标记(' nav '、inter decade(' n '、$buttons)、$ this-options);}受保护的函数renderPageButton($label,$page,$class,$disabled,$ active){ $ options=[' class '=empty($ class)?$ this-page CSSCclass : $ class];if($ active){ html : addcsclass($ options,$ this-active page csclass);} if($ disabled){ return false;} $ LinkOptions=$ this-LinkOptions;$ LinkOptions=$ Options $ LinkOptions['数据页']=$ page;返回html :3360 a($ label,$ this-paging-createUrl($ page),$ linkOptions);}}如此一来,我们调用传呼机实现分页效果像下面这样即可
使用前端组件 MLinkPager?=mlink page : Widget([' pagination '=$ pages,]);当然,自己扩展的分页组建重在教大家如何去实现分页扩展,难免会有很多问题,如果你有好的意见或者方法,直接给我留言,咱们共同沟通交流。