此顶部展示栏(理论上)只有管理员可见
全站通知:

用户:386732003

来自APEXWIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索

常用链接

此处列出常用但无法直接快速访问的页面
编辑首页
所有特殊页面
特殊:监视列表
特殊:参数设置
所有模板
所有Mediawiki页面
特殊:上传文件
特殊:文件列表
特殊:重复文件列表
版主操作
Mediawiki:Common.js
MediaWiki:Common.css
管理员用css
管理员用js
Api沙盒

仅管理员可见

展示

括号中的内容只对管理员可见
以上括号中的内容仅管理员可见

用法

文字内容

<span class="adminonly">文字内容</span>

爬虫

根据robots.txt,除了以下部分外均可以爬取:

原文 表示
/*skins* 所有Wiki中的皮肤
/*index.php?* 所有Wiki中的index.php?,类似临时存档
/*File:* 所有Wiki中的具体文件页面
/*User* 所有Wiki中的具体用户页面
/*MediaWiki:* 所有Wiki中与底层MediaWiki有关的内容
/*load.php?*
/%e6%96%87%e4%bb%b6:* 主站下所有文件的具体页面
/*%e6%96%87%e4%bb%b6:* 所有Wiki下文件的具体页面
/*%e6%a8%a1%e6%9d%bf:* 所有Wiki下的模板页面
/wdjs 武动江山 Wiki
/hl 花灵 Wiki
/nxxy 那些需要守护的 Wiki
/qxz 群侠传 Wiki
/wap 逍遥传 Wiki
/mc Minecraft Wiki
/yanyujianghu 煙雨江湖 Wiki

待办事项

原理

定义属性

在语义Mediawiki(简称SMW)中,可以使用#set魔术字为页面设置“属性”(Property)及属性的“值”(Value)。属性为局部变量,例如每个页面都可以有自己的“Name”属性并且互相独立不冲突。

{{#set:Name=HuangET}}

如果页面中有以上代码,那么这个页面就会拥有一个名叫“Name”,值为“HuangET”的属性。

访问属性

属性可以在全局进行访问,即允许在B页面访问A页面的属性,这使得属性可以成为某种意义上的“全局变量”。通过#ask魔术字,可以返回符合限定条件的属性的值,并进行后续处理。一个例子是目前(2023/11/21)位于Test的武器数据总览,该表格的代码如下(一些格式用部分被移除)

{{#ask: [[Category:武器]]
|?名称              
|?扩容量
|?战术换弹
|?全弹换弹
|?伤害
|?射速
|?DPS
|?弹速
|?最远爆头
|?ADS
}}

在#ask后的[[Category:武器]]是对页面的限定条件,即仅包含“武器”分类下的页面,随后将这些页面中对应属性的值列成表格并输出。还可以使用[[属性名::属性值]]来对结果进行进一步的筛选。#ask魔术字还可以规定输出用格式,例如可以将数据作为参数输入进模板的template模式,将在后文详细描述。

具体实现

在待办事项中,每一项待办事项(后称事件)都需要有一个名称和状态,而状态可以简单地分为已完成和未完成。可以为每个事件单独创建一个页面,例如为事件A创建页面A,随后在页面A中使用#set设定基础属性,包括事件的名称(如果没有意外的话,那就是A),事件的状态,以及一个用来切换状态的按钮或类似功能的东西。

主要限制

在实现切换按钮功能中主要出现了一下两个限制:

  1. BWiki不允许大多数常见形式的用户输入(例如<input>和<button>标签)
  2. 一个页面的属性无法在其他页面上更改

解决方案

使用链接代替按钮,在访问页面后切换事件的状态。由于事件的状态只能在对应的页面中更改,也就是说更改事件A状态的页面只能是页面A。而在访问时切换的方法可以结合前文提到的#ask的template模式完成,目前对应的模板是模板:测试
在页面A中的部分代码:

{{#ask: [[Category:待办事项]][[name::A]]
|?state=state
|format=template
|template=待办事项切换
}}

解析:

  • [[Category:待办事项]][[name::A]]:将#ask的目标限定为处于待办事项分类中,name属性为A的所有页面
  • |?state=state:将目标页面的state属性作为state参数传入模板
  • |format=template:将格式规定为模板
  • |template=待办事项切换:使用模板:待办事项切换


模板:待办事项切换的内容:

{{#ifeq:{{{state}}}|未完成|{{#set:state=已完成}}|{{#set:state=未完成}}}}

解析:

  • #ifeq魔术字用法:{{#ifeq: 输入值|对比值|输入值与对比值相同时|输入值与对比值不同时}}
  • {{{state}}}:接收state参数
  • |未完成|{{#set:state=已完成}}|{{#set:state=未完成}}:将state与未完成对比,如果state是未完成则将state设置为已完成,反之则设置为未完成

这样,在每次访问页面后都会重新调用此判断模板并切换页面的state。

更多细节

  • 所有与SWM属性有关的部分都需要强制刷新来更新
  • 编辑页面也会导致强制刷新

如何部署

总页面:

{{#ask: [[Category:待办事项]]
|?name
|?state
|?link
|mainlabel=-
}}

事件页面(现已被整合进模板:待办事项事件):

{{待办事项事件:事件名=A|总页面=分类:待办事项}}

使用教程

在总页面中,使用链接访问事件页面并强制刷新,这时事件页面的状态会被切换,随后使用事件页面中的链接返回并强制刷新总页面。因为状态的切换只会由强制刷新触发,所以失误访问事件页面不会影响状态。

评论整合

  1. 创建一个评论整合页
  2. 通过api读取评论
    1. 通过JavaScript,使用api登录拥有阅读与编辑权限的机器人
    2. 如果无法登录机器人账户,则尝试通过管理员专用JS直接进行读取和编辑
  3. 通过api将部分读取到的评论放置进首页,方法:
    1. 直接编辑首页
    2. 通过JS修改指定div块内容

已知信息

  • 通过js被放置在div块中的内容只能正常显示文字和html(例如<br>),无法使用模板和wiki语法(例如图片,自动排列)