进阶 docs.flarum.org 2026-10-15 14:50:53 · 21 阅读

第34章 Flarum Deck:多列实时信息流扩展详解

版本:2.x Deck Deck 扩展(flarum/deck)为成员提供了一个多列并排的实时页面,让他们无需离开即可追踪自己关注的每一场讨论。每一列都是一种信息流:未读讨论、某位成员发布的所有内容、某个标签下的帖子,或者自己的通知。随着论坛动态更新,Deck 会保持每一列内容实时同步。它是一个内置扩展,但在新安装中默认未启用。 Deck 位于论坛的 /deck 路径。成员可以通过论坛导航栏中的 Deck 入口打开它。 面向开发者:任何扩展都可以添加自己的列类型。开发者指南请参阅 Adding columns to Deck。 安装 该扩展随 Flarum 一起发布。在管理后台的扩展页面启用它,然后在权限设置中决定哪些用户可以使用。 如果你的安装中缺少该扩展,可以像安装其他包一样引入它,然后启用: composer require flarum/deck
php flarum cache:clear
Columns 成员通过添加列来构建自己的 Deck。操作方式很简单:点击“添加列”,选择类型,填好所需信息,再点击一次“添加列”即可。Deck 支持以下几种列类型: 讨论类型 | 显示内容 所有讨论 | 该成员能看到的每场讨论,按最近活跃排序 未读 | 成员尚未阅读的讨论。一旦读完,该讨论便从此列移除 通知 | 成员的通知列表。这与页头通知相同,在任一处阅读后另一处也会同步更新 某成员的讨论 | 指定成员发起的讨论。列标题为“由…发起”,并显示该成员姓名 某成员的主贴 | 指定成员发布的帖子,按时间倒序 某分组的帖子 | 指定分组内成员发布的帖子,按时间倒序。“访客”和“成员”分组不可选 某场讨论 | 选定讨论中的最新帖子,顶部有“打开讨论”链接可跳转至原帖 自定义筛选 | 匹配特定筛选条件的讨论。筛选语法与论坛搜索一致,例如 tag:support is:unread 正在输入的活动 | 显示论坛各处的实时输入状态。详见“正在输入的活动”章节 其他扩展功能也会引入自定义列,例如针对某个标签或被标记帖子的列。参见“与其他扩展协同工作”。 自定义筛选仅接受筛选参数,如 tag:、author:、is:unread 或 is:following,已安装的扩展功能可能提供更多选项。不支持纯文本搜索:因为文本搜索会在每次刷新列时重新执行,所以 Deck 要求使用筛选器而非关键词。 如果所选类型已存在于 Deck 中,会标记为“已在 Deck 中”,若有多个则显示数量。像“未读”这类无选项的类型,在 Deck 中只能存在一个。 讨论也可以直接从其页面添加:在讨论页面的控制菜单中点击“添加到 Deck”,就会创建对应的列。如果该讨论已作为列存在,或 Deck 已满,则不会显示此选项。 列仅显示成员原本在论坛其他位置就能查看的内容。列本质上是代表成员执行的筛选列表或搜索,因此遵循与其他论坛区域相同的访问规则。 调整 Deck 布局 成员可以按喜好自由排列 Deck,Deck 会记住该布局并同步到成员账户,确保在所有设备上显示一致。 拖动列的手柄即可移动列,也可通过列菜单中的“左移”或“右移”操作。菜单支持键盘和屏幕阅读器,并能播报列的移动位置。 可启用两行布局。将列拖到第一行下方,Deck 会显示“在此放置列以创建第二行”;或通过列菜单选择“移至底行”。两行均有列后,中间的分割线可拖动以调整高度分配。 拖动列边缘可调整宽度,或聚焦边缘后使用方向键(按住 Shift 键可大步长调节)。在列菜单中“重置宽度”或双击边缘可恢复默认值。列宽范围为 240 至 900 像素,会根据所在行比例伸缩。 在列菜单中点击“移除列”即可删除该列。 在手机上,每个列占满屏幕。成员可通过滑动切换列,或使用顶部的标签页导航,标签页也可拖拽重新排序。若屏幕高度小于 640 像素,两行布局会合并为单行横条,而非堆叠显示。 工具栏中的“全屏”模式会隐藏论坛页头和导航,让 Deck 占据整个窗口。按 Esc 键可恢复。此时工具栏会出现“发起讨论”按钮,方便成员继续发帖。页面介绍可永久隐藏,点击“隐藏此介绍”即可。Deck 会将全屏和隐藏介绍的状态保存在浏览器中,而非成员账户。 成员未手动调整前,会得到默认布局:若启用“订阅”功能,默认为“关注”;否则为“所有讨论”,外加“未读”和“通知”。工具栏选项菜单中的“重置列”会在确认后恢复默认布局,此操作不可撤销。 若因扩展禁用或权限不足导致某列无法显示,该列会被隐藏但保留配置。当条件满足时,列会自动恢复显示。 保持实时更新 列的更新方式取决于 Realtime 是否连接。 连接 Realtime 时,新活动会实时出现在列顶部。即使成员向下滚动,也会保留当前位置。Realtime 连接期间不进行轮询,断线重连后 Deck 会一次性同步缺失内容。 未连接 Realtime 时,Deck 会按刷新间隔检查所有列。新活动会显示在列顶部的“N 条新内容”按钮后,避免列表位置跳动。点击该按钮或在列菜单中选择“刷新”即可加载新内容。 即使连接 Realtime,非按最新活动排序的列也会将新内容保留在“N 条新内容”按钮后,因为新内容并非必须置于此类列的顶部。 成员离开后返回标签页时,Deck 也会检查更新。当列滚动至可视区域时,会自动同步最新内容。从 Deck 跳转到讨论再返回时,所有列的内容和滚动位置都会保持原样。 正在输入的活动 “正在输入的活动”列显示论坛内谁在何处输入,例如“Alex 正在回复‘搬家计划’”或“Sam 正在‘支持’板块发起讨论”,以及停止输入者的最后活动时间。此功能依赖 Realtime,且仅向符合以下条件的成员开放: 在权限页面的“管理”部分拥有“查看论坛任意位置正在输入的人”权限(由 Realtime 添加); 所在论坛已启用 Realtime 的“正在输入指示器”设置。 若无 Realtime 实时连接,该列会提示“正在输入的活动需要 Realtime 服务器的实时连接”。 该列仅显示成员原本就能获知的信息: 看不到的讨论中的输入活动不会发送; 隐藏在线状态的成员显示为“某人”,除非查看者拥有“始终查看用户最后在线时间”权限; 新讨论的标签仅显示查看者可见的部分; 私信中的输入活动永不显示。 权限 在管理面板的“权限”页面,“查看”区域下进行设置: 权限 | 默认授权对象 | 允许的操作 使用 Deck | 成员 | 打开 Deck 及调整布局。访客无法获得此权限。 未获得“使用 Deck”权限的成员看不到入口链接,无法打开页面,也无法修改已保存的布局。若重新授予权限,其之前保存的列会保留。 部分列需要额外权限:“正在输入的活动”列的权限要求参见前述章节,其他扩展添加的列权限参见“与其他扩展协同工作”。 设置 在管理面板“扩展”页面的 Deck 设置项中配置: 设置项 | 默认值 | 功能说明 每成员最大列数 | 8 | 成员 Deck 可容纳的列数,范围 1 至 12。每列刷新时都会发起独立请求,列数越多服务器负载越高。 刷新间隔(秒) | 60 | 未连接 Realtime 时列检查新活动的频率。设为 0 可关闭检查,最小值为 15 秒。 降低最大列数限制不会移除成员已有的列,但会阻止其添加新列,并在下次调整布局时将 Deck 裁剪至新限制。 与其他扩展协同工作 Deck 可独立运行,启用以下扩展后将获得额外功能: 扩展功能 | 为 Deck 增加的功能 Realtime | 列内容随活动实时刷新,而非定时轮询;启用“正在输入的活动”列 订阅 | 增加“关注”列,显示成员订阅的讨论;同时在默认布局中替代“所有讨论” 标签 | 增加“标签”列,成员可搜索并跟踪特定标签 标记 | 增加“被标记帖子”列(仅限有查看权限的成员),列出未处理标记的帖子,按最近标记排序,每帖附带标记控制按钮 消息 | 增加“消息”列,显示成员会话列表;与消息页同步,任一处阅读均会更新另一处

评论 (0)