友链页搭建与 link.yml 深度解析

友链页搭建与 link.yml 深度解析
Yoki一、友链页在 anzhiyu 主题里是怎么工作的
友链页的入口是 source/link/index.md:
1 |
|
type: link告诉主题渲染flink.pug模板- 数据来自
source/_data/link.yml(Hexo 的site.data.link变量) - 模板:
themes/anzhiyu/layout/includes/page/flink.pug
二、link.yml 数据结构
link.yml 是一个分组列表,每个分组是一个 map:
1 | - class_name: 友谊长存 |
分组字段说明
| 字段 | 作用 |
|---|---|
class_name |
分组标题,页面显示 class_name(数量) |
class_desc |
分组描述,显示在标题下方 |
flink_style |
卡片样式:anzhiyu / telescopic / flexcard |
lost_contact: true |
失联组标记,整组卡片加失联样式 |
hundredSuffix |
头像 URL 后缀(通常留空) |
link_list |
友链数组:name / link / avatar / descr |
条目的可选字段
1 | - name: 博主 |
多个分组怎么排
官方(anheyu)的友链页就是典型的多分组结构:
1 | - class_name: 推荐博客 # 有 recommend: true 的优质友链 |
💡 分组的顺序就是页面的显示顺序。想调整展示顺序直接移动顶层列表项即可。
三、失联组机制(和官方一致)
官方友链页的「失联友链💔」分组,用的就是 lost_contact: true:
1 | - class_name: 失联友链💔 |
在 flink.pug 中,失联组会渲染特殊 class:
1 | div(class=i.lost_contact ? 'anzhiyu-flink-list cf-friends-lost-contact' : 'anzhiyu-flink-list') |
cf-friends-lost-contact 可以配合 CSS 做灰度/降透明度处理。
🔑 本系列的核心自动化就是:检测脚本每天读写这个失联组(详见第 ④ 篇)。
四、flink.pug 的三个关键修复(让后端能抓到友链)
anzhiyu 主题的 flink.pug 默认渲染的友链卡片缺少后端爬虫需要的属性,导致 hexo-circle-of-friends 后端抓取不到完整友链。修复如下:
修复 1:给卡片补上 cf-* 属性
后端(hexo-circle-of-friends)通过 .cf-friends-link、.cf-friends-avatar、.cf-friends-name 这几个 class 定位友链卡片。失联组里的卡片也要补全:
1 | if i.lost_contact |
没有这些属性的后果:后端 run 17 日志报 url: https://xxx/ 抓取缺少关键字段 title —— 页面结构缺字段导致 RSS 解析失败、友链进不了后端数据库。
修复 2:开启 lazy-load 时头像也能被抓
开启主题懒加载后,头像图是 data-lazy-src(不渲染成 src),后端读不到。补一份 cf-src 属性并保留 src 兜底:
1 | img.cf-friends-avatar.no-lightbox( |
修复 3:空分组不渲染
避免空分组(比如失联组暂时没人)显示一个空标题:
1 | each i in site.data.link |
三个修复都在
flink.pug的覆盖层完成,升级主题后用git apply重新打补丁即可(Patch 归档方法见 hexo-anzhiyu 系列 ④)。
五、三种卡片样式
anzhiyu(默认,推荐)
1 | - class_name: 友谊长存 |
经典布局:头像 + 名字 + 描述,适合多数情况。
telescopic(站点截图卡片)
1 | - class_name: 精选 |
需要 siteshot 字段(截图 URL),或走 thum.io 自动截图。
flexcard(封面大卡片)
1 | - class_name: 推荐 |
大封面 + 信息卡片,适合少量精选友链。
六、和官方友链页的差异
| 对比项 | 官方 hexo.anheyu.com/link/ | 本博客 |
|---|---|---|
| 分组 | 推荐博客 / 小伙伴 / 友谊长存 / 失联友链 | 友谊长存 + 失联友链 |
| 失联组 | lost_contact: true |
同机制(自动维护) |
| 友链申请格式说明 | 页面下方有 Markdown/JSON/pug/HTML 模板 | 未加 |
| 免责声明 | 有 | 未加 |
| 出现问题的友链 | 手动 YAML 列表(带注释) | 用自动失联组替代 |
结论:核心机制(多分组 + 失联组)完全一样,官方只是额外挂了 3 个内容模块。想要这些模块,直接在 source/link/index.md 的正文里写 markdown 即可(flink.pug 末尾的 != page.content 会渲染页面正文)。
七、常用操作速查
1 | # 新增友链:在正常组的 link_list 里加一条 |
本系列推荐不要手动维护失联组——交给第 ④ 篇的自动检测,每 3 小时后端判定、每日自动归类。



