WB Polls
创建投票,让访客或会员投一次票,并在站点的任何位置显示实时结果。
插件
WB Polls
创建投票,让访客或会员投一次票,并在站点的任何位置显示实时结果。
描述
WB Polls 让站点所有者提出一个问题,并在任何 EmDash 页面上显示实时结果。
你将获得
- 创建带有两到十个选项的投票,可单选或多选。
- 准备好时开启,需要停止投票时关闭,或设置关闭时间。
- 选择谁可以投票:任何人,或仅限已登录的会员。
- 选择结果的显示时机:始终显示、投票后显示,或投票关闭后显示。
- 选择匿名汇总,或站点所有者可见的实名结果。
- 把投票附加到某一个页面、某种内容类型的每一条内容,或整个站点。开发者也可以按 id 放置特定的投票。
- 把投票复制成一份没有票数的新草稿。
它们如何协同工作
插件是引擎:存储、投票路由和管理界面。EmDash 插件无法添加页面,因此可见的投票以站点套件的形式提供,你只需复制一次。参见安装。
当你允许任何人投票,且你的主机把访客的地址提供给 EmDash(Cloudflare,或 trustedProxyHeaders)时,访客可以投票。会员以其已登录的账户投票。只有你可以创建和管理投票。
安装
安装之前
1. 你的站点需要沙盒运行器。 注册表插件在沙盒中运行。在站点配置好之前,Admin、Plugins 会显示 “No plugins configured”,菜单中也没有 Registry。
- Node: 在你的站点中运行
npm install @emdash-cms/sandbox-workerd workerd,然后在astro.config.mjs的emdash()内添加sandboxRunner: "@emdash-cms/sandbox-workerd/sandbox",。 - Cloudflare: 添加
import from "@emdash-cms/cloudflare";和sandboxRunner: sandbox(),。这需要 Workers Paid 套餐、名为LOADER的worker_loaders绑定(在你的 Wrangler 配置中取消注释)以及作为storage: r2(...)的 R2 存储桶,否则安装会因 “Storage error while installing plugin” 而停止。然后运行npm run deploy。
停止开发服务器并重新启动。Registry 现在会显示在管理菜单中。
2. 插件是引擎。访客页面来自它的站点套件。 注册表插件无法向你的站点添加页面。在你复制套件之前,它的地址(例如 /account/votes)会显示你站点的 404 页面。这是正常的。下面复制套件只需一条命令。
已在 EmDash 1.3.1 上使用 blog 模板验证,涵盖 Node 和 Cloudflare Workers(注册表安装)。
安装步骤
-
Admin、Registry,搜索 WB Polls,Install,然后接受权限。
-
在你站点的根文件夹中:
kit="$(mktemp -d)" && git clone --depth 1 \ --branch v0.5.0 \ https://github.com/wbcomdesigns/emdash-polls \ "$kit/emdash-polls" && "$kit/emdash-polls/scripts/add-to-site.sh" . -
粘贴它打印出的那几行。重启开发服务器。
-
在 Admin、Menus 中添加它打印出的菜单链接。
-
在管理后台打开 Polls。
更新后,使用新标签再次运行第 2 步。
指南:https://github.com/wbcomdesigns/emdash-polls/blob/v0.5.0/docs/website/getting-started/install.md
常见问题
我更新了插件,结果投票停止了。
请再次复制站点套件。注册表安装通过一个 id 响应,而不是 /polls/。当前的套件能找到这个 id。
为什么我创建投票后页面上没有显示? 创建出来的是草稿。从列表中打开该投票。然后把它附加到页面、内容类型或整个站点,并在该模板上放置一个投票位。
访客可以投票吗?
可以,前提是你把 Who can vote 设置为 Anyone,并且主机把访客的地址提供给 EmDash:在 Cloudflare 上,或把 trustedProxyHeaders 设置为由你的代理自己写入并替换的标头(在 nginx 后面用 x-real-ip;绝不要用追加式的 X-Forwarded-For)。否则,访客会被要求登录,Polls 界面也会这样提示。每位访客一票。已登录的会员以自己的身份投票。
浏览器控制台中的 401 有问题吗? 没有。访客在每个投票上会因会员投票检查收到一次 401,在 My votes 上也会收到一次。投票就是这样得知访客尚未登录,然后显示访客视图。
谁能看到投票者的姓名? 只有你,而且只限实名投票。访客保持匿名。匿名投票从不保存姓名。
它支持深色模式吗? 支持。套件会跟随访客的系统设置。
我能把投票放在文章中间吗? 注册表安装不行。请把它附加在内容上方或下方,或在模板中放置 “。文中区块需要受信任的安装;该路径是可选的,不会改变注册表产品。
有付费版本吗? 没有。这里的一切都是免费的。
为什么它要求读取我的内容? 这样,附加在草稿上的投票会保持隐藏,直到你发布该页面。WB Polls 只会检查页面是否已发布,并按名称列出你的内容类型。
更新日志
0.5.0
现在,每个投票页面、投票操作和管理界面都符合 Cloudflare 每次插件调用最多 10 个请求的限制。
- 新增 - 每个投票都会保留一个累计总数,因此无论投票规模多大,结果都只需一次读取即可显示。
- 新增 - Results 提供 Recount votes,可根据已存储的票数重新统计投票。
- 改进 - 删除投票会立即将其隐藏;其票数(包括姓名)会在你打开管理界面时被清除。
- 改进 - 开启和关闭时间在每次查看时都从投票的日期中读取。
- 修复 - 在 Cloudflare 上,访客投票保存后不再显示 “Something went wrong”。
- 修复 - 在 Cloudflare 上,Polls 界面、Results、My votes 和 Poll 面板在繁忙的站点上不再失败。
早期版本的投票会在第一次打开时重新统计。更新后,请在站点根文件夹中再次复制套件:
kit="$(mktemp -d)" &&
git clone --depth 1 \
--branch v0.5.0 \
https://github.com/wbcomdesigns/emdash-polls \
"$kit/emdash-polls" &&
"$kit/emdash-polls/scripts/add-to-site.sh" .
0.4.0
- 新增:Read your content 权限,使草稿页面上的投票在你发布之前保持隐藏。
- 新增:Set up visitor pages 卡片和
scripts/add-to-site.sh,一条命令即可复制套件。 - 安全:只有在主机提供访客地址的情况下,访客才能投票。同一位投票者同时发出的两次投票只算一次。
0.3.0
- 新增:列表上的投票统计、结果条形图,以及可选的用于文章正文的 This page’s poll 区块。
早期版本:https://github.com/wbcomdesigns/emdash-polls/blob/main/CHANGELOG.md