Z-Blog 模板里取文章列表,GetArticleList 的参数顺序别记反

· zblog · 阅读 11
摘要

有个读者把主题的首页改成了两栏,右栏要单独拉 5 篇最新文章。他写了个 GetArticleList,页面直接白屏。我让他把那段贴过来,发现他把 limit 传进了 where 的位置。这函数参数顺序一错,不报错,就是整个列表空或者干脆 5

有个读者把主题的首页改成了两栏,右栏要单独拉 5 篇最新文章。他写了个 GetArticleList,页面直接白屏。我让他把那段贴过来,发现他把 limit 传进了 where 的位置。这函数参数顺序一错,不报错,就是整个列表空或者干脆 500。

先确认模板里有没有现成的变量

大多数主题在首页、列表页已经给了 $articles 或者 $list,具体叫哪个得看主题。别一上来就写查询——先在模板里随便打一行 {$articles|print_r} 看看有没有东西。有的话直接用,性能上也不用多查一次库。

只有一种情况需要自己查:你要的列表跟主循环不是同一批数据。比如首页主循环是分类 14,而右栏想知道全站最新。

参数顺序是 select / where / order / limit / option

Z-BlogPHP 里这个顺序,我记得从 1.5 一直没变过,但 2.x 我没实际跑,你按自己版本核对一下。写起来大概长这样:

$where = array(array('=', 'log_Status', 0));
$order = array('log_PostTime' => 'DESC');
$list = $zbp->GetArticleList('*', $where, $order, 5, null);

注意 log_Status 这个条件。不写它,草稿和待审的文章也会被拉出来,前台就露馅了。我第一次漏了这个,首页显示了一篇还没写完的稿子,还是别人截图告诉我的。

where 是二维数组,不是字符串

这个坑踩的人最多。很多人习惯写 "log_CateID=1" 这种字符串,在这套框架里不认。要写成嵌套数组,一个条件一个子数组,第一个元素是操作符:

array(array('=', 'log_CateID', 1), array('>', 'log_PostTime', 1700000000))

多个条件之间默认是 and。要 or 就得再用一层,这个我没深抠过,一般也用不上。

返回的是对象数组,遍历别用错

拿到的 $list 是 Post 对象的数组,不是普通数组。取值走 $article->Title、$article->Url,别写 $article['Title'],那样拿到的是 null,还不会报错,最恶心。

调试的时候我习惯在循环里先打一行 echo $article->ID,能打出来说明对象正常,再往下写别的属性。

说白了就三件事:顺序别搞反、where 用数组、记得过滤状态。剩下的都是照着主题里已有的写法抄。