首页 / 开发文档 / 会员标签

会员标签

登录状态、昵称、角色,以及「正文要登录才能看」时的登录引导怎么写。

适用范围:页头(登录入口)、详情页(会员门槛)。

{naicha:user}

只有 logged / id / username / role / nickname 这几个字段 (来自登录时写进会话的那一份)。未登录时 logged='0'、nickname='访客'。

<!-- [页头] 登录入口 -->
{naicha:user}
  {naicha:if var="user.logged" eq="1"}
    <a href="/user">{user.nickname}</a>
    <a href="/user/logout">退出</a>
  {naicha:else}
    <a href="/user/login">登录</a>
    <a href="/user/register">注册</a>
  {/naicha:if}
{/naicha:user}
⚠️ 判断登录必须用 eq="1":写成 notempty 的话,未登录时 logged 是字符串 '0' —— 非空,判断永远为真,于是访客也会看到「我的账户」。

会员门槛

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

  • need_login = 1 —— 仅登录可见:登录就行,不要求任何等级。后台内容编辑页「发布设置 → 访问门槛」里选「仅登录用户可见」。
  • need_level > 0 —— 某等级及以上:隐含要求登录。选「任意会员可见」会把门槛设成最低的那一档。

⚠️ 为什么不做成「一个数字同时表达两种意思」(比如 need_level = -1 表示仅登录): 那种哨兵值列上没有任何约束能拦住,而读它的地方有好几处,漏改一处就会出现「某些入口能看、某些不能」。 两个语义两个列,判据则只有 Member::gate() 一个入口。

<!-- [详情] 正文要会员才能看时,服务端已经把正文摘掉了;这里只需给个出口 -->
{naicha:include file="member_gate.html"}

⚠️ 未达门槛时正文是在服务端被摘掉的,不是前端隐藏 —— 模板拿到的 detail.content 就是空的,所以右键看源码也拿不到。 内容输出接口用的是同一个判据,并额外带出 locked / need_login / lock_why 三个字段。

没找到答案? 可以在 联系我们 留言说明使用场景,我们会补充进文档。