功能
以以下格式在帖子中添加占位符:
[wrap=placeholder key=NAME description="您的姓名"][/wrap]
[wrap=placeholder key=COUNTRY default=US defaults=FR,DE,US,CN,AU,CA][/wrap]
您的邮箱:=NAME=-=COUNTRY=@example.com
结果将如下所示:
这用于邮件列表
您的邮箱:=ZNAME=-=ZCOUNTRY=@example.com
如上所示,包装器内的文本将用作长描述。
[wrap=placeholder key=NAME description="您的姓名"]
这用于邮件列表
[/wrap]
可用键
key:帖子中应被替换的键
default/defaults:默认值(多个值)
description:输入框的占位符文本
示例
# 创建新插件
rails g plugin =PLUGIN_NAME=
cd plugins/=PLUGIN_NAME=
我们用它来创建运行手册、操作指南和可重用模板(它将在代码块中生效)。请分享您的使用案例!
设置
翻译
默认值
toolbar.builder
添加占位符
builder.errors.no_key
需要提供键。
builder.title
添加占位符
builder.insert
插入
builder.key.label
键
builder.key.description
帖子中将被替换的 =Key=。
builder.description.label
描述
builder.description.description
在未设置值时显示在输入框上的描述。
builder.values.label
默认值(多个值)
builder.values.description
占位符的可选值(多个值)。如果定义了多个值,将使用下拉选择框。
由我们托管? 主题组件可在我们的标准版、商业版和企业版计划中使用。
66 个赞
j.jaffeux
(Joffrey Jaffeux)
2020 年9 月 24 日 21:10
35
像这样处理数学问题的主要问题是,你需要使用 eval(),而 eval 是不安全的,因此你需要使用某个库,它提供安全的 eval 实现,仅支持真实 eval 的一个有限子集。我不确定我们是否愿意为如此罕见的情况引入所有这些复杂性。
6 个赞
Benjamin_D
(Benjamin Decotte)
2021 年7 月 20 日 15:01
38
我试过了!这听起来像是一个很棒的“回复预览 + Redux + 原始帖子”功能,但是……:pensive: 我肯定漏掉了什么。如果我的理解没错,“回复模板”组件会处理原始内容(raw)并查找"占位符 ",而“占位符表单”组件装饰的却是渲染后的内容(cooked)?
我想做的是让用户轻松地在主题中添加一些问答(Q&A),尽量减少技术障碍、点击次数,甚至按键操作:heavy-sigh:
[wrap=placeholder key="question" description="question"][/wrap]
[wrap=placeholder key="réponse" description="réponse"][/wrap]
[wrap=template key="template-spoiler" action="reply" tagsList="#qui, #quand, #où, #comment"]
## 问题
=question=
### 回答
[spoiler]
=réponse=
[/spoiler]
---
*标签?*
[/wrap]
效果如下:
目前为止一切顺利,但不幸的是,点击模板按钮后,占位符 =question= 和 =réponse= 仍然保留在编辑器中。
j.jaffeux
(Joffrey Jaffeux)
2021 年7 月 20 日 16:48
39
是的,我不确定当时写这段内容时在想什么……我可能考虑的是不同的使用场景,但现在已经记不清了。
这种方式肯定行不通。我会再仔细思考一下……这两个主题组件当时都是实验性的,既然大家已经频繁使用它们,或许值得给予更好的对待。
7 个赞
Benjamin_D
(Benjamin Decotte)
2021 年7 月 23 日 08:09
41
我不清楚厨师厨房里在忙些什么,但通常我在等待时会往嘴里塞开心果之类的零食,结果居然弄好了(当然只是针对我特定的用途,毕竟我几乎不知道自己到底在做什么,不过嘛…… )
committed 06:04PM - 22 Jul 21 UTC
for the placeholders question and reponse
see discourse-placeholder-forms-theme… -component
4 个赞
j.jaffeux
(Joffrey Jaffeux)
2021 年7 月 23 日 09:53
42
理想情况下,我希望允许管理员自定义替换规则,但 eval 存在风险(在安全的 CSP 下甚至无法实现),因此我不确定该如何实现这一点……
3 个赞
sewid
(Sebastian)
2021 年8 月 20 日 14:41
43
首先,这是一个非常棒且实用的主题组件。
不过,我认为发现了一个 bug。如果在代码片段中使用包含反引号(`)的占位符,它将无法正常工作。例如,以下是一个 SQL 代码片段:
DELETE FROM `=TABLENAME=`
WHERE id NOT IN(
SELECT
id FROM (
SELECT
id FROM `=TABLENAME=`
ORDER BY
id DESC
LIMIT 20
) subquery);
TABLENAME 占位符永远不会被替换。
如果这也包含一些类似 Jinja2 的条件就好了。这样,例如,有人可以创建一个名为 red 的键,并将其映射到图标 ,orange 将映射到 。当然,没有这些我也可以,但拥有这些测试条件会很棒。
maiki
(maiki)
2022 年5 月 22 日 20:12
45
我真的很喜欢这个组件。
“你真的靠着=NOUN_1=生活吗?真是个=ADJECTIVE_1=的生活!”
“靠着它,和它一起,在它上面,在它里面,”=PERSON_1=说。“它是我的兄弟姐妹,是我的阿姨,是我的=NOUN_2=,是我的食物和饮料,是(=ADJECTIVE_2=)=VERBING_1=。它是我的=NOUN_3=,我不需要别的。它没有的东西不值得=VERBING_2=,它不知道的东西不值得=VERBING_3=。天哪!我们一起经历了多少=NOUNS_1=!无论是冬天还是夏天,春天还是秋天,它总是有它的=NOUN_4=和它的=NOUNS_2=。当二月=NOUNS_3=的时候,我的=NOUNS_4=和地下室里堆满了对我没用的=NOUN_5=,=COLOR_1=的=NOUN_6=从我最好的=NOUN_7=窗户边流过;或者当一切=ADVERB_1=地落下,露出像=FOOD_1=一样气味的=NOUN_8=斑块,=NOUNS_5=和=NOUNS_6=堵塞了水道,我可以=VERB_1=着=MOISTURE=的=NOUN_9=在大部分=NOUN_10=上,找到新鲜的=FOOD_2=吃,还有那些=ADJECTIVE_3=的人从=NOUNS_7=里掉出来的东西!”
原文来自 Standard Ebooks 版本 的 《柳林风声》 ,在线阅读 (搜索 By it and with it)。
10 个赞
Don
2023 年9 月 21 日 11:38
46
你好
感谢这个组件 它完美地契合了我现在想要实现的目标。实际上,我最初的想法是,如果能与 回复模板 组件结合使用就太棒了。但遗憾的是,正如上面的帖子所解释的,这是不可能的。
我找到了一个变通方法,可以用作模板,它与 链接到新主题 和 链接到新个人消息 一起使用。
这是我的做法:
创建一个占位符表单(为简单起见,我使用了 OP 中的示例)
Your email: =NAME=-=COUNTRY=@example.com
创建一个新主题的链接:
我在链接中设置了:
类别
标题
正文
如果你想添加空行,请使用 \,这样它就不会破坏链接,或者为了让它不可见,你可以使用 ,它会在新行中添加一个空格。它将成为模板的一部分,并创建空行,
<a href="https://meta.discourse.org/new-topic?category==CATEGORY=&title=This is a topic created by =NAME=&body=Hello :wave:
This is a test topic... Let's see the placeholder form.
\
Your email: =NAME=-=COUNTRY=@example.com">Use template as new topic</a>
创建一个主题预览
Selected category
=CATEGORY=
Topic title
This is a topic created by =NAME=
Topic body
Hello
This is a test topic… Let’s see the placeholder form.
Your email: =NAME=-=COUNTRY=@example.com
创建“用作新主题的模板”按钮(在上面的示例中,这是一个链接,你可以将其制作为按钮)
用这个文本创建一个 [wrap] 元素。这使得它可以通过 CSS 进行定位和样式设置。我将其添加到下面。
<a href="https://meta.discourse.org/new-topic?category==CATEGORY=&title=This is a topic created by =NAME=&body=Hello :wave:
This is a test topic... Let's see the placeholder form.
\
Your email: =NAME=-=COUNTRY=@example.com">[wrap=template-button]Use template as new topic[/wrap]</a>
样式化 [wrap=template-button]
类似这样
Common / CSS
[data-wrap="template-button"] {
background: var(--tertiary);
color: var(--secondary);
border-radius: var(--d-button-border-radius);
padding: 0.5em 0.65em;
transition: background 0.25s;
&:focus,
&:hover {
background: var(--tertiary-hover);
color: var(--secondary);
}
}
模板按钮看起来会像这样
演示
Use template as new topic
希望这个小教程能帮助到需要类似功能的人
编辑:我设置了一个类别选择器,它增加了在不同类别中创建主题的功能。
查看此帖子的原始版本…
9 个赞
Lilly
2023 年9 月 21 日 12:53
47
太棒了,Don,谢谢你。这实际上非常符合我的一个需求
2 个赞
jericson
(Jon Ericson)
2024 年1 月 4 日 05:03
48
需要注意的是,代码块有时会引起问题:
usermod -aG sudo =USERNAME=
在这种情况下,highlight.js 会将其假定为 Java 并将代码块转换为:
<code class="hljs language-java" data-highlighted="yes">
usermod -
<span class="hljs-type">aG</span>
<span class="hljs-variable">sudo</span>
<span class="hljs-operator">=</span>
USERNAME=
</code>
我可以通过将其标记为实际上是 shell 命令来修复它:
```shell
usermod -aG sudo =USERNAME=
```
结果是:
usermod -aG sudo =USERNAME=
如果所有其他方法都失败了,text 可以阻止 highlight.js 干扰占位符。
一个更通用的解决方案(Meta Discourse 似乎正在使用)是将 default code lang 设置从 auto 更改为 plaintext 或其他类似选项。
虽然这关系不大,但使用 java 是避免在你想写关于占位符时占位符展开的一种方法。
1 个赞
这是一个很棒的功能,我可以看到它的许多用途。
但是,在我们的回复中,是否有可能在用户开始在文本框中键入之前隐藏=(name)=?我认为用户(尤其是新用户)可能不理解它的用途,或者它看起来格式不正确。
此变通办法似乎不再有效。
是否有其他选项可以将 reply-template 和 placeholder-forms 结合起来?
tobiaseigen
(Tobias Eigen)
拆分了此话题
2025 年10 月 23 日 20:22
64
4 个帖子已拆分为新主题:链接在占位符表单中不起作用