本站可以写作带有简单的交互选项的文章啦【2023/10 更新升级】

verified 这是本站(M系镜像)的规则/指引的一部分。
chromaso
本站可以写作带有简单的交互选项的文章啦【2023/10 更新升级】
仅镜像
在这个论坛可以写作带有很简单交互选项的文章,具体来说是允许读者自定义人物姓名、选择剧情分支等。

这个功能在 2023 年 10 月进行了改动。如果你已经熟悉之前的语法,则可只阅读本次改动的内容

如果你不需要完整掌握此功能,只需要实现简单的隐藏内容、投票这两个功能,可以参见下面楼层里的简短示例。

这个功能在 BBCode 中新增了 input、option、var 和 if 这四个标签。


基本语法:input 标签

input 标签用于让用户输入内容或者选择选项。它的基本语法是:
[input=标识符 type=类型]任意提示文字[/input]

对于每个 input 标签,你可以自行选择一个标识符,它不会被用户看到。你可以将它看作一个变量名;用户选择的选项或是输入的内容,将会被存入这个变量中。标识符可以含有汉字、英文、数字等,但不可含有空格或符号。

input 标签中必须指定一个 type。类型的值必须是以下三种之一:
  • name:允许用户自己输入一个汉语姓名(当前不支持其它民族的姓名);
  • text:允许用户自己输入任意文字(不超过 30 字);
  • select:允许用户从多个选项中选择一个。
对于每一种类型,后文将详细举例说明。

input 标签可以不设置默认值,也可以通过 default=默认值 的额外参数指定默认值,后文将详细举例说明。


基本语法:var 标签

var 标签非常简单:它让你在文章中显示某个变量的值(换句话说,显示用户在某个 input 中输入的内容):
[var]标识符[/var]

惟请注意,对于 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 的使用,另有以下注意事项:
  • 可以使用 != 来表示「不等于」,例如:
    [if=m!=白色]哥哥的内裤不是白色[/if]
  • 每一个等号左侧必须是标识符(变量名),右侧必须是一个值。不可以直接比较两个变量,例如下面这样就不可以:
    [if=m=s]两个人内裤颜色是相同的[/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;
  • 只有一个主题的楼主才可以使用此功能,其它回帖者不能使用;
  • 同一主题的不同楼层间可以相互引用(例如在一楼设置的问题,可以在三楼读取它的回答),但是必须按照顺序(例如,不能在一楼读取一个在三楼设置的问题的回答);
  • 所有标识符的名字对大小写不敏感,对繁简体也不敏感。

此功能实际使用的例子也可以参见我的这篇黄文
有任何的建议还请提出。
不确定自己使用得是否正确,想要测试的话,可以前往测试环境,那里没有人看到你在发什么,所有数据也会每周被删除。
需要任何帮助也欢迎随时联系我
lemonaid
Re: 本站可以写作带有简单的交互选项的文章啦
仅镜像
内裤颜色…?
09
094569
Re: 本站可以写作带有简单的交互选项的文章啦
仅镜像
大佬太强了!!
Ms
msmwii
Re: 本站可以写作带有简单的交互选项的文章啦
仅镜像
大佬文还更新吗
Sa
Salttea
Re: 本站可以写作带有简单的交互选项的文章啦
仅镜像
大佬这也太强了吧。。。
膝顶蛋蛋
Re: 本站可以写作带有简单的交互选项的文章啦
仅镜像
大佬真的技术力拉满。
感谢能有这么一个好用的镜像站!
谢谢!
chromaso
最简单的应用场景——隐藏内容
仅镜像
最简单的应用场景——隐藏内容:

这个例子中,一部分内容默认隐藏,需要回答正确的答案才可以看到。代码如下:
输入正确答案以查看一张小男孩的照片:[input=sum type=text]2+8=[/input]
[if=sum=10]回答正确!这里是照片:[img]/static/attachments/504f3001.jpeg[/img][/if]

这里使用了 input 块,指定 type=text 来要求用户在文字框中输入任意答案,并将答案存入 sum 中。然后用 if 块来判定用户输入的内容是否等于 10。效果如下:

输入正确答案以查看一张小男孩的照片:
回答正确!这里是照片:


我们还可以再完善一下:
[input=暗号 type=text private]B 后面的字母是什么?[/input]
[if=暗号=C]回答正确啦![/if]
[if=暗号=]你还没有输入回答[/if]
[if=暗号!=C&&暗号!=]你输入的回答是错误的,提示:是 D 前面的那个[/if]

这里在 input 块开始处加上了 private,使得读者无法通过查看统计数据来看到别人的答案。并且通过加上另一个 if 块,在没有输入「暗号」时(也就是「暗号」的内容为空时)显示另一个内容,以及在输入的值不为空且不等于 C 时显示另一个内容。效果如下:

回答正确啦!
你还没有输入回答
你输入的回答是错误的,提示:是 D 前面的那个
chromaso
最简单的应用场景——投票:
仅镜像
最简单的应用场景——投票:

使用 type=select 的 input 标签即可:
投票!你自慰时最喜欢的润滑剂是:
[input=投票 type=select]
  做出诚实的选择,不可以说谎哦!
  [option]WD40[/option]
  [option]香辣红油[/option]
  [option]大粘痰![/option]
[/input]

用户可以在选项列表下方看「📊统计」按钮,查看每个选项选择的人数。效果如下:

投票!你自慰时最喜欢的润滑剂是:
lemonaid
Re: 最简单的应用场景——隐藏内容
仅镜像
chromaso最简单的应用场景——隐藏内容:

这个例子中,一部分内容默认隐藏,需要回答正确的答案才可以看到。
好酷,我已经想象到作者们会整出什么花活了