Z-Blog 模板里读自定义字段,别硬写 Metas
摘要
后台字段填了,前台死活不显示。查了半小时,问题在模板里我写的那行 {$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} 打文字标记就行。
2026年10月21日 11:40
前后30天 · 点日期看归档
9月21日
9月22日
9月23日
9月24日
9月25日
9月26日
9月27日
9月28日
9月29日
9月30日
10月1日
10月2日
10月3日
10月4日
10月5日
10月6日
10月7日
10月8日
10月9日
10月10日
10月11日
10月12日
10月13日
10月14日
10月15日
10月16日
10月17日
10月18日
10月19日
10月20日
10月21日
10月22日
10月23日
10月24日
10月25日
10月26日
10月27日
10月28日
10月29日
10月30日
10月31日
11月1日
11月2日
11月3日
11月4日
11月5日
11月6日
11月7日
11月8日
11月9日
11月10日
11月11日
11月12日
11月13日
11月14日
11月15日
11月16日
11月17日
11月18日
11月19日
11月20日