Halo 博客,登录下使隐藏瞬间可见

2024 年 11 月 16 日
136 次浏览
1319 字数

为了最小的改动以实现这个功能,我修改了瞬间插件输出的模版变量,添加了 momentsAlltagsAll 两个变量,这个两个变量是包含私有瞬间在内。然后,在主题的 thymeleaf 模板里对登录状态进行判断,进而决定使用哪个变量。这样就无需给插件新增对登录状态进行判断的相关逻辑,这种实现等插件作者后面有时间自己实现吧。

最初其实还有个想法,就是直接将 moments 修改成包含私有瞬间在内的所有瞬间,然后主题的 thymeleaf 模板逐条的对每个子 moment 项的私有/公开权限判断进而筛选输出,但是会影响到瞬间的 rss,所以还是重新定义了一个新的 momentsAll 变量。

  • 插件
    holwell/plugin-moments: 适用于 Halo 2.0 的瞬间插件 (github.com)
  • 主题端实现
    
    <th:block sec:authorize="isAnonymous()">
      <div th:replace=" ~{::momentsWrap(${tags}, ${moments})}"></div>
    </th:block>
    <th:block sec:authorize="isAuthenticated()">
      <div th:replace=" ~{::momnetsWrap(${tagsAll}, ${momentsAll})}"></div>
    </th:block>
    
    <th:block th:fragment="momentsWrap(_tags, _momnets)">
      <section>
        <div th:each="tag : ${_tags}" >
          <a th:href="|/moments?tag=${tag.name}|">[[${tag.name}]]</a>
        </div>
        <ul>
          <li th:each="moment : ${_moments.items}">
            <span th:if="${#strings.trim(moment.spec.visible) != 'PUBLIC'}">(私有)</span>
           ...
           ...
      </section>
    </th:block>