Z-Blog 模板里读自定义字段,别硬写 Metas

· zblog · 阅读 6
摘要

后台字段填了,前台死活不显示。查了半小时,问题在模板里我写的那行 {$article.Metas.字段名}。 点号那套,有值的时候是好的 Z-Blog 的文章对象上挂着 Metas,模板解析时点号会变成箭头,所以 {$article.Met

后台字段填了,前台死活不显示。查了半小时,问题在模板里我写的那行 {$article.Metas.字段名}。

点号那套,有值的时候是好的

Z-Blog 的文章对象上挂着 Metas,模板解析时点号会变成箭头,所以 {$article.Metas.source_url} 等于 PHP 里的 $article->Metas->source_url。字段填了内容,这行没问题。

坑在没值的时候。字段不存在,或者这篇忘了填,拿到 null,模板不报错——直接输出空白。然后你就开始怀疑缓存了。

用 Get() 外面包一层判断

{if $article.Metas->Get('source_url')}
  <a href="{$article.Metas->Get('source_url')}" rel="nofollow">原文</a>
{/if}

Metas::Get() 是 Metas 类自带的方法,取不到返回 null,正好拿来当条件。我习惯把整个 {if} 包住输出,不这么写会多出一对空的 <a></a>,鼠标放上去没反应,看着挺脏。

两个我踩过的细节

第一,字段名大小写敏感。后台建的是 Source_url,模板里写小写就是取不到。别凭记忆,回后台对着抄一遍。

第二,列表页里几十篇文章,填了的有,没填的也有。这时候统一用 Get() 比点号稳——点号在字段缺失时到底返回 null 还是抛错,我没在 1.7 的每个小版本上都验过,可能跟你环境有关。带上判断反正不吃亏。

顺带一句,别在模板里直接 var_dump 调试,那段 HTML 会整个乱掉。用 {if} 打文字标记就行。