首页 / 建站手册 / 站点名、备案号、公司信息这些

站点名、备案号、公司信息这些

站点名称、品牌字标、备案号、参数、地址、包含、时间、静态资源、页面片段、CSRF 令牌 —— 这些写在哪个页面都一样。

适用范围:所有页面(页头、页脚、列表页、详情页、单页……都能用)。

速查表

{naicha:site name="…"}name(站点设置里的键,默认 title);取一条站点设置。常用键:title slogan keywords description icp copyright contact_email domain
{naicha:brand}—;品牌字标,输出两段(.brand-a / .brand-b)。在最后一个「小写→大写」的驼峰边界断开(NaichaCMS → Naicha+CMS);中文站名没有这种边界就整段当第一段,不会拆坏
{naicha:icp}—;备案号,输出成指向工信部的链接。没填时输出空串 —— 配合 .footer-bottom span:empty{display:none} 不会在页脚留空隙。海外站不需要备案,所以它必须是「空就不显示」
{naicha:company字段}公司信息,整站只此一份,一个字段一个标签:companyname companyaddress companyphone companymobile companyfax companypostcode companyemail companyqq companyweixin companycontact companylicense companyother。没填输出空串
{naicha:param name="…"}name、default;取参数:先看控制器传的 param,再看 URL 上的同名查询参数,都没有就用 default。{naicha:param name="cid"} 是最常用的一个(当前栏目 id)
{naicha:url }type = list|detail|page|tag,配 cid/id/alias/name/path;或直接给 path;生成站内地址。会自动带上当前语言的前缀 —— 所以英文站里的 /list/x 会变成 /en/list/x,不要自己拼前缀
{naicha:include file="…"}file;套用另一个模板文件(相对当前主题)。文件名只取 basename,写路径穿越无效
{naicha:now}format(默认 Y-m-d);当前时间(服务器时区)
{naicha:asset file="…"}file;静态资源地址,自动带 ?v= 版本号(取自文件修改时间)。改了文件 URL 就变,浏览器必然重新拉取
{naicha:block name="…"}name;页面片段(「页面片段」里维护的那段文字)。取不到时输出空串,删掉片段不会把站点弄崩
{naicha:token}—;CSRF 令牌,放进表单的隐藏域。页面里有它就不会被整页缓存(缓存下来发给别人会导致提交失败)

每个标签的用法演示

下面每一段都是可以直接粘进模板的最小片段。方括号里写的是「这段放在哪」。

{naicha:site name="…"}

<!-- [页头] 站点名 + 描述,回落到站点设置 -->
<title>{naicha:site name="title"}</title>
<meta name="description" content="{naicha:site name="description"}">

<!-- [页脚] 联系方式(这三个键在「站点设置 → 站点信息」里填)-->
<a href="mailto:{naicha:site name="contact_email"}">{naicha:site name="contact_email"}</a>
<span>{naicha:site name="contact_wechat"}</span>

<!-- [任意] 统计代码:站点设置里存的是一整段 HTML,必须带 html="1" -->
{naicha:site name="stat_code" html="1"}

别用它输出正文。它只读「站点设置」里那一张表,取不到就是空串 —— 想让「某个键没填时整块不显示」,外面套一层 {naicha:if var="…" notempty="1"}。

{naicha:brand}

<!-- [页头] 品牌字标:输出两段,后一段可以换个颜色 -->
<a class="logo" href="/">{naicha:brand}</a>

<!-- 配套 CSS:NaichaCMS 会被拆成 Naicha + CMS -->
<style>
.logo .brand-a{color:#1e293b}
.logo .brand-b{color:#0078d4}   /* CMS 用品牌色 */
</style>

拆分规则是在最后一个「小写→大写」的驼峰边界断开; 中文站名(如「奶茶科技」)没有这种边界,就整段当第一段、第二段为空 —— 不会把站名拆坏。

{naicha:icp}

<!-- [页脚] 备案号。没填时输出空串,配合下面这条 CSS 不会留空隙 -->
<div class="footer-bottom">
  {naicha:site name="copyright"}
  {naicha:icp}
</div>

<style>.footer-bottom span:empty{display:none}</style>

它自己会包成指向 beian.miit.gov.cn 的链接。 海外站不需要备案,所以它必须是「空就不显示」,而不是在模板里判断有没有填。

{naicha:company字段}

<!-- [页脚] 一个字段一个标签 -->
<p>{naicha:companyname}</p>
<p>地址:{naicha:companyaddress}</p>
<p>电话:{naicha:companyphone} 传真:{naicha:companyfax}</p>
<p>邮箱:{naicha:companyemail} QQ:{naicha:companyqq}</p>
{naicha:companyname}公司名称
{naicha:companyaddress}公司地址
{naicha:companyphone}联系电话
{naicha:companymobile}手机
{naicha:companyfax}传真
{naicha:companypostcode}邮编
{naicha:companyemail}邮箱
{naicha:companyqq}QQ
{naicha:companyweixin}微信号
{naicha:companycontact}联系人
{naicha:companylicense}营业执照号
{naicha:companyother}其他信息
Powered by NaichaCMS

填一次全站通用,值在「站点设置 → 公司信息」里填。 没填的输出空串,配合 :empty{display:none} 不会留下空的「地址:」。
他那边的拼写({naicha:companyblicense})也认。

{naicha:upload}

它只输出上传接口的地址(/upload.php)。界面长什么样是你的事, 下面这段可以整段抄进模板:

<!-- [任意] 一行就是一个能用的上传控件 -->
{naicha:upload}

上传成功会在旁边显示文件地址。想自己写界面(自己的按钮样式、进度条)就用 {naicha:upload url="1"},它只给你接口地址(返回 JSON)。

谁能传访客只能传图片;登录会员还能传文档(PDF / Office / 压缩包)
不能传什么php / html / svg / js 这类能被执行的,一律拒收
大小上限取决于服务器配置,超了会告诉你上限是多少

{naicha:sendemail}

<!-- [任意] 一行就是一整套邮箱验证码控件 -->
{naicha:sendemail}

出来是「邮箱 + 获取验证码 + 6 位验证码 + 校验」四个控件,校验结果直接显示在旁边。 想自己写界面就用 {naicha:sendemail url="1"},它只给接口地址。

验证码6 位数字、10 分钟内有效、最多试 5 次、用过即失效
发得太频繁会明确提示还要等多久
发不出去会如实报错,不会假装成功

{naicha:param name="…"}

<!-- [列表] 当前页码:交给列表标签与分页条 -->
{naicha:list cid="{naicha:param name='cid'}" num="10" page="{naicha:param name='page'}"}
  …
{/naicha:list}

<!-- [搜索页] 回填关键词;不存在时用默认值 -->
<input type="search" name="kw" value="{naicha:param name="kw"}" placeholder="搜点什么">
<input type="hidden" name="from" value="{naicha:param name="from" default="nav"}">

取值顺序:控制器传的 param → URL 查询参数 → default。

{naicha:url …}

<!-- [任意] 栏目地址(别名优先,别名空则用 id)-->
<a href="{naicha:url type="list" cid="3"}">解决方案</a>

<!-- [任意] 内容详情地址 -->
<a href="{naicha:url type="detail" id="12" alias="hello-world"}">读全文</a>

<!-- [任意] 单页 / 标签聚合 /  -->
<a href="{naicha:url type="page" alias="about"}">关于我们</a>
<a href="{naicha:url type="tag" name="模板"}">#模板</a>

<!-- [任意] 只想拼一个站内相对地址 -->
<a href="{naicha:url path="/list/news"}">新闻</a>

⚠️ 它会自动带上当前语言的前缀:英文站里 /list/news 会变成 /en/list/news。 所以不要自己拼 /en/,两处都加就会变成 /en/en/…。

{naicha:include file="…"}

<!-- [任意] 套用同主题下的另一个文件 -->
{naicha:include file="header.html"}
…页面内容…
{naicha:include file="footer.html"}

<!-- [详情] 把「骨架」拆成片段,九套版式共用同一份 -->
{naicha:include file="detail_head.html"}      <!-- 标题区 -->
{naicha:include file="detail_action.html"}    <!-- 购买/下载/门槛 -->
{naicha:include file="detail_foot.html"}      <!-- 上下篇 + 相关推荐 -->

文件名只取 basename,所以写 ../../config/config.php 也只会去主题目录里找 config.php —— 路径穿越无效。子主题里没有这个文件时会自动回落到父主题。

{naicha:now}

<!-- [页脚] 年份:用 U 拿时间戳,配合别的标签算版权年份 -->
<span>© {naicha:now format="Y"} {naicha:site name="title"}</span>

<!-- [任意] 完整时间 / 只到天 -->
<time>{naicha:now format="Y-m-d H:i"}</time>
<time>{naicha:now}</time>   <!-- 默认 Y-m-d -->

时间格式就是 PHP 的 date() 那一套。 时区取站点设置;没设就是服务器时区。

{naicha:asset file="…"}

<!-- [页头] 样式与脚本,自动带 ?v= 版本号 -->
<link rel="stylesheet" href="{naicha:asset file="static/css/site.css"}">
<script src="{naicha:asset file="static/js/site.js"}" defer></script>

<!-- [任意] 图片同理(图标、logo 这类静态图)-->
<img src="{naicha:asset file="static/img/arrow.svg"}" alt="">

版本号取自文件修改时间(filemtime 的后 7 位)—— 所以改了文件 URL 就会变,不用手工维护版本号。 ⚠️ 代价要知道:重新解压/覆盖部署会把 mtime 刷成新值,于是所有访客的缓存集体失效、重下一遍。 这不是 bug,但如果你在意那一次流量,就在部署时保留原 mtime(tar -m / unzip -X)。

{naicha:block name="…"}

<!-- [首页] 一段可以在改的文案(「页面片段」)-->
<section class="hero">
  <h1>{naicha:block name="home_hero_title"}</h1>
  <p>{naicha:block name="home_hero_sub"}</p>
</section>

<!-- [任意] 片段里存 HTML 时带 html="1" -->
<div class="notice">{naicha:block name="site_notice" html="1"}</div>

<!-- [任意] 取不到片段就整块不显示(删掉片段不会把站点弄崩)-->
{naicha:if var="site_notice" notempty="1"}
  <div class="notice">{naicha:block name="site_notice" html="1"}</div>
{/naicha:if}

片段的意义是改文案不动 HTML 结构: 站长想改首页标题,不该需要去编辑模板文件。

{naicha:token}

<!-- [任意表单] 每个 POST 表单里都要有,否则会被 CSRF 拦下 -->
<form method="post">
  <input type="hidden" name="_token" value="{naicha:token}">
  <textarea name="content"></textarea>
  <button type="submit">提交</button>
</form>

⚠️ 页面里出现它,整页缓存就会自动跳过这一页(缓存下来发给别人会让提交失败)。 所以别把它放进「人人相同、且希望被缓存」的页面里 —— 那类页面本来也不该有表单。

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