<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0"><channel><title>Halo - 强大易用的开源建站工具 | 应用市场 | 主题漫游 | 版本发布</title><link>https://www.halo.run</link><atom:link href="https://www.halo.run/feed/app-store/apps/app-c93gryma/releases.xml" rel="self" type="application/rss+xml"/><description>Halo - 强大易用的开源建站工具 | 应用市场 | 主题漫游 | 版本发布</description><generator>Halo v2.25.4</generator><language>zh-cn</language><image><url>https://www.halo.run/upload/logo.png</url><title>Halo - 强大易用的开源建站工具 | 应用市场 | 主题漫游 | 版本发布</title><link>https://www.halo.run</link></image><lastBuildDate>Sun, 26 Jul 2026 22:41:12 GMT</lastBuildDate><follow_challenge><feedId>69597013489248256</feedId><userId>41706424548048896</userId></follow_challenge><item><title><![CDATA[主题漫游 1.1.0 发布]]></title><link>https://www.halo.run/store/apps/app-c93gryma/releases/app-release-pjtozmhk</link><description><![CDATA[<img src="https://www.halo.run/plugins/feed/assets/telemetry.gif?title=%E4%B8%BB%E9%A2%98%E6%BC%AB%E6%B8%B8%201.1.0%20%E5%8F%91%E5%B8%83&amp;url=/store/apps/app-c93gryma/releases/app-release-pjtozmhk" width="1" height="1" alt="" style="opacity:0;">
<h2 id="1.1.0---2026-07-23" tabindex="-1">1.1.0 - 2026-07-23</h2>
<p>这次更新不只是让访客切换主题，也把不同主题的页面模板和导航真正串联起来。站长无需再为了每套主题重复创建页面、创建菜单和逐项绑定，只需拖拽模板即可完成一套独立导航。</p>
<h3 id="%E6%96%B0%E5%A2%9E" tabindex="-1">新增</h3>
<ul>
 <li>新增主题导航编排功能，为每套主题维护独立的一级、二级导航结构。</li>
 <li>自动识别 Halo 内置模板，以及主题声明并真实存在的自定义页面模板。</li>
 <li>自动关联当前主题与对应模板，集中展示模板名称、来源、访问路径和可用状态。</li>
 <li>支持把待选模板拖入导航结构，并通过拖拽调整一级导航、二级导航和显示顺序。</li>
 <li>保存编排时自动生成并复用缺少的页面与导航数据，无需提前在 Halo 后台创建页面或菜单。</li>
 <li>支持直接编辑导航名称和访问路径，可使用站内真实路径或自定义链接。</li>
 <li>已完成的导航编排可以直接作为主题菜单使用，并随访客当前选择的主题自动切换。</li>
 <li>新增前台主题适配接口，支持稳定挂载锚点、自定义切换按钮、CSS 变量、Shadow Parts 和 <code>setAppearance()</code>。</li>
</ul>
<h3 id="%E4%BC%98%E5%8C%96" tabindex="-1">优化</h3>
<ul>
 <li>优化模板池与导航结构的双栏拖拽体验，拖入右侧后自动从待选区域移除。</li>
 <li>优化嵌套导航的层级提示、拖拽占位和排序反馈，让一级、二级关系更直观。</li>
 <li>优化前台切换入口样式，可继承主题按钮的颜色、尺寸、圆角、边框和阴影。</li>
 <li>优化主题切换入口在 React、SPA 和局部重渲染页面中的挂载稳定性。</li>
 <li>优化主题选择弹窗的打开过程，已有目录数据时不再重复请求和重建弹窗。</li>
 <li>保留访客当前真实访问路径进行主题切换，不修改 Halo 全局启用主题，也不影响其他访客。</li>
</ul>
<h3 id="%E4%BF%AE%E5%A4%8D" tabindex="-1">修复</h3>
<ul>
 <li>修复页面切换或顶部导航重新渲染后，主题漫游入口偶尔消失的问题。</li>
 <li>修复主题适配颜色被插件内部默认变量覆盖的问题。</li>
 <li>修复点击主题切换按钮时弹窗短暂闪烁、入场动画重复执行的问题。</li>
 <li>修复未提前创建页面或菜单时，部分主题模板无法正常加入导航的问题。</li>
 <li>修复清空导航编排后旧数据仍被复用的问题。</li>
 <li>修复主题模板名称、访问路径与实际模板文件对应不准确的问题。</li>
</ul>
<hr>
<p><a href="https://www.halo.run/store/apps/app-c93gryma/releases/app-release-pjtozmhk">查看版本详情</a></p>]]></description><guid isPermaLink="false">store.halo.run/Release/app-release-pjtozmhk</guid><pubDate>Thu, 23 Jul 2026 14:56:52 GMT</pubDate></item><item><title><![CDATA[主题漫游 1.0.9 发布]]></title><link>https://www.halo.run/store/apps/app-c93gryma/releases/app-release-dkydy2m8</link><description><![CDATA[<img src="https://www.halo.run/plugins/feed/assets/telemetry.gif?title=%E4%B8%BB%E9%A2%98%E6%BC%AB%E6%B8%B8%201.0.9%20%E5%8F%91%E5%B8%83&amp;url=/store/apps/app-c93gryma/releases/app-release-dkydy2m8" width="1" height="1" alt="" style="opacity:0;">
<h1 id="%E4%B8%BB%E9%A2%98%E6%BC%AB%E6%B8%B8" tabindex="-1">主题漫游</h1>
<p>主题漫游是一个面向 Halo 2.25+ 的多主题访客切换插件。站长可以把已安装主题与对应菜单绑定后开放给访客；每位访客只改变自己的页面渲染，不会启用或停用 Halo 的全局主题，也不会影响其他访客。</p>
<blockquote>
 <p>告别一个站只能穿一套衣服的烦恼。今天宠这个，明天宠那个，让安装过的主题都能雨露均沾。</p>
</blockquote>
<h2 id="%E4%B8%BB%E8%A6%81%E8%83%BD%E5%8A%9B" tabindex="-1">主要能力</h2>
<ul>
 <li>自动读取 Halo 中已经安装的主题和菜单，无需手工新增主题数据。</li>
 <li>每套主题都能绑定自己的菜单，并决定是否开放给访客。访客可以自由切换站长准备的多套主题，不再只能看到一种风格，也让安装的每套主题都有机会派上用场。</li>
</ul>
<h2 id="%E5%AE%89%E8%A3%85%E4%B8%8E%E4%BD%BF%E7%94%A8" tabindex="-1">安装与使用</h2>
<ol>
 <li>安装并启动插件。</li>
 <li>在 Console 左侧进入“主题漫游”。</li>
 <li>为每个主题选择对应菜单。</li>
 <li>打开需要向访客展示的主题。</li>
 <li>在“漫游配置”中设置记忆时间、开放范围、入口位置和切换动画。</li>
</ol>
<p>如果没有任何主题处于“前台开放”状态，插件不会向站点页面注入入口。</p>
<h2 id="%E4%B8%BB%E9%A2%98%E6%8E%A5%E5%85%A5" tabindex="-1">主题接入</h2>
<p>插件不要求主题适配，默认会自动注入完整切换入口。主题需要自定义位置时，可提供一个锚点：</p>
<pre><code class="language-html">&lt;div data-theme-roaming-anchor&gt;&lt;/div&gt;
</code></pre>
<p>使用主题自己的按钮打开面板：</p>
<pre><code class="language-html">&lt;button type="button" data-theme-roaming-open&gt;切换主题&lt;/button&gt;
</code></pre>
<p>前台 JavaScript 接口为 <code>window.ThemeRoaming</code>，提供 <code>open()</code>、<code>close()</code>、<code>toggle()</code>、<code>refresh()</code>、<code>select(themeName)</code>、<code>getState()</code> 和 <code>mount(anchor)</code>。调用前应判断接口是否存在：</p>
<pre><code class="language-js">window.ThemeRoaming?.open();
</code></pre>
<p>开放主题目录：</p>
<pre><code class="language-text">GET /apis/roaming.serenity/v1alpha1/catalog
</code></pre>
<p>Thymeleaf 可通过 <code>themeRoamingFinder.getCatalog()</code> 获取当前主题和开放主题列表。</p>
<p>菜单绑定建议使用 <code>themeRoamingMenuFinder</code>。未安装插件时必须保留 Halo 原生 <code>menuFinder</code> 回退：</p>
<pre><code class="language-html">${themeRoamingMenuFinder != null
  ? themeRoamingMenuFinder.getForTheme(theme.metadata.name).menuItems
  : menuFinder.getPrimary().menuItems}
</code></pre>
<h2 id="%E5%BC%80%E5%8F%91%E4%B8%8E%E6%9E%84%E5%BB%BA" tabindex="-1">开发与构建</h2>
<p>插件版本仅在 <code>gradle.properties</code> 的 <code>pluginVersion</code> 中维护，插件元数据和 JAR 文件名会在构建时自动同步。</p>
<pre><code class="language-powershell">.\gradlew clean build
</code></pre>
<p>构建包含 Console 前端、Java 编译和单元测试，产物位于 <code>build/libs/</code>。</p>
<h2 id="%E5%85%BC%E5%AE%B9%E6%80%A7" tabindex="-1">兼容性</h2>
<ul>
 <li>Halo：<code>&gt;= 2.25.0</code></li>
 <li>Java：21</li>
</ul>
<p>Halo 升级后建议重新执行完整构建，并验证首页、列表页、文章页、主题静态资源和菜单绑定。</p>
<h2 id="%E6%BA%90%E7%A0%81%E4%B8%8E%E5%8F%8D%E9%A6%88" tabindex="-1">源码与反馈</h2>
<ul>
 <li>源码仓库：<a href="https://github.com/atangccc/Roaming">https://github.com/atangccc/Roaming</a></li>
 <li>问题反馈：<a href="https://github.com/atangccc/Roaming/issues">https://github.com/atangccc/Roaming/issues</a></li>
 <li>协议：GPL-3.0</li>
</ul>
<hr>
<p><a href="https://www.halo.run/store/apps/app-c93gryma/releases/app-release-dkydy2m8">查看版本详情</a></p>]]></description><guid isPermaLink="false">store.halo.run/Release/app-release-dkydy2m8</guid><pubDate>Tue, 21 Jul 2026 03:43:04 GMT</pubDate></item></channel></rss>