模板里那个 $article 到底有什么:字段速查和几个冷门的

· zblog · 阅读 12
摘要

写主题最费时间的一件事,不是排版,是猜。 猜 $article 里有没有这个字段。 文档不够细,只能 var_dump 打出来看。这篇文章就是把常用的和几个冷门的列清楚,省点时间。 基础的那几个 标题:$article->Title

写主题最费时间的一件事,不是排版,是猜。

猜 $article 里有没有这个字段。

文档不够细,只能 var_dump 打出来看。这篇文章就是把常用的和几个冷门的列清楚,省点时间。

基础的那几个

标题:$article->Title。正文:$article->Content。摘要:$article->Intro。

链接:$article->Url。注意它是对象,直接输出会触发 toString,一般能用,但取个别参数时要用 $article->Url->Full 这种写法。

时间:$article->Time 是时间戳,$article->Time('Y-m-d') 格式化后输出。

ID、分类 ID:$article->ID、$article->Category->ID。

常被问到的:判断是不是置顶

$article->IsTop。返回布尔。

但要注意,置顶只在特定调用方式下才生效。列表查询时没带置顶参数,这个值是 false,不是文章本身没置顶。

Metas:所有自定义字段都在这里

$article->Metas->字段名。

取不到时返回 null,不是空字符串。模板里直接输出 null 没问题,但拿去做字符串比较要小心。

判断存在用 isset($article->Metas->字段名),别用 empty,值为 0 的字段会被 empty 判成不存在。

冷门的几个

作者对象。 $article->Author 是个 Member 对象,取名字是 $article->Author->Name,取头像要另外拼。

评论数。 $article->CommNums。这个是字段,不是方法,别写成 ()。

阅读数。 核心没有这个字段,要装插件或者自己加 Meta。很多人以为 $article->ViewNums 存在,不存在。

模板名。 $article->Template,指定了自定义模板的文章,这里存的是文件名。可以做差异化排版。

别名。 $article->Alias。伪静态开着的时候,URL 里那一段就是它。

列表里的 $article 和详情页的不是一回事

这个是新手最容易懵的地方。

列表循环里拿到的 $article,Content 可能是空的。因为为了性能,列表查询默认不取全文。

你要在列表页截正文做摘要,得先确认有值,或者改用 Intro,或者在查询时显式指定取全字段。

我因为这个接过一次「首页所有文章只有标题没有正文」的求助。改了半天模板,最后发现是查询参数的问题。

还有个地方

$article->Category 在列表页通常已经预载,但在某些自定义查询里是空的,要用的话得 $article->Category->Name 前先判断。

不判断的话,PHP 8 下就是一个 Warning,页面顶上冒一行黄字。

难看,且暴露路径。