迅睿列表页分页,我踩过的三个参数坑

· 迅睿CMS · 阅读 13
摘要

列表页分页做不出来,最典型的表现是:第一页正常,点第 2 页还是第一页的内容,或者干脆 404。我连着遇到三回,每次原因都不一样,记一下。 page 参数没传进标签里 迅睿的分页标签长这样(我按记忆写的,参数顺序以你版本实际为准): {dr

列表页分页做不出来,最典型的表现是:第一页正常,点第 2 页还是第一页的内容,或者干脆 404。我连着遇到三回,每次原因都不一样,记一下。

page 参数没传进标签里

迅睿的分页标签长这样(我按记忆写的,参数顺序以你版本实际为准):

{dr_page page=$page url="/list/{catid}/{page}.html"}

关键是 page=$page 这一段。控制器里得先把当前页码拿出来赋给模板变量,不然标签永远按第 1 页算。我当时漏了这句,表现就是「页码跳了,内容没动」。

控制器里大概是这个意思:

$page = (int) $this->input->get( 'page' );
$page = $page > 0 ? $page : 1;
$this->template->assign( 'page', $page );

方法名和写法我不敢保证百分百准,迅睿不同版本改动不小,建议对着你自己项目里的控制器抄,别直接粘我这段。

伪静态规则里没有 {page} 这一段

分页地址如果配成 /list/1/2.html 这种形式,nginx 侧必须有一条能匹配的规则。少了它,所有分页 URL 都落到列表首页,看起来像「分页失效」,其实是被重写吃掉了。

这条我很确定:URL 里出现几个层级,rewrite 规则就得写几个占位。少一层都不行。

总数不对,页码就崩

分页标签算总页数靠的是一个 total 值。如果你的筛选条件(比如某个字段等于某个值)写在了控制器里,而 total 查询没带上同样的条件,页码会出现「总共 50 页,点到第 3 页就空」。

这类问题不好描述,只能说:列表查询和计数查询,条件必须一致。我上次就是列表加了 where,count 忘了加。

排查时最直接的办法是在模板里把 total 打出来:

total = {$total}

数字跟你心里预期差得离谱,问题就在查询条件,不在分页标签。