第三十一章 公共片段与区块
页头、页脚与全站 meta 抽成公共片段;三个片段各管什么、区块怎么用、改片段必须遵守的四条规矩。
这一章解决什么
页头、页脚、全站 meta 不在每个模板里各写一遍,而是抽成公共片段,由模板用一句话引入。改站点名称、电话、备案号、导航菜单,只改片段,全站生效。
本站主题 theme/576so/ 有三个公共片段:
| 文件 | 放什么 | 被谁引入 |
|---|---|---|
theme/576so/head1.html | 站头:Logo、主导航、城市下拉、搜索框、手机菜单按钮 | 首页与所有列表/详情页 |
theme/576so/foot1.html | 页脚:咨询弹窗、四栏导航、备案与友链、浮动工具条、底部脚本 | 首页与所有列表/详情页 |
theme/576so/seo/head.html | 全站 meta:robots、viewport、canonical、Open Graph、结构化数据、css/js 引用、统计脚本 | 所有页面模板 |
怎么引入
{andvar:include("../../seo/head.html")}{andvar:include("../../head[langid].html")}{andvar:include("../../foot[langid].html")}| 要点 | 说明 |
|---|---|
| 路径相对谁 | 相对当前模板文件。首页 index1.html 在主题根目录,所以写 seo/head.html;model/list/ 下的模板要退两级,写 ../../seo/head.html |
[langid] | 编译期替换成语言 ID。中文站载入 head1.html、foot1.html;将来加英文版就是 head2.html,模板不用改 |
| 只能写在模板里 | {andvar:include} 是模板令牌,写在正文或 JS 里不会执行 |
| 不要循环引用 | 片段里不能再引入引用它的模板;递归超过十层会被截断并写错误日志 |
三个片段各管什么
head1.html:站头
- 主导航从
category表取followid=0 and ismenu=1的一级栏目,按ordnum,autoid排序。后台把栏目「是否菜单」改成否,导航里就消失,不用改代码。 - 带下级的栏目(
isnav=1)会展开二级面板;面板里再取该栏目的内容,所以「精选 / 全部」两个页签的数据也来自库。 - 电话是写死在片段里的
tel:链接;换号码要改head1.html与foot1.html两处。 - 城市下拉从
plug_city表取islock=1的分站,点击进入/城市拼音/。加城市只加表,不动模板(见第二十二章)。
foot1.html:页脚与咨询弹窗
- 整块咨询表单是页脚里的一段浮层(
#lead_pop),点「免费咨询」才出现。字段定义、classid=16的隐藏域、短信验证码三条件,见第二十章。 - 四栏导航里「核心业务 / 服务项目 / 资料与支持」三列的链接按栏目 ID 集合取,栏目改名页脚跟着改。
- 备案号、公安备案、Sitemap、隐私政策链接都在这一段的
foot-legal里。 - 浮动工具条与三个脚本(
floatbar.js、leadform.js、表单运行库)在文件末尾,删任何一个都会让弹窗或回到顶部失效。
seo/head.html:全站 meta
- 页面标题与三条基础 meta 由各模板自己写,这个片段只放全站共用的部分,避免重复。
{seo_pagetype}决定输出哪套结构化数据:index出 WebSite 与 LocalBusiness,list出面包屑,show出 Article 与百度熊掌号格式。- css/js 的版本号就写在
ju7.css?v=…与ju7.js?v=…上。改完这两个文件必须同步改版本号,否则访客浏览器还在用旧文件;preload与正式引用必须写同一个地址,否则同一份文件会被下载两遍。 - 统计信标有两个:站内
plug/stat与百度统计。站内那个故意写根路径/plug/stat/stat.js,因为分站页面的{webroot}是/LINHAI/,拼上去会 404。
区块:不用改模板的公共块
「内容 → 区块管理」里可以建命名区块,内容存成站点根的 block/名字.html,模板用一行引入:
{andvar:block("footer-notice")}适合放「全站公告」「备案变更提示」这类运营内容:编辑在后台改文字,模板不用动。本站当前 block/ 目录为空,没有启用区块;要用时先在后台新建,再把令牌加到目标模板。
区块与片段不是一回事:片段是主题目录里的文件,跟着主题走;区块是站点根的文件,换主题后仍然存在。
改片段的四条规矩
- 先备份再改。片段被所有页面引用,改坏一个标点就可能让全站 500。改前把文件复制到站点外,改后先打开首页和任意一章确认。
- 片段也吃编译缓存。模板编译产物记录了主模板与所有 include/block 分片的大小和修改时间,改片段会让相关模板自动重编译(批 #302 起)。若改了没反应,先清「缓存管理」,再确认文件确实写到了主题目录。
- 版本号要一起升。只改
ju7.css不改?v=,浏览器不会重新下载。 - 别在片段里写死城市或单页信息。片段是全站共用的;分站差异用
{c_name}与条件判断,不要复制一份head2.html只为一个城市。
接下来怎么读
- 页头页脚里的表单怎么工作:第二十章。
- 片段改动为什么会影响所有页面:第二十九章与第三十章。
- 改完不生效的排查顺序:第三十三章,三层缓存。
微信扫码聊需求