实现并显示一个小组件需要两个步骤:
- 【配置】在组件库中声明组件
- 【使用】在需要的位置调用
组件库在 _data/widgets.yml 文件中,需要自己创建,内容形如:
'我的小组件1': layout: 小组件布局模板 ...(其它属性)
|
使用的地方有:【主题配置】、【项目配置】、【页面】,后者可以覆盖前者,例如:
blog/source/_posts/xxx.md--- sidebar: left: widgets: ['我的小组件1', '我的小组件2'] ---
|
组件库
在创建组件时,您可以使用以下这些 layout 布局:
toc
这是文章/文档的目录树组件,显示文章和文档的目录结构:
blog/source/_data/widgets.ymltoc: layout: toc list_number: false min_depth: 2 max_depth: 5 fallback: recent collapse: false
|
toc 的 fallback 默认是 recent,即一篇文章没有 TOC 的时候会显示一个 recent
toc 组件底部的操作按钮按页面内容显示:「回到顶部」「参与讨论」仅在页面存在目录或渲染评论区时出现;页面或所属 Wiki 项目设置 comments.enabled: false 时隐藏讨论入口。
recent
blog/source/_data/widgets.ymlrecent: layout: recent rss: limit: 5
|
在 wiki 板块显示的是最近更新的 wiki 页面,其余地方显示最近更新的文章。
hexo 的覆盖规则是合并而不是替换,所以若不想使用 recent,除了在 _config.stellar.yml 中删除 recent 你还需要将此处的 recent 置空,即
blog/source/_data/widgets.yml然后自己需要的地方用自己另建的一个 my_recent 组件
blog/source/_data/widgets.ymlmy_recent: layout: recent ...
|
related
相关文档组件,用于显示具有相同 tags 的其它项目列表,暂不支持自定义内容:
Stellar 1.12.0 已将 wiki_more,更名为 related
blog/source/_data/widgets.ymllinklist
view 显式选择 list 或 grid。用户配置的 linklist 使用集合默认密度;网格模式下 columns 表示最大列数,组件会按可用宽度自动减少列数;show_title 控制是否显示标题,不再根据列数隐式隐藏。链接指向当前页面时,列表模式在右侧显示激活圆点,网格模式仅使用背景、文字和图标高亮,不显示圆点。
blog/source/_data/widgets.ymllinklist: layout: linklist view: grid columns: 2 show_title: true items: - icon: '<svg...></svg>' title: 关于 url: /about/
|
markdown
这是一个自由度很高的标签,可以显示 markdown 文本内容:
blog/source/_data/widgets.ymlwelcome: layout: markdown title: 欢迎欢迎 linklist: view: list show_title: true items: - icon: title: url: content: | 欢迎使用 [Stellar](https://github.com/xaoxuu/hexo-theme-stellar/) 主题,下面是您的入门指南,祝您使用愉快! <br> **第一步** 创建 `blog/_config.stellar.yml` 文件,在此文件中填写需要自定义的主题配置。 <br> **第二步** 创建 `blog/source/_data/widgets.yml` 文件,此文件中填写需要自定义的侧边栏组件,例如 `welcome` 组件。 <br> 如果有任何疑问,请先查阅 [文档](https://xaoxuu.com/wiki/stellar/),如果文档中没有提供,请提 [issue](https://github.com/xaoxuu/hexo-theme-stellar/issues/) 向开发者询问。 src:
|
linklist 显示为嵌套在 md 组件中。为了区分说明文字与链接条目,内嵌列表会默认显示背景:glass 左栏使用 var(--bg-a10),card 左栏和右栏使用 var(--block)。效果参考:
tagcloud
标签云组件:
blog/source/_data/widgets.ymltagcloud: layout: tagcloud title: 标签云 min_font: 12 max_font: 24 amount: 100 orderby: name order: 1 color: false start_color: end_color: show_count: false
|
ghuser
显示 GitHub 用户基础信息卡片:
blog/source/_data/widgets.ymlghuser: layout: ghuser username: github avatar: true menu: true
|
ghrepo
显示 GitHub 仓库基础信息,需要搭配 source.repository 一起使用:
blog/source/_data/widgets.yml需要在需要显示的文章页面的 front-matter 中按照如下格式写上仓库持有者和仓库名:
blog/source/_posts/xxx.md--- source: repository: xaoxuu/hexo-theme-stellar ---
|
如果需要显示在 wiki 项目中,则在 _data/wiki/projects.yml 中填写到对应项目的信息中:
blog/source/_data/wiki/projects.ymlname: Stellar headline: 每个人的独立博客 tagline: Designed by xaoxuu source: repository: xaoxuu/hexo-theme-stellar ...
|
timeline
时间线组件,这个功能在 1.12.0 版本后开始支持:
动态数据是从 GitHub Issues 中拉取的,使用方法为:
在 widgets.yml 中新建配置
blog/source/_data/widgets.ymltimeline: layout: timeline title: 近期动态 api: https://api.github.xaox.cc/repos/xaoxuu/hexo-theme-stellar/issues user: hide:
|
这个功能在 1.18.0 版本后开始支持:
blog/source/_data/widgets.ymlweibo: layout: timeline title: 微博动态 api: https://raw.githubusercontent.com/GitHub用户名/仓库名/output/output/tweets.json type: weibo limit: 20
|
这个功能在 1.34.0 版本后开始支持,动态数据直接拉取 RSS / Atom / JSON Feed 订阅源(可配合 RSSHub 聚合各类平台动态):
blog/source/_data/widgets.ymlrss: layout: timeline title: 订阅动态 api: https://rsshub.app/bilibili/user/dynamic/你的uid type: rss limit: 10 content_type: content
|
无论是哪种动态数据,你都可以在 _config.stellar.yml 中的 site_tree 中设置引用
blog/_config.stellar.ymlsite_tree: ...: sidebar: left: widgets: [welcome, recent, 朋友圈, weibo]
|
或者在你需要显示的页面引入,页面内引入优先于配置文件引入:
blog/source/_posts/xxx.md--- sidebar: left: widgets: [ghuser, 朋友圈] ---
|
配置默认布局
在 1.26.0 版本中,站点主结构树有较大的变化,支持自定义每种页面的组件显示情况,侧边栏会按照指定的顺序从组件库中读取组件并显示:
列表类页面
列表类页面是指博客文章列表、专栏列表、wiki 项目列表等页面的配置。
这里解释一下 base_dir 是什么意思,比如说当我创建一个 wiki 项目或者笔记页面时,会自动生成一个总项目列表,该页面的默认路径是 /wiki ,你可以 点此查看 该页面,改变 base_dir 即改变该路径。
blog/_config.stellar.yml site_tree: home: sidebar: left: widgets: [welcome, recent] right: widgets: [timeline] index_blog: base_dir: blog navigation: menu: post tabs: sidebar: left: widgets: [welcome, recent] right: widgets: [timeline] index_topic: base_dir: topic navigation: menu: post index_wiki: base_dir: wiki navigation: menu: wiki tabs: sidebar: left: widgets: [ghissues, related, recent] right: widgets: [timeline]
|
内容类页面
是指具体到文章页面,文档页面和专栏文章等的具体配置
blog/_config.stellar.yml site_tree: post: navigation: menu: post sidebar: left: widgets: [related, ghrepo, ghissues, recent] right: widgets: [ghrepo, toc] topic: navigation: menu: post wiki: navigation: menu: wiki sidebar: left: widgets: [tree, ghissues, related, recent] right: widgets: [ghrepo, toc] author: base_dir: author navigation: menu: post sidebar: left: widgets: [recent] right: widgets: [] error_page: navigation: menu: post '404': '/404.html' sidebar: left: widgets: [recent] right: widgets: [] page: sidebar: left: widgets: [recent] right: widgets: [timeline, toc]
|
灵活用法
继承(覆盖)组件
适合有多个相似组件的情况,例如有多个时间线组件,显示规则相同,仅 api 地址不同:
blog/source/_data/widgets.ymlmy_timeline_lite: layout: timeline title: 近期动态 user: xaoxuu hide: title,footer api:
|
在不同的页面设置不同的 api 地址:
blog/source/_posts/xxx.md--- title: 某一篇文章 sidebar: left: widgets: - welcome - override: my_timeline_lite api: https://xxx ---
|
匿名组件:仅在使用时创建
适合仅在一个页面或项目中才需要用到的组件,例如在某个页面的侧边栏放一个公告:
blog/source/_posts/xxx.md--- title: 某一篇文章 sidebar: left: widgets: - welcome - layout: markdown title: '重要通知' content: | 这是页面专属的匿名组件。 src: ---
|
又或者在项目的配置文件中创建专属于这个项目的组件:
blog/_data/projects.ymlname: Stellar headline: Stellar - 每个人的独立博客 tagline: Designed by xaoxuu sidebar: left: widgets: - layout: timeline title: 最近更新 api: https://api.github.xaox.cc/repos/xaoxuu/hexo-theme-stellar/releases?per_page=1 hide: footer
|