Discourse 作为学习管理系统 / Discourse 与学习管理系统的集成

和这个帖子中的许多朋友一样,我一直在寻找一种轻量级的方法,将 Discourse 原生用作学习管理系统(LMS)。我发现专门的 LMS 平台过于臃肿,但 Discourse 默认的“通知衰减”机制(即旧话题对新用户不再显示为“未读”)使得跟踪课程进度变得困难。

为了解决我自己的痛点,我构建了一个简单的解决方案,结合了分类设置、一个小型后端插件和一个主题组件。

以下是我的设置方法,以及你可以用来复现的开源代码!

基本概念:将 Discourse 作为 LMS

为了实现这一目标,我结合了 Discourse 的标准功能和官方 Discourse Doc Categories 插件

  • 课程 = 分类:每个课程拥有独立的分类。
  • 课时 = 话题:每个课时是该分类下的一个话题。
  • 权限:成员可以回复课时(提问),但只有工作人员可以创建新话题。
  • 排序:课时顺序由创建日期固定。(提示:发布课时时需要稍微提前规划,或者你可以使用 Rails 控制台快速将话题创建时间回溯,以强制正确的排序)。
  • 教学大纲:我使用 Discourse Doc Categories 插件指定一个“索引话题”。该索引话题充当课程大纲/进度追踪器,当用户进入课程时,会在侧边栏渲染出精美的目录结构。

缺失的一环:真正的进度追踪

上述设置的问题在于,当新学生加入时,旧的课时话题不会显示为“未读”,因此他们无法直观地追踪自己的进度。

为了解决这个问题,我构建了一个后端插件,直接查询 TopicUser 数据库表以获取真实的历史阅读状态,并配合一个前端主题组件,将标准的 Discourse 侧边栏转变为实时的 LMS 进度追踪器。

1. 主侧边栏进度徽章

该主题组件将标准的蓝色通知圆点替换为课程分类的 [已读 / 总数] 进度指示器。

2. 课时完成勾选标记

当用户点击进入课程时,Doc 插件会渲染教学大纲。我的主题组件会在用户已阅读完毕的特定课时旁注入成功勾选标记(fa-check)。

3. 课程完成

一旦用户阅读了该分类下的所有话题,侧边栏的进度徽章会自动变为令人满意的完成勾选!

如何安装

由于这需要绕过 Discourse 的标准通知缓存,你必须同时安装后端插件和前端主题组件。

步骤 1:安装前置依赖
确保已安装并激活官方 Discourse Doc Categories 插件。我的插件专门针对配置了索引话题的分类。

步骤 2:安装后端 API 插件
app.yml 中的 docker_manager 下方添加以下内容,并重建你的容器。这将提供用于读取状态的极速 API 端点。
:hammer_and_wrench: 仓库链接: https://github.com/zsviczian/discourse-course-progress

hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/zsviczian/discourse-course-progress.git

步骤 3:安装 UI 主题组件
直接在网页浏览器中通过 管理 > 自定义 > 主题 > 安装 > 从 Git 仓库 进行安装。
:hammer_and_wrench: 仓库链接: https://github.com/zsviczian/discourse-course-progress-theme

希望这能帮助其他试图在不依赖独立 LMS 平台臃肿功能的情况下构建社区驱动课程的人!如果你最终使用了它,请告诉我。

3 个赞