在这个论坛可以写作带有很简单交互选项的文章,具体来说是允许读者自定义人物姓名、选择剧情分支等。
这个功能在 2023 年 10 月进行了改动。如果你已经熟悉之前的语法,则可只阅读本次改动的内容。如果你不需要完整掌握此功能,只需要实现简单的隐藏内容、投票这两个功能,可以参见下面楼层里的简短示例。这个功能在 BBCode 中新增了 input、option、var 和 if 这四个标签。
基本语法:input 标签input 标签用于让用户输入内容或者选择选项。它的基本语法是:
[input=标识符 type=类型]任意提示文字[/input]
对于每个 input 标签,你可以自行选择一个标识符,它不会被用户看到。你可以将它看作一个变量名;用户选择的选项或是输入的内容,将会被存入这个变量中。标识符可以含有汉字、英文、数字等,但不可含有空格或符号。
input 标签中必须指定一个 type。类型的值必须是以下三种之一:
- name:允许用户自己输入一个汉语姓名(当前不支持其它民族的姓名);
- text:允许用户自己输入任意文字(不超过 30 字);
- select:允许用户从多个选项中选择一个。
对于每一种类型,后文将详细举例说明。
input 标签可以不设置默认值,也可以通过
default=默认值 的额外参数指定默认值,后文将详细举例说明。
基本语法:var 标签var 标签非常简单:它让你在文章中显示某个变量的值(换句话说,显示用户在某个 input 中输入的内容):
惟请注意,对于 type=select 类型的 input,无法使用 var 读取其内容。
基本语法:if 标签通过 if 标签,可以控制仅在某个变量为特定的值时显示内容(换句话说,仅当用户在某个 input 中输入的内容为特定的值时显示内容):
这里的内容总会显示
[if=标识符=答案]这里的内容仅当输入正确时才会显示[/if]
这里的内容总会显示
下文段落还会介绍 if 更复杂的用法。
当 input 标签 type=name 时:允许读者自定义人物姓名type=name 的 input 标签允许读者自己输入一个汉语姓名。你之后可以使用 var 标签来显示它。
「我来自一年级一班」,我说道:「名字叫[input=hero type=name default=诸葛孔明]男主姓名[/input]。」
[input=mistress type=name]女主姓名[/input]不屑着:「[var]hero[/var]吗?真是个普通的名字呢。」
以上代码便将产生以下效果:
「我来自一年级一班」,我说道:「名字叫
。」
不屑着:「
吗?真是个普通的名字呢。」
可以看到,第一个 input 使用了
default=诸葛孔明 指定当用户未输入内容时的默认姓名。而第二个 input 并没有指定;这种情况下将会随机生成一个姓名作为默认姓名。
为隐私考虑,对于 type=name 的 input,任何人无法看到其他人输入的内容是什么,不提供任何统计数据。
var 标签的进阶用法:提取姓名中的一部分内容在 input 处定义的变量除了直接放在 var 中外,也可以使用
FN(标识符) 提取姓氏、
GN(标识符) 提取名字,或
LC(标识符) 提取最后一个字。例如以下代码:
[var]FN(hero)[/var]同学和[var]FN(mistress)[/var]同学成为了同桌。
他对她说道:「小[var]LC(mistress)[/var],我想做你的断脊之犬!」
「[var]GN(hero)[/var],你快醒一醒!」[var]mistress[/var]提醒着他。
以上代码将产生以下效果:
同学和
同学成为了同桌。
他对她说道:「小
,我想做你的断脊之犬!」
「
,你快醒一醒!」
提醒着他。
当 input 标签 type=text 时:允许读者输入任何文字和上面非常类似,但输入值不限于汉语姓名。
[var]hero[/var]手上拿着[input=object type=text default=限量版粉红色假屌]手上拿着的东西[/input],正在浏览这个页面。
怎料[var]mistress[/var]夺过他手上的[var]object[/var],径直塞到了他的菊花里。
以上代码将产生以下效果:
手上拿着
,正在浏览这个页面。
怎料
夺过他手上的
,径直塞到了他的菊花里。
与前面 type=name 时类似,读者可以输入内容,而 var 标签可以显示出读者输入的内容。
与前面类似,你同样可以使用
default=默认值 的语法来指定默认值,若不指定默认值,且用户也没有输入,会显示为「 ???」。此外,使用
username 属性,可以以当前读者的用户名为默认值。例如下面这个例子,对于已登入用户,将显示其用户名,对于未登入用户则显示「无名氏」:
[input=example name=text username default=无名氏][/input]
[var]example[/var]
对于 type=name 的 input,用户可以点击输入框下方的「统计」按钮给出常见回答的人数。为隐私考虑,仅当多个用户都输入同一内容时,该内容才会出现在统计数据中。你可以使用 private 参数来阻止统计数据的显示:
[input=标识符 name=text private][/input]
这样一来,便只有作者能看到统计数据。
当 input 标签 type=select 时:让读者从几个选项中选择其一这种情况下,需要在 input 标签内部直接增加 option 标签,例子如下:
[input=选单 type=select]
[option=1]花里胡哨的选项一[/option]
[option]选项二[/option]
[/input]
你可以看到,第一个 option 明确指定了自己的标识符为「1」,这是相对推荐的做法。但如果的选项描述很简短、不含特殊字符且不会变更的话,可以像第二个选项那样,自动使用 option 标签里面的「选项二」作为标识符。
来看一个示例:
今天早上,我走到教室里,看到[input=example type=select default=cat]
[option=op]楼主[/option]
[option=cat]一只猫[/option](猫猫很可怜,放过它吧)
[option=hero][var]hero[/var][/option]
[option=trap]一个[color=pink]伪娘[/color][/option]
[/input]躺在地上。
[if=example=op]楼主正在教室的地上撸管。[/if]
[if=example=cat]我抱起猫来就逼它变身。[/if]
[if=example=hero]我便躺到[var]GN(hero)[/var]的身边。[/if]
[if=example=trap|example=op]我跪下去就开始舔起他的鸡儿。[/if]
以上代码将产生以下效果:
今天早上,我走到教室里,看到
躺在地上。
楼主正在教室的地上撸管。
我抱起猫来就逼它变身。
我便躺到的身边。
我跪下去就开始舔起他的鸡儿。
与前面类似,你同样可以使用
default=默认值 的语法来指定默认值,若不指定默认值,则默认不选中任何选项。
对于 type=select 的 input,选项列表底部的「统计」按钮将会显示出每一个选项的选择人数。同样,你可以使用 private 参数来使得其它人无法查看统计数据,只有作者本人可以。
if 的进阶用法与详尽说明如上面的最后一个 if 标签所示,使用 if 时,可以组合多个条件。
在等号后紧接着的条件表达式里可以使用 & 来表示「且」,| 来表示「或」,但是不可以含有空格,也不可以有括号。& 比 | 优先结合,也就是说表达式将按照
DNF 被解析。例子如下:
哥哥的内裤是[input=m type=select default=灰色][option]白色[/option][option]灰色[/option][option]黑色[/option][/input]的
而妹妹的内裤是[input=s type=select][option]白色[/option][option]灰色[/option]还是[option]黑色[/option]呢[/input]的
[if=m=白色&s=白色|m=灰色&s=灰色|m=黑色&s=黑色]两个人内裤颜色是相同的♥[/if]
[if=m=白色&s=灰色|m=白色&s=黑色|m=灰色&s=黑色]妹妹的内裤颜色竟然比哥哥深[/if]
[if=m=黑色&s=灰色|m=黑色&s=白色|m=灰色&s=白色]哥哥的内裤颜色果然比妹妹深[/if]
[if=s=]你还没有做出选择[/if]
以上代码将产生以下效果:
哥哥的内裤是
的
而妹妹的内裤是
的
两个人内裤颜色是相同的♥
妹妹的内裤颜色竟然比哥哥深
哥哥的内裤颜色果然比妹妹深
你还没有做出选择
对于 if 的使用,另有以下注意事项:
- 可以使用 != 来表示「不等于」,例如:
- 每一个等号左侧必须是标识符(变量名),右侧必须是一个值。不可以直接比较两个变量,例如下面这样就不可以:
- 所有的判定对于大小写、繁简体不敏感,无论以大小写、繁简体输入都可以:
[input=输入框 type=text default=A]这里输入 A 或者 a 都一样[/input]
[if=输入框=a]好![/if]
- 当 input 没有指定默认值,用户也没有进行选择或输入时,无论显示成什么,if 将会按照它为空来进行比对,例如:
[input=name示例 type=name][/input]
[input=text示例 type=text][/input]
[input=select示例 type=select][option]1[/option][option]2[/option][/input]
[if=name示例=&text示例=&select示例=]三个 input 都没有选择或输入[/if]
[if=name示例=&text示例=&select示例!=|name示例=&text示例!=&select示例=|name示例!=&text示例=&select示例=]两个 input 没有选择或输入[/if]
[if=name示例!=&text示例!=&select示例=|name示例!=&text示例=&select示例!=|name示例=&text示例!=&select示例!=]仅一个 input 没有选择或输入[/if]
[if=name示例!=&text示例!=&select示例!=]全部 input 都选择或输入了[/if]
如果你的 input 有指定默认值,则它的值永远不会为空; - 为照顾使用者习惯,= 也可以写作 ==,& 也可以写作 &&,| 也可以写作 ||;
- if 只能包含整段文字;无法在一行文字中间插入 if。
当前的限制对于编写任何类型的交互内容:
- 暂时没有所见即所得编辑器的支持,必须手动使用 BBCode;
- 只有一个主题的楼主才可以使用此功能,其它回帖者不能使用;
- 同一主题的不同楼层间可以相互引用(例如在一楼设置的问题,可以在三楼读取它的回答),但是必须按照顺序(例如,不能在一楼读取一个在三楼设置的问题的回答);
- 所有标识符的名字对大小写不敏感,对繁简体也不敏感。
此功能实际使用的例子也可以参见我的
这篇黄文。
有任何的建议还请提出。
不确定自己使用得是否正确,想要测试的话,可以前往
测试环境,那里没有人看到你在发什么,所有数据也会每周被删除。
需要任何帮助也欢迎随时
联系我。