社区支持 - 可配置捐赠

安装此主题组件

你好 :waving_hand:

我们的目标是使其足够灵活,以适应非常不同的社区设计和用例,同时将所有配置完全保留在主题设置中。

:sparkles: 功能

:heart: 捐赠/支持模态框

该组件可以选择性地自动显示支持模态框。

自动模态框支持:

  • 可配置的打开延迟
  • 基于 URL/路径的可见性
  • 成员/匿名可见性
  • 最低信任级别
  • 排除的群组
  • 可配置的关闭 Cookie 生命周期
  • 三种模态框尺寸:normal(正常)、large(大)、maximized(最大化)

也可以通过以下方式从任何地方手动打开模态框:

#donate

这是有意独立于自动可见性规则的,因此社区可以分享 #donate 链接或将其添加到侧边栏,同时仍然控制自动支持提示出现的位置。


:credit_card: 捐赠/支持方式

可以使用 Discourse 的对象设置编辑器配置多种支持方式。

每种方式可以拥有:

  • 名称
  • 描述
  • 提供商
  • 所有者
  • 图标
  • URL
  • 按钮文本
  • 可复制的值
  • 精选状态
  • 翻译

这是与提供商无关的,因此该组件不需要特定的支付提供商。

例如,一种方式可以简单地指向现有的 PayPal、Revolut、Wise 或其他支付/支持页面。


:globe_showing_americas: 每种方式的本地化

捐赠方式支持自己的翻译。

语言选择器包含可用的 Discourse 语言,并且每种方式都可以翻译:

  • 名称
  • 描述
  • 按钮文本
  • 复制标签
  • 所有者
  • 提供商

如果没有确切的语言可用,组件会回退到基础语言,然后是英语/其他可用的翻译。


:bar_chart: 支持目标 & 进度条

该组件包含一个可选的支持目标和进度条。

您可以配置:

  • 当前金额
  • 目标金额
  • 货币
  • 支持标签
  • 支持周期
  • 进度显示
  • 支持条出现的位置

支持的周期:

  • 一次性
  • 每月
  • 每年

进度条还处理超额支持

它不会简单地停在 100%,而是继续显示实际百分比:

75%   → 正常进度
100%  → 达到目标
125%  → 进入下一个目标周期的 25%
220%  → 进入第三个目标周期的 20%

视觉进度条保持为单个紧凑的条。

在第一个目标之前:

background: tertiary-low
fill:       tertiary

在恰好 100%、200%、300% 等时:

background: success
fill:       success

Screenshot 2026-09-14 at 7.39.26

在里程碑之间:

background: success-low
fill:       success

Screenshot 2026-09-14 at 7.39.52

这意味着即使社区显著超过其原始目标,也可以继续显示有意义的进度。


:bust_in_silhouette: 支持者头像

支持条可以选择性地显示支持者头像。

支持者目前通过 supporters 对象设置手动配置。

每个支持者可以拥有:

  • 用户名
  • 贡献金额
  • 货币

用户名会根据用户资料进行解析,因此可以自动显示用户的个人资料/头像信息。

直接显示在支持条中的头像数量是可配置的。

例如:

◉ ◉ ◉ ◉ ◉ +8

如果支持者数量超过配置的可见头像数量,剩余的支持者可以通过DMenu访问。

支持者菜单可以显示:

  • 头像
  • 用户名
  • 资料链接
  • 贡献金额
  • 货币

可以独立启用或禁用贡献金额。

还可以使用 supporter_groups 设置从一个或多个群组中填充支持者。这补充了手动配置的支持者列表,而不是替换它。


:artist_palette: 多种设计

该组件包含三种独立的视觉设计:

  • Classic(经典): 平衡的社区风格展示
  • Minimal(极简): 减少视觉装饰和紧凑的展示
  • Modern(现代): 更强的层次感和更突出的卡片

设计独立于所选视图,因此两者可以自由组合。


:puzzle_piece: 多种视图

该组件支持几种展示模式:

  • Full(完整): 包含英雄区域、精选方式和捐赠方式的完整支持内容
  • Compact(紧凑): 用于较小放置位置的简化展示
  • Minimal(极简): 以方式为重点的展示
  • Progress(进度): 仅支持目标和进度

这允许在非常不同的位置使用相同的组件,而无需重复配置或样式。


:notebook: 帖子嵌入

支持内容可以直接嵌入到帖子中。

启用 enable_post_embed,然后使用:

[wrap=donate]
[/wrap]

可以通过包装器直接访问其他视图:

[wrap=donate-compact]
[/wrap]

[wrap=donate-minimal]
[/wrap]

[wrap=donate-progress]
[/wrap]

包装器控制视图,而全局 design 设置控制视觉设计。

当支持内容需要成为特定帖子上下文的一部分,而不是作为全局 UI 元素出现时,这非常有用。


:electric_plug: 插件出口支持

该组件可以通过插件出口渲染支持小部件。

启用 outlet_enabled 并在 outlet_locations 中指定所需的出口名称,用 | 分隔。

出口视图和设计可以独立配置:

  • outlet_view
  • outlet_design

这使得可以在主题列表、页眉、页脚和其他支持的出口位置使用支持组件。


:loudspeaker: Discourse Ads 兼容性

该组件也可以与 Discourse Ads 插件一起使用。

而不是直接依赖 Ads 插件,Community Support 提供了一个稳定的 HTML 嵌入标记:

<div data-donation-widget="support"></div>

这可以复制到 HTML 广告中,并放置到所需的 Ads 出口中。

组件拥有标记和 CSS,因此无需在广告本身中重复捐赠样式。

可以选择性地覆盖视图和设计:

<div
  data-donation-widget="support"
  data-view="compact"
  data-design="minimal"
></div>

这意味着可以在不同的 Ads 位置重用相同的支持系统,同时保持一致的设计。


:globe_with_meridians: 通用 HTML 嵌入

相同的嵌入机制也可以用于其他支持 HTML 的位置:

<div data-donation-widget="support"></div>

HTML 标记有意保持简单,而主题组件处理实际的渲染。

这使得可以在不重写每个单独嵌入的情况下更改设计或组件实现。


:eyes: 可见性控制

自动和全局渲染的支持内容可以通过几个设置进行控制:

  • 对成员显示
  • 对匿名用户显示
  • 最低信任级别
  • 排除的群组
  • 在主页上显示
  • URL/路径匹配

排除的群组应用于自动渲染的支持内容,例如模态框、插件出口小部件和通用嵌入。

上下文内容仍然可用:

  • #donate
  • [wrap=donate]

这使得可以排除某些用户访问促销/自动支持 UI,同时不阻止他们访问明确分享的支持链接或上下文支持块。


:cookie: 关闭 / Cookie 控制

当自动打开的模态框被关闭时,组件可以记住该决定。

Cookie 生命周期可以配置为:

  • 分钟

这防止自动模态框根据所选的生命周期反复向同一访客出现。


:memo: 基本示例

打开支持模态框

#donate

在帖子中嵌入支持内容

[wrap=donate]
[/wrap]

紧凑帖子版本

[wrap=donate-compact]
[/wrap]

通用 HTML 嵌入

<div data-donation-widget="support"></div>

带有自定义展示的嵌入

<div
  data-donation-widget="support"
  data-view="compact"
  data-design="minimal"
></div>

:heart: ./support --coffee

8 个赞

不错,而且如今确实非常需要。

不过与此同时,我也有些苦涩,因为在我居住的国家,以这种方式募捐是违法的。在芬兰,我们必须卖点什么——或者冒风险。当然,这完全跑题了。

2 个赞