Z-Blog 模板里循环 $article->Tags,两个坑我踩了

· zblog · 阅读 4
摘要

给一个主题加标签输出,我写了三行模板,结果列表页慢了一半。问题出在 $article->Tags 上。 写法本身没错 模板里这么写是正常的: {if $article->Tags} {foreach $article->Tags as $t

给一个主题加标签输出,我写了三行模板,结果列表页慢了一半。问题出在 $article->Tags 上。

写法本身没错

模板里这么写是正常的:

{if $article->Tags}
  {foreach $article->Tags as $tag}
    {$tag->Name}
  {/foreach}
{/if}

{if} 那层别省。没标签的文章直接 foreach 一个空值,开发模式下会抛 notice。

坑在懒加载

Z-Blog 的内容对象继承自 Metas,__get 里对 Tags、Category、Author 这几项做了懒加载——第一次取值才去查库。所以列表页二十篇文章,就是二十次标签查询。

我这边的做法是首页列表干脆不输出标签,只在单页(post-single.php 或 b.php 的详情模板)里用。真要列表页也显示,我还没找到干净的批量预载办法,这点得看官方后续有没有 LoadTags 的批量接口。

另外 $tag->Url 是完整地址,别再手动拼 {$host},拼出来容易多一个斜杠。