Skip to content

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.mdCtrl + 1
学习模式Study Hub.mdCtrl + 2
个人模式Personal Hub.mdCtrl + 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, "&#123;&#123;user&#125;&#125;")

常见问题

Q: 条件规则不生效?

  1. 检查规则顺序(规则从上到下匹配,第一个匹配生效)
  2. 确认时间格式正确(使用 24 小时制)
  3. 尝试删除部分规则逐步排查

Q: 首页加载太慢?

  1. 减少 Dataview 查询的数据量
  2. 使用 LIMIT 限制结果数量
  3. 将 Dataview 查询改为按需刷新(添加 flush: true

Q: 如何在移动端优化首页?

  • 简化首页布局,减少嵌入内容
  • 使用折叠区块隐藏次要信息
  • 禁用不必要的 Dataview 自动刷新