Homepage 插件高级使用案例
本文介绍 Homepage 插件的进阶配置和使用场景,帮助你打造完全自动化、智能化的 Obsidian 入口体验。
条件化首页规则
Homepage 支持根据不同条件自动切换首页,实现「不同场景看到不同首页」。
按星期切换
为工作日和周末配置不同的首页:
| 时间 | 首页 |
|---|---|
| 周一 ~ 周五 | 01 - Daily Notes/Work Hub.md |
| 周六 ~ 周日 | 01 - Daily Notes/Life Hub.md |
在「Homepage Rules」中添加规则:
Condition: Weekday
Homepage: /01 - Daily Notes/Work Hub.md按时间段切换
在白天和夜晚使用不同的首页布局:
Condition: Time range 09:00-18:00
Homepage: 02 - Work Dashboard.md
Condition: Time range 18:00-09:00
Homepage: 03 - Personal Dashboard.md按标签切换
根据当前打开的笔记标签,切换到相关的首页:
Condition: Contains tag #work
Homepage: Work Dashboard.md
Condition: Contains tag #个人
Homepage: Personal Hub.md动态首页模板
结合 Templater 或 QuickAdd,实现首页内容的动态更新。
Templater 动态问候
markdown
<%*
const hour = new Date().getHours();
let greeting = "你好";
if (hour < 6) greeting = "夜深了";
else if (hour < 9) greeting = "早上好";
else if (hour < 12) greeting = "上午好";
else if (hour < 14) greeting = "中午好";
else if (hour < 18) greeting = "下午好";
else if (hour < 22) greeting = "晚上好";
else greeting = "夜深了";
-%>
# 🌟 <% greeting %>,{{user}}
今天是 **{{date:YYYY-MM-DD dddd}}**自动生成本周概览
markdown
<%*
const today = moment(tp.date.now());
const weekStart = today.clone().startOf('week').format('YYYY-MM-DD');
const weekEnd = today.clone().endOf('week').format('YYYY-MM-DD');
-%>
## 📅 本周(<% weekStart %> ~ <% weekEnd %>)
| 周一 | 周二 | 周三 | 周四 | 周五 |
|------|------|------|------|------|
| [[<% today.clone().startOf('week').format('YYYY-MM-DD') %>]] | [[<% today.clone().startOf('week').add(1,'day').format('YYYY-MM-DD') %>]] | [[<% today.clone().startOf('week').add(2,'day').format('YYYY-MM-DD') %>]] | [[<% today.clone().startOf('week').add(3,'day').format('YYYY-MM-DD') %>]] | [[<% today.clone().startOf('week').add(4,'day').format('YYYY-MM-DD') %>]] |Dataview 动态数据集成
在首页中使用 Dataview 嵌入实时数据,打造真正的仪表盘。
今日任务统计
dataview
TABLE length(filter(file.tasks, (t) => !t.completed)) AS 待办数,
length(filter(file.tasks, (t) => t.completed)) AS 已完成
FROM ""
WHERE file.day = date(today)本周项目进度
dataview
TABLE
rows.file.link AS 项目,
length(rows) AS 笔记数,
length(filter(rows.tasks, (t) => t.completed)) AS 完成,
length(filter(rows.tasks, (t) => !t.completed)) AS 待办
FROM "04 - Projects"
WHERE file.ctime >= date(today) - dur(7 days)
GROUP BY file.folder未整理的笔记
dataview
TABLE file.link AS 笔记, file.ctime AS 创建时间
FROM ""
WHERE file.ctime <= date(today) - dur(30 days)
WHERE !contains(file.path, "Templates")
WHERE length(file.outlinks) = 0
SORT file.ctime ASC
LIMIT 10多角色首页配置
如果你同时扮演多个角色(员工、创业者、学生),可以为每个角色配置独立的首页。
角色配置示例
| 角色 | 首页 | 快捷键 |
|---|---|---|
| 工作模式 | Work Hub.md | Ctrl + 1 |
| 学习模式 | Study Hub.md | Ctrl + 2 |
| 个人模式 | Personal Hub.md | Ctrl + 3 |
快速切换脚本
在 Templater 中创建角色切换脚本:
markdown
<%*
const role = await tp.system.suggester(
["🖥️ 工作模式", "📚 学习模式", "🏠 个人模式"],
["Work Hub", "Study Hub", "Personal Hub"]
);
if (role) {
const app = require('obsidian').app;
// 设置对应的首页
await app.internalPlugins.getPluginById('homepage').instance.setHomePage(role);
new Notice(`已切换到 ${role} 模式`);
}
-%>首页主题化设计
极简专注型
适合需要减少干扰的用户:
markdown
# {{date:YYYY-MM-DD}}
---
## 唯一焦点
> 今天最重要的一件事
---
## 待办
<!-- 手动输入今日核心任务 -->
- [ ]
---
⏰ {{time:HH:mm}}信息密集型
适合需要多维度数据的用户:
markdown
# 📊 工作台
## 今日数据
```dataview
TABLE WITHOUT ID
"📝 " + length(file.tasks) + " 任务" AS 今日,
"✅ " + length(filter(file.tasks, t => t.completed)) + " 已完成" AS 状态,
"📎 " + length(file.outlinks) + " 链接" AS 链接
WHERE file.day = date(today)QuickAdd 自动化
一键生成首页快照
创建每日首页状态快照,便于回顾:
javascript
// QuickAdd Macro: 每日首页快照
const today = moment().format("YYYY-MM-DD");
const snapshot = app.workspace.getActiveFile();
if (snapshot) {
const content = await app.vault.read(snapshot);
await app.vault.create(
`99 - Archives/Snapshots/${today}.md`,
`---\n快照日期: ${today}\n来源: ${snapshot.path}\n---\n\n${content}`
);
new Notice(`已保存首页快照到 ${today}.md`);
}周期性重置首页
每周一自动将首页重置为周模板:
javascript
// Templater Template: weekly-reset.md
<%*
if (moment().day() === 1) {
const weekly = await app.vault.read(
app.vault.getAbstractFileByPath("Templates/Weekly Hub.md")
);
await app.vault.modify(
app.vault.getAbstractFileByPath("02 - Daily Notes/Weekly Hub.md"),
weekly
);
new Notice("已重置本周首页");
}
-%>团队协作场景
团队共享首页
在多用户 Obsidian Vault 中,使用 Homepage 为不同成员配置个性化入口:
markdown
# 🚀 团队首页
## 📢 公告
<!-- 由管理员更新的公告区 -->
## 👤 个人区
- [[Inbox/Your Name]] 你的收件箱
- [[Projects/Your Projects]] 你的项目
## 📊 团队看板
```dataview
TABLE file.link AS 文件, file.mtime AS 更新时间
FROM "Team"
SORT file.mtime DESC
LIMIT 5
### 按角色显示不同模块
使用 Dataview 权限过滤,不同成员看到不同的数据:
```dataview
TABLE file.link AS 文档
FROM "Projects"
WHERE contains(contains(tags, "manager") ? "管理" : "成员")
WHERE contains(file.frontmatter.assignee, "{{user}}")常见问题
Q: 条件规则不生效?
- 检查规则顺序(规则从上到下匹配,第一个匹配生效)
- 确认时间格式正确(使用 24 小时制)
- 尝试删除部分规则逐步排查
Q: 首页加载太慢?
- 减少 Dataview 查询的数据量
- 使用
LIMIT限制结果数量 - 将 Dataview 查询改为按需刷新(添加
flush: true)
Q: 如何在移动端优化首页?
- 简化首页布局,减少嵌入内容
- 使用折叠区块隐藏次要信息
- 禁用不必要的 Dataview 自动刷新