首页 / 建站手册 / 一篇内容怎么取:{naicha:detail}

一篇内容怎么取:{naicha:detail}

详情页怎么写:正文、目录、九套官方版式的骨架,以及「正文为什么是空的」那个门槛问题。

适用范围:详情页(detail.html 及其九套版式)。

基本写法

{naicha:detail}
  <h1>{detail.title}</h1>
  <div>{detail.content html="1"}</div>
{/naicha:detail}

属性:id 或 alias(都不写就用路由里那一条)。取不到内容时整块不输出。

能用的字段

详情页拿到的就是一整行内容,所以 {naicha:list} 那张「一条不漏」的表在详情页同样成立 (把 {list.} 换成 {detail.} 就是),这里只列详情页多出来的那几个:

{detail.cats}所属栏目数组(一篇可以同时属于多个栏目),配 {naicha:loop} 展开
{detail.model_label}内容模型的中文名(如「视频」「产品」),可以直接印在标题旁做角标
{detail.gallery}图集数组,元素里有 path / url / alt
{detail.gallery_count}图集张数
{detail.rel}关联内容数组
{detail.index}在 {naicha:rel} / {naicha:gallery} 循环里才有:从 1 开始的序号
详情页与列表页的差别只有一个:正文。 列表页取正文会拖慢整页(一页 12 条就是 12 份正文),所以「取不取」由模板决定 —— 列表页真要正文,那是你自己的选择,不是引擎的限制。

正文用 detailbody,目录才跳得动

<!-- [详情] 正文 + 侧栏章节目录(两件配套用)-->
<div class="dt-wrap">
  <article class="article">
    {naicha:detailbody}        <!-- 正文 HTML(已给 h2/h3 加好锚点)-->
  </article>
  <aside class="dt-side">
    {naicha:toc title="本页目录"}
  </aside>
</div>

detailbody 与 {detail.content html="1"} 输出的是同一份正文, 差别是它会给正文里的 h2/h3 自动补上 id 锚点(已经手写过 id 的尊重原值,不覆盖)。 toc 就是根据那些锚点生成目录,所以正文必须用 detailbody, 否则目录里点进去会跳不动。toc 的 title 属性是目录标题,留空则用「本页目录」。 正文里一个 h2/h3 都没有时,toc 输出空串。

详情页骨架(标题 → 行动区 → 正文 → 文件 → 评论)

<!-- [templates/你的主题/detail.html] 九套官方版式都是这一套骨架 -->
{naicha:include file="header.html"}
{naicha:detail}
<div class="container">
  {naicha:include file="detail_head.html"}     <!-- 封面/标签/标题/元信息/摘要 -->
  <div class="dt-wrap">
    <div>
      <article class="article">
        <div class="body">{naicha:detailbody}</div>
      </article>
      {naicha:include file="detail_files.html"}  <!-- 文件信息 / 版本记录 -->
      {naicha:include file="detail_foot.html"}   <!-- 上下篇 + 相关推荐 -->
      <div class="dt-com">{naicha:comments}</div>
    </div>
    <aside class="dt-side">
      {naicha:include file="detail_action.html"} <!-- 购买 / 下载 / 门槛,判据在 PHP -->
    </aside>
  </div>
</div>
{/naicha:detail}
{naicha:include file="footer.html"}
行动区为什么是一行 include:「这篇该显示购买、下载、还是门槛」这件事 只有在 PHP 里判得对(它要看是不是商品、买没买过、等级够不够)。 九套版式各自 if 一遍的结果,就是「有些详情页有购买按钮、有些没有」—— 所以判据只有一份,模板只负责把它放在哪。

正文是空的?先看是不是被门槛拦了

门槛有两档,是两件事,别混:

  • need_login = 1 —— 仅登录可见:登录就行,不要求任何等级。
  • need_level > 0 —— 某等级及以上:隐含要求登录。

⚠️ 未达门槛时正文是在服务端被摘掉的,不是前端隐藏 —— 模板拿到的 detail.content 就是空的,所以右键看源码也拿不到。 内容输出接口 /api/open/v1/content/… 用的是同一个判据, 并额外带出 locked / need_login / lock_why 三个字段。不要拿 content 空不空去猜 —— 正文真的为空的文章与一篇被锁住的文章,在 JSON 里长得一样。

<!-- [详情] 正文要会员才能看时,服务端已经把正文摘掉了;这里只需给个出口 -->
{naicha:include file="member_gate.html"}
没找到答案? 可以在 联系我们 留言说明使用场景,我们会补充进文档。