默认关闭侧边栏

:information_source: 摘要 允许管理员按组控制 Discourse 侧边栏的默认行为
:hammer_and_wrench: 仓库 GitHub - nathan-nz/closed-sidebar-by-default: Allows control of the default sidebar behaviour · GitHub
:question: 安装指南 如何安装主题或主题组件
:open_book: 初次使用 Discourse 主题? Discourse 主题使用新手指南

安装此主题组件

此简单的主题组件允许管理员按组控制 Discourse 侧边栏的默认行为。

它将继续保留该用户/设备之前的侧边栏状态,这意味着在重新加载时能提供良好且一致的使用体验。

使用场景

最常见的应用场景是为普通访客提供更简洁、更简单的界面。例如,如果用于 Discourse Meta,用户访问时将看到如下界面:

而不是相对杂乱的界面:

设置

只有一个设置项,即简单的组选择器。默认设置为 anonymous_users(ID 4),但您可以使用任意组。

致谢

特别感谢 @don 制作了本组件所分支出的原始主题组件:

8 个赞

是的,我使用 Don 的版本已经几个月了,非常喜欢。我认为,当全新用户来到网站时,可能会感到有些不知所措,他们根本不知道自己在看什么。隐藏侧边栏可以让界面稍微不那么令人困惑。在我看来,一旦有人多次访问该网站,他们就会知道在需要时去哪里找菜单。

我喜欢默认关闭侧边栏的想法。这两个主题组件有什么区别?

Don 的版本没有群组设置

2 个赞

非常感谢您。我本想给您点个赞,结果不小心多点了几下“爱心”,导致不得不等待“54秒”!因此只能发这条简短的消息。

1 个赞

我能理解默认关闭侧边栏的吸引力,尤其是在空间宝贵的小屏幕上。也许将其设置为用户偏好(或记住上一次的状态)是最好的折衷方案,因为有些人经常依赖侧边栏,而另一些人则很少使用它。

通常它会记住最后的状态。然而,当此组件处于活动状态时,它会忽略这一点。

也许有一种更聪明的方法来实现这一点。

1 个赞

你好 :waving_hand:

感谢 @nathank 为这个主题组件创建话题! :hugs:

我认为现在采用类似以下的方法应该可以生效。这种方法仅在初始加载时关闭侧边栏,之后将恢复为默认行为(记住用户的偏好设置)。

import { apiInitializer } from "discourse/lib/api";

const HIDE_SIDEBAR_KEY = "sidebar-hidden";
const INITIALIZED_KEY = "closed-sidebar-by-default-initialized";

export default apiInitializer("1.8.0", (api) => {
  const keyValueStore = api.container.lookup("service:key-value-store");
  const userGroups = settings.user_in_closed_sidebar_groups;

  if (userGroups) {
    if (!keyValueStore.getItem(INITIALIZED_KEY)) {
      keyValueStore.setItem(HIDE_SIDEBAR_KEY, "true");
      keyValueStore.setItem(INITIALIZED_KEY, "true");
    }
  } else {
    if (keyValueStore.getItem(INITIALIZED_KEY)) {
      keyValueStore.removeItem(HIDE_SIDEBAR_KEY);
      keyValueStore.removeItem(INITIALIZED_KEY);
    }
  }
});
1 个赞

该组件会在刷新页面时重新隐藏侧边栏。如果它能将隐藏设为默认状态,同时记住后续的任何更改,那就太棒了。

1 个赞

非常感谢 @Don

我已经将其整合到 TC 中,效果正如描述的一样。改进非常明显!!