查看“︁建站/WIKI功能/功能实现”︁的源代码
←
建站/WIKI功能/功能实现
跳转到导航
跳转到搜索
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
= 扩展插件 = 请前往[[mediawikiwiki:Category:All_extensions|Category:All_extensions]]探索mediawiki官方收录的所有拓展及功能介绍、使用指南,本文亦是摘录于此。 == 基层建设 == <sup>※ 区别于直接提供样式的(如插入外链、剧透文本),更多作用于基层依赖存在。</sup> === 模块 === 启用[[mediawikiwiki:Extension:Scribunto|Scribunto]]以开启模块(Module/lua脚本)功能: * 配置文件添加: ** <code>wfLoadExtension( 'Scribunto' );</code> ** <code>$wgScribuntoDefaultEngine = 'luastandalone';</code> * 给lua可执行权限(加粗部分请根据实际情况修改): ** 先cd到lua文件路径下:<code>cd /'''<u>网站框架根目录</u>'''/extensions/Scribunto/includes/Engines/LuaStandalone/binaries/</code> ** 查看当前路径下有什么文件夹:<code>ls</code> *** 有几个lua版本及系统信息的文件夹,以linux系统为例,就cd到:<code>cd '''<u>lua5_1_5_linux_64_generic</u>'''</code><sup>(如果你不知道是64还是32位,那就是64位的)</sup> ** 赋予权限:<code>chmod a+x lua</code> ** 出现这种情况多半是在给扩展文件设定655权限时应用到了全局,覆盖了原有权限。 * 会增添“模块”的命名空间,创建/导入页面前请确保开启此功能,否则后续再开启会使模块页不生效、报错。 === 微件 === * 下载扩展:[[mediawikiwiki:Extension:Widgets|Extension:Widgets]]: * 配置文件添加:<code>wfLoadExtension( 'Widgets' );</code> 安全的嵌入html代码。 * 安全是相对于直接[[#嵌入html代码]]而言的,微件位于<code>微件:</code>命名空间内,以类似于模板的形式存在,特殊命名空间可以配置用户编辑权限,一定程度上保障了不被滥用,并且也可以和模板配合完成一些复杂操作。 微件合集:https://www.mediawikiwidgets.org/Widgets_Catalog === 小工具 === * 配置文件添加:<code>wfLoadExtension( 'Gadgets' );</code> * [[mediawikiwiki:Extension:Gadgets|Extension:Gadgets]] 一种使用js脚本或css样式的工具,更有针对性,一般是实现某个功能。 涉及的页面: * 启用的小工具:<code><u>MediaWiki:Gadgets-definition</u></code><sup>(默认不存在,新建即可)</sup> ** 启用的格式是在此页添加行:<code>* 小工具名称[各种选项]|相关的页面|相关的页面(若有)</code> ** 除此之外用户可以自行设定标题样式用以区分不同功能的小工具。 * 小工具页面: ** 小工具的信息页:<code>MediaWiki:Gadget-小工具名称</code> ** js脚本:<code>MediaWiki:Gadget-小工具名称.js</code> ** css样式(若有):<code>MediaWiki:Gadget-小工具名称.css</code> 当至少有一个小工具后,<code>[[特殊:参数设置]]</code>页面会出现“小工具”选项卡,用户可以选择开启/禁用某个特点的小工具。 === 嵌入html代码 === ⚠️警告,这意味着具有编辑权限的用户都可以随意嵌入HTML代码,对于公共项目而言具有很大的安全隐患。⚠️ 配置文件添加: * <code>$wgRawHtml = true;</code> 使用: * 在<u>源代码编辑器</u>模式下,将内容放在<code><nowiki><html>……</html></nowiki></code>标签中即可。 优点: * 可以像正常写html代码一样写内容,以便于较为简单的使用一些高级功能,如嵌入各种文件和资源、省去研究各种扩展的时间和精力。 缺点: * 非wiki常规功能越多,可移植性越低,建议不要滥用; * 直接插入html所引用的外部资源稳定性不确定,也不利于索引,等问题累积成“历史遗留因素”就不好维护了; * 尽管启用该功能也仍不会解析js脚本部分,所以安全隐患少了很多,但不意味着没有,尤其是通过css实现用户无法分辨真实性的不受控元素。 * mediawiki的用户组权限设置非常极端,编辑权限是作用于整个命名空间而非某个页面或某个功能,因此对于公共站点,请勿开启此项功能,仅在只有自己和绝对可信的人具有编辑权限时启用。 === 嵌入页面 === <sup>※ 详见:[[mediawikiwiki:Transclusion|Transclusion]]</sup> 被标记的文本在本页(源页面)及被嵌入时的宿主页的表现形式: {| class="wikitable" ! !源页面 !宿主页面 |- |<code><nowiki><noinclude>被标记的文本</noinclude></nowiki></code> |显示 |不显示 |- |<code><nowiki><includeonly>被标记的文本</includeonly></nowiki></code> |不显示 |显示 |- |<code><nowiki><onlyinclude>被标记的文本</onlyinclude></nowiki></code> |显示 |仅显示 |} 前两个标记常用于模板,让介绍信息仅在模板页显示,让模板代码仅在被调用(嵌入)时显示<sup>( [[建站/WIKI功能/二次元老婆墙#在模板页面使用特殊标记|二次元老婆墙#在模板页面使用特殊标记]])</sup>,对于页面内容嵌入需求更常用: * <code><nowiki><onlyinclude></nowiki></code>:既在源页面显示、也在调用它的宿主页显示,当源页面用了此标记而其他页面嵌入它时,就只会嵌入被该标记包裹的内容。 ** 如果源页面使用了多个此标记,记得标记一下换行符之类的, 因为对于宿主页眼中只存在被此标记包裹的内容,每个标记间的文本都是没有间隔的。 示例:[[Wiki:圣王H的秘密基地导航页#小更新日志|wiki:圣王H的秘密基地导航页#小更新日志]] 注意事项:我主要配合[[#选项卡]]嵌入页面<sup>(选项卡有较为醒目样式及切换多个嵌入的页面)</sup>,如果没有安装该扩展可以使用内置的嵌入方式(放置于要嵌入内容的位置):<code><nowiki>{{:页面标题}}</nowiki></code> * “:”是命名空间与标题的分隔符,不填写命名空间与冒号双花括号是按模板解析,填写分隔符不填命名空间是按主空间解析; * 源页面使用了标题引链的,点击后会跳转至源页面,而不会在本页定位。 == 预安装 == <sup>※ 框架自带但并未启用的</sup> === 新建标签页打开外链 === * 配置文件添加:<code>$wgExternalLinkTarget = '_blank';</code> 內链还是替换当前页面。 * 但是注意 mediawiki等百科站的链接由于<code>跨wiki链接</code>的作用或会按照内链处理; * 我建议一律用<code>鼠标中间</code> 或 <code>ctrl+左键单击</code> 或 <code>右键链接选择新建标签页打开</code>的方式访问链接。 === 嵌入外部js文件 === 从哪抄来的忘了([[mediawikiwiki:Manual:$wgHooks|Manual:$wgHooks]]):<syntaxhighlight lang="php" line="1"> $wgHooks['BeforePageDisplay'][] = function( OutputPage &$out, Skin &$skin ) { $code = <<<START_END_MARKER <script> script标签内容 </script> START_END_MARKER; $out->addHeadItem( 'WIKI', $code ); return true; }; </syntaxhighlight>但在mediawiki[https://www.mediawiki.org/w/index.php?title=Topic:Unn6ubkgl5ppj467&topic_showPostId=unxpvr0t9rtqem8o#flow-post-unxpvr0t9rtqem8o 社区]看人家用的是:<syntaxhighlight lang="php" line="1"> $wgHooks['BeforePageDisplay'][] = function( OutputPage &$out, Skin &$skin ) { out->addInlineScript( '<script>...</script>' ); }; </syntaxhighlight>我就临时嵌入51.la的分析代码,没其他用途,就不深入研究了。其他实现方式:[[mediawikiwiki:Extension:HeadScript|Extension:HeadScript]] === 诗歌格式 === * 配置文件添加:<code>wfLoadExtension( 'Poem' );</code> * [[mediawikiwiki:Extension:Poem|Extension:Poem]] * 诗歌与预排格式的基本形态都会渲染wikitext标记,除了刻意的使用wikitext外,更多的是常用符号如:“<code>#</code>”会被识别为列表,我建议一律使用[[#代码块]]。 wikitext/markdown需要两个换行符(回车)才能是一个换行,该扩展提供的“<code><nowiki><poem>……</poem></nowiki></code>”标签可以使内容一个换行符就是换一行。 输入:<syntaxhighlight lang="wikitext" line="1"> <poem> 第一行 https://scio.icu/webring/SCIO.png q 第三行 [[#诗歌格式|#诗歌格式]] </poem> </syntaxhighlight>输出<sup>(为了区别用引用框住了)</sup>:<blockquote><poem> 第一行 https://scio.icu/webring/SCIO.png q 第三行 [[#诗歌格式|#诗歌格式]] </poem></blockquote>它可以解析wikitext语法,自然也能插入wiki内的图片,但不会渲染出外链形式的图片资源<sup>(能解析出文件名)</sup>,默认也是无任何样式,但可以手动添加。 输入:<syntaxhighlight lang="wikitext" line="1"> <poem style="border: 2px solid #d6d2c5; background-color: #f9f4e6; padding: 1em;"> 我叫 谷人, 是 一个 家里蹲 回车派诗人。 </poem> </syntaxhighlight>输出: <poem style="border: 2px solid #d6d2c5; background-color: #f9f4e6; padding: 1em;"> 我叫 谷人, 是 一个 家里蹲 回车派诗人。 </poem> === 代码块 === '''SyntaxHighlight_GeSHi''' * 配置文件添加:<code>wfLoadExtension( 'SyntaxHighlight_GeSHi' );</code> * 给解析脚本设置可执行权限:<code>chmod a+x /网站根目录/extensions/SyntaxHighlight_GeSHi/pygments/pygmentize</code> ** 如果不渲染样式<sup>(或者编辑时渲染提交了不渲染)</sup>、不显示行号,多半就是这个脚本出现了权限问题,出现这种情况多半是在给扩展文件设定655权限时应用到了全局,覆盖了原有权限。。 * [[mediawikiwiki:Extension:SyntaxHighlight|Extension:SyntaxHighlight]] 可视化编辑器引用时可以在“插入”选项卡中选择“代码块”,选定语言后可以自动高亮代码<sup>(基于[https://pygments.org/ pygments],自2023年4月10日发布的2.15.0版本以来支持了wikitext语法)</sup>。<syntaxhighlight lang="python" line="1"> # 输入: SCIOs = 5 name = "SCIO" print('我是%s,SCIO系列站点目前有%d个分站' %(name,SCIOs)) # 输出: 我是SCIO,SCIO系列站点目前有5个分站 </syntaxhighlight>如果觉得代码框有些大,可以在[[MediaWiki:Common.css]]添加如下行调缩放:<syntaxhighlight lang="css" line="1"> /* 缩小代码框 开始 */ .mw-highlight pre { font-size: 80%; } /* 缩小代码框 结束 */ </syntaxhighlight>已知问题: * 可视化编辑器下右侧部分有时会出现光标定位与实际定位错位,就像右侧有一堵无形的墙压缩了其字符宽度导致错位; ** 复刻方式是输入中文引号<code>“”</code>,渲染是按全角字符,但编辑实际定位是按照半角字符宽度处理的。 * 可视化编辑器下复制粘贴代码进去时偶尔会出现视角置右的情况,就像一直按着右箭头/end键; ** 一般保存/关闭再打开就没事了。 '''已弃用的给代码块(包括pre标签)添加复制功能''': * 下载扩展:[[mediawikiwiki:Extension:PreToClip|Extension:PreToClip]] * 配置文件添加:<code>wfLoadExtension( 'PreToClip' );</code> 有很明显的弊端: * 是pre标签就是预排格式,通常一行的预排格式是起注释或强调左右,而不是写的代码供人复制; * 鼠标浮动上去才显示复制图标,该图标尺寸大于一行代码也就导致代码框高度发生变化,挺恍眼的; * 复制图标会挤占代码框内的文本,初心是好的,但会导致长代码框内容仅因鼠标浮动就发生排版变化,恍眼。 * 大触可以试试修改其样式,这个功能的作用说多不多、说少不少,要是这三点解决了,还是值得用上的。 '''已弃用的<code>Highlightjs_Integration</code>''':<blockquote> * <s>下载扩展:[[mediawikiwiki:Extension:SyntaxHighlight|Extension:SyntaxHighlight]] (记得重命名文件夹为:<code>Highlightjs_Integration</code>)</s> * <s>配置文件添加:<code>wfLoadExtension( 'Highlightjs_Integration' );</code></s> <s>SyntaxHighlight的替代品,基于[https://highlightjs.org/ highlight.js],'''不显示行号,'''不推荐。可以作为备用或图它的预设样式,两者支持的语言区别自行探索吧。</s> <s>已知的问题:</s> * <s>默认与SyntaxHighlight都用“<code>syntaxhighlight</code>”或“<code>source</code>”标签;</s> * <s>默认风格是黑底,对于mediawiki的默认白色页面来说太刺眼了。</s> ** <s>highlightjs的风格演示界面:https://highlightjs.org/demo<nowiki/>,虽然我没发现适合的风格。</s> * <s>参考官网:[[mediawikiwiki:Extension:Highlightjs_Integration#Configuration|Extension:Highlightjs_Integration#Configuration]] 修改配置即可。</s> </blockquote> === 图像映射 === * 配置文件添加:<code>wfLoadExtension( 'ImageMap' );</code> * [[mediawikiwiki:Extension:ImageMap|Extension:ImageMap]] 可以设定坐标实现如鼠标点击哪个人物就跳转到什么文章上<sup>([https://www.w3schools.com/html/html_images_imagemap.asp 原理])</sup>。 需要在源代码模式下编辑,输入<sup>(具体看官方文档吧)</sup>: * 第一行是图片文件名称<sup>(需要是WIKI内部图像)</sup>、位置、形态<sup>(如果是略缩图则设置尺寸)</sup>,作者与鼠标悬浮图片上提示的信息; * 第二行开始是具体的信息: ** 形状信息:矩形(rect)、圆形(circle)、多边形(poly) ** 坐标信息:示例是矩形,输入左上角的坐标(327,135),再输入右下角的坐标(627,209); ** 链接信息:普通的wikitext标记语言,內链用“<code><nowiki>[[页面标题|鼠标悬浮显示的信息]]</nowiki></code>”,外链用:“<code>[url 提示文本]</code>” <syntaxhighlight lang="wikitext" line="1"> <imagemap> 文件:Webrings.png|center|略缩图|600像素| by scio|测试用途。 rect 327 135 627 209 [https://scio.icu/ 主站] rect 173 216 472 289 [[圣王H的秘密基地导航页|WIKI]] rect 478 216 778 289 [https://oicsp.scio.eu.org/ OICSp] rect 173 360 472 433 [https://blog.scio.icu/ 博客] rect 478 360 778 433 [https://scio.eu.org/ 实验室] </imagemap> </syntaxhighlight>示例: <imagemap> 文件:Webrings.png|center|略缩图|600像素| by scio|测试用途。 rect 327 135 627 209 [https://scio.icu/ 主站] rect 173 216 472 289 [[wiki:圣王H的秘密基地导航页|WIKI]] rect 478 216 778 289 [https://oicsp.scio.eu.org/ OICSp] rect 173 360 472 433 [https://blog.scio.icu/ 博客] rect 478 360 778 433 [https://scio.eu.org/ 实验室] </imagemap> === 跨WIKI链接 === * 配置文件添加: <syntaxhighlight lang="php" line="1"> wfLoadExtension( 'Interwiki' ); $wgGroupPermissions['sysop']['interwiki'] = true; </syntaxhighlight> * [[mediawikiwiki:Extension:SyntaxHighlight|Extension:SyntaxHighlight]] <code>[[特殊:跨wiki]]</code>:以内链的形式引用其他wiki站点的内容。 * 以萌娘百科为例,点击“添加”,前缀填写“<code>moegirl</code>”<sup>(自定义的)</sup>,url填写“<code><nowiki>https://zh.moegirl.org.cn/</nowiki>'''$1'''</code>”,其他不用填写。 * 如此便可按wikitext语法插入目标wiki的页面,例如: ** <code><nowiki>[[moegirl:桐间纱路]]</nowiki></code> 的渲染结果为:[[moegirl:桐间纱路]] ** <code><nowiki>[[moegirl:桐间纱路|纱路酱]]</nowiki></code> 的渲染结果为:[[Moegirl:桐间纱路|纱路酱]] === 其他 === <sup>※ 预安装但未介绍且我未实装的。</sup> * [[mediawikiwiki:Extension:Echo|Echo]](通知功能) * [[mediawikiwiki:Extension:InputBox|InputBox]](输入框):挺好的,但是主要用来创建页面,而默认的搜索框就支持创建,只是多点一下鼠标。 * [[mediawikiwiki:Extension:Math|Math]](数学公式输入) * [[mediawikiwiki:Extension:MultimediaViewer|MultimediaViewer]](图片浏览器):mediaiwiki官网就是用的这个扩展,可以去看看。 * [[mediawikiwiki:Extension:PdfHandler|PdfHandler]](PDF处理):嵌入pdf文件(需要先设置允许上传pdf格式的文件),默认就只是以图片形式插入pdf(可以设定插入的页码),也有配合[[mediawikiwiki:Extension:Proofread_Page|Extension:Proofread_Page]]进行校对工作(见官网附图)。其他类似工具:[[mediawikiwiki:Extension:PDFEmbed|Extension:PDFEmbed]]。 * [[mediawikiwiki:Extension:Nuke|Nuke]](根据规则批量删除页面):一般用在多人协作的情况下,纯个人用途或可信人群范围内的用途,就无所谓了。 * [[mediawikiwiki:Extension:OATHAuth|OATHAuth]](2FA) * [[mediawikiwiki:Extension:CategoryTree|CategoryTree]](分类树):我之前喜欢用的一个功能,或许还能在比较久的页面的末尾看到它们的身影。 == 非预安装 == === CSS === * 下载扩展:[[mediawikiwiki:Extension:CSS|Extension:CSS]] * 配置文件添加:<code>wfLoadExtension( 'CSS' );</code> 给单页面设定style,并作用于调用此资源的页面。一般有三类用法(源代码编辑器中操作): '''写在当前页面:'''<syntaxhighlight lang="css" line="1"> {{#css: body { background: yellow; font-size: 20pt; color: red; } }} </syntaxhighlight><sup>※ 示例直接给body元素赋予了样式,则此样式将直接应用于当前页面;如果给class属性设定样式,则应用于调用了该class属性的元素中;遵守html/css书写规范。</sup> '''写在模板''': * 创建一个模板页,写入要设定的样式,并在要调用它的页面插入:<code><nowiki>{{创建的模板名称}}</nowiki></code>,即可将css样式应用于该页面。 '''写在其他页面''': * 通常是是[[建站/WIKI功能/基础功能#子页面|#子页面]]的形式,在子页面写css代码,在父页面嵌入子页面:<code><nowiki>{{:测试/样式}}</nowiki></code><sup>(依据:[[#嵌入页面]])</sup> 另一种实现方式:[[mediawikiwiki:Extension:TemplateStyles|Extension:TemplateStyles]],有个规范就是样式页面必须以“.css”结尾,我没那么大的需求,没试过这个扩展。 === 选项卡 === <sup>※ 请在源代码模式下编辑,其他替代品:[[mediawikiwiki:Extension:Header_Tabs|Extension:Header_Tabs]]</sup> * 下载扩展:[[mediawikiwiki:Extension:TabberNeue|Extension:TabberNeue]] * 配置文件添加:<code>wfLoadExtension( 'TabberNeue' );</code> '''嵌入内容及示例''':{{#tag:tabber|第一个选项卡=一般写法(适用于纯文本或基本样式):<syntaxhighlight lang="text" line="1"><tabber> |-|第一个选项卡= 第一个选项卡内容 |-|第二个选项卡标题= 第二个选项卡内容 |-|第三个选项卡标题= 第三个选项卡内容 * 无序列表项 * 无序列表项 </tabber></syntaxhighlight> {{!}}-{{!}} 第二个选项卡 = 适用于嵌套选项卡或标签来实现高级样式(可以回车):<syntaxhighlight lang="wikitext" line="1"> {{#tag:tabber | 第一个选项卡标题 = 第一个选项卡内容 {{!}}-{{!}} 第二个选项卡标题 = 第二个选项卡内容 {{!}}-{{!}} 第三个选项卡标题 = 第三个选项卡内容 }}</syntaxhighlight>}} '''嵌入页面'''<sup>(依据:[[#嵌入页面]])</sup>:<syntaxhighlight lang="wikitext" line="1"> <tabbertransclude> 第一个页面标题|第一个选项卡标题 第二个页面标题|第二个选项卡标题 第三个页面标题|第三个选项卡标题 </tabbertransclude> </syntaxhighlight><sup>※ 这是自定义选项卡标题,可以每行直接写页面标题,选项卡嵌入的就会是所写内容为标题的页面。</sup> '''已知的问题''': * 使用此标签/解析器会将页面添加到“<code>使用Tabber解析器标签的页面</code>”或“<code>使用TabberTransclude解析器标签的页面</code>”分类中; ** 通过:[[建站/WIKI功能/样式优化#隐藏分类|#隐藏分类]] 规避此问题。 * 被嵌入页面的代码框在宿主页上高亮失效,当是一些样式/js功能不会被嵌入。 === 批量上传 === * 下载扩展:[[mediawikiwiki:Extension:MsUpload|Extension:MsUpload]] * 配置文件添加: ** <code>wfLoadExtension( 'MsUpload' );</code> ** <code>$wgMSU_useDragDrop = true;</code> 在源代码编辑器下的编辑栏中会出现一个支持拖动上传的矩形区域,可以批量上传文件、便捷的修改文件名(也是文件的页面名)、插入图片链接,所支持的格式等与正常上传无异。 <html><img loading="lazy" style="width: 600px;" src='https://scio.eu.org/WIKI/图片/建站相关/MsUpload_01.avif' /></html><html><img loading="lazy" style="width: 600px;" src='https://scio.eu.org/WIKI/图片/建站相关/MsUpload_02.avif' /></html> === 批量删除 === * 下载扩展:[[mediawikiwiki:Extension:DeleteBatch|Extension:DeleteBatch]]: * 配置文件添加:<code>wfLoadExtension( 'DeleteBatch' );</code> 批量删除多个页面:<code>[[特殊:批量删除]]</code> === 页面表单 === * 下载扩展:<code>[[mediawikiwiki:Extension:Page_Forms|Extension:Page_Forms]]</code> * 配置文件添加:<code>wfLoadExtension( 'PageForms' );</code> 除了通过表单快速创建模板/页面还能用于查询,但请移步官网查阅。 我总觉得它是预安装的扩展,但在某次升级框架版本时发现框架中并没有附带它。 ——————再往下就是我自己没有实装的了—————— === 页面横幅 === <sup>※ 相较于 [[建站/WIKI功能/样式优化#公告|#公告]] 它可以自定义显示通知的命名空间或页面。</sup> * 下载扩展:[[mediawikiwiki:Extension:MsUpload|Extension:MsUpload]] * 配置文件添加:<code>wfLoadExtension( 'MsUpload' );</code> 对单个页面设置横幅,页面内插入:<code>'''<nowiki>{{PAGEBANNER:</nowiki>'''<u>无需命名空间前缀的文件名.jpg</u>'''|pgname='''<u>左上角标题</u>'''|tooltip='''<u>鼠标悬浮显示信息</u>'''|link='''<u>目标页面</u>'''<nowiki>}}</nowiki>'''</code>; 应用于全局/指定命名空间需要在配置文件内添加代码,见官网示例。 但我对其的定义是“曲线救国”,对于横幅图片您可能需要费点信息,反正我是不用。 === 翻译插件 === * 需手动在扩展目录下建立<code>GoogleTranslator</code>文件夹,并创建官网要求的四个文件、复制粘贴官网给出的内容到对应文件内:[[mediawikiwiki:Extension:Google_Translator|Extension:Google_Translator]] * 配置文件添加: <syntaxhighlight lang="php" line="1"> require_once "$IP/extensions/GoogleTranslator/GoogleTranslator.php"; $wgGoogleTranslatorOriginal = 'zh'; $wgGoogleTranslatorLanguages = 'en,de,fr,nl,ru,es,hi,ar,pt,ja'; </syntaxhighlight>内嵌谷歌翻译插件。具体需要的代码等请移步官网,需要注意的是,第二行的目标语言,没有顺序上的意义,实际的列表是按照中文的拼音排序的,可能有方法控制,但我不知道。 已知的问题:'''在无法稳定访问谷歌服务的地区会严重拖慢网站响应速度。''' === 访客计数器 === * 下载扩展:[[mediawikiwiki:Extension:HitCounters|Extension:HitCounters]]: * 配置文件添加:<code>wfLoadExtension( 'HitCounters' );</code> * 需要运行命令更新配置: ** <code>cd /var/www/html/maintenance</code> ** <code>php update.php</code> 页面底部会显示单页面的访问量,<code>[[特殊:统计信息]]</code>会显示统计信息;只统计启用拓展后的记录,每次缓存被刷新会再计数一次。 已知的问题:'''到处都是的不遵守规范的爬虫会让数据失去最后一丝参考意义。''' === 其他 === * [[mediawikiwiki:Extension:WikiMarkdown|Extension:WikiMarkdownz]]:允许使用Markdown语法。 * [[mediawikiwiki:Extension:HeaderSections|HeaderSections]]:给(正文部分的)标题设置样式(css)。 * [[mediawikiwiki:Extension:WebP|Extension:WebP]]、[[mediawikiwiki:Extension:EImage|Extension:EImage]]:对图像的高级处理 ** 前者是支持创建webp及avif略缩图并使用PictureHtmlSupport输出内容,但我不管怎么整都弄不好,本地安装了[https://www.linuxfromscratch.org/blfs/view/svn/general/libwebp.html libwebp]<sup>([https://developers.google.com/speed/webp/docs/compiling?hl=zh-cn#building webp])</sup>、[https://www.geeksforgeeks.org/how-to-install-imagemagick-and-imagick-php-extension-in-ubuntu/ imagick],可以发现有webp和avif的文件夹出现,但是没内容,权限也重新设置了,[https://github.com/StarCitizenWiki/mediawiki-extensions-PictureHtmlSupport/issues/1 相关讨论]看了也看不出所以然; ** 后者看描述是将外部图片像内部图片一样创建略缩图、尺寸、样式,不知是否可以融入[[建站/WIKI功能/二次元老婆墙|老婆墙]]中,到时候如果弄海报墙,内部图片的话,1Mbps的小水管和吃不消。 ** 单纯的图像处理,还有个用于压缩的:[[mediawikiwiki:Extension:VipsScaler|Extension:VipsScaler]] ** 如果只是想预览webp格式的图片,但是无法创建略缩图导致无法预览什么的,可能是系统缺少依赖: *** <code>apt install gcc</code> *** <code>apt-get install build-essential</code> *** <code>wget <nowiki>https://storage.googleapis.com/downloads.webmproject.org/releases/webp/libwebp-1.4.0.tar.gz</nowiki></code> <sup>(来自:[https://developers.google.com/speed/webp/docs/compiling?hl=zh-cn#building webp])</sup> **** <code>tar xvzf libwebp-1.4.0.tar.gz</code> **** <code>cd libwebp-1.4.0</code> **** <code>./configure</code> **** <code>make</code> **** <code>sudo make install</code> *** <code>apt install imagemagick</code> *** <code>apt install php php-common gcc</code> *** <code>apt install php-imagick</code> *** <code>systemctl restart apache2</code> = 功能实现 = === 嵌入图片 === <sup>※ 注意,若嵌入大量图片,尤其是网络质量(连接性)不好的外部服务器的网站,会使页面加载堵塞,建议配合[[建站/WIKI功能/站点维护#懒加载|#懒加载]]使用。</sup> * 第一种方案:[[#插入内部图片]],默认的上传功能。 ** 缺点是:仅支持png、gif、jpg、jpeg、webp格式的图像;插入的图片修改分辨率会创建各种尺寸的略缩图,累积下来其文件体积非常大;对已经高度压缩/优化的图像而言,其创建的略缩图比原图都大。 * 第二种方案:[[#允许插入外链图像]]。 ** 优点是:可以解析外部图像故能用图床;对于我这种服务器带宽很小且图片是avif这种目前不受支持的格式的人而言较为好用。 ** 缺点是:仅仅启用此功能缺乏控制,所以要配合 [[#控制外链图像分辨率]],才能使其好用些,但外部图像始终限制太多,对于单纯的插入图像的需求来说比较适用。 * 第三种方案:[[#通过HTML嵌入图片]]。 ** 用html代码实现,假若是私人wiki(无被理由嵌入恶意代码风险)那就是第二种方案的完美替代品。 * 第四种方案:[[#嵌入外部WIKI的图片]] ** 优点是:嵌入其他wiki的图像,可以像嵌入内部图像一样被解析和控制。比如也可以用于通过cargo表组织的内容,以实现站点在小带宽服务器上,图片资源在其他外部服务器中(详见具体章节),减少资源占用。 ** 缺点是:另一个站点也需要是mediawiki站,且仅支持添加一个。 * <s>第四种方案:[[#嵌入全景图片]]。</s> ** <s>允许解析360°全景照片。</s> ==== 插入内部图片 ==== * 可以于编辑器内或[[特殊:上传文件]]上传图片,若无法渲染webp图片/无法为其创建略缩图,请参考:[[#其他_2]] * 源代码编辑器下基础插入方式如下<sup>(含命名空间的文件页面名称、宽度,建议通过可视化编辑器调整参数再于源代码编辑器下查看写法)</sup>: <syntaxhighlight lang="wikitext" line="1"> [[file:Screenshot 20240420-230038.png|100px]] </syntaxhighlight> ==== 允许插入外链图像 ==== * 配置文件添加:<code>$wgAllowExternalImages = true;</code> * 请配合 [[#控制外链图像分辨率]] 使用,默认全分辨率是很难用的。 启用后输入图片的url会自动渲染成图片,但这个完全不可控<sup>(直接就是全尺寸)</sup>,如果,启用了又不想让图片url被渲染成图像,可以用以下方式: * 采取中文名的图像(示例,该文件已删除):[https://scio.eu.org/image/WIKI/%E7%8C%AB%E7%8C%AB01.jpg https://scio.eu.org/image/WIKI/猫猫01.jpg] ** 缺点是可视化编辑视图下会渲染且无法修改; ** 链接后面要加一个空格,不然会认为后面的内容都是链接的一部分。 * 使url和文本不一致:[https://scio.icu/image/touxiang.gif hxxps://scio.icu/image/touxiang.gif]。 ** 在链接末尾添加不影响手动访问的符号: *** “<code>?</code>”:[https://scio.icu/image/touxiang.gif? https://scio.icu/image/touxiang.gif?];“<code>#</code>”:https://scio.icu/image/touxiang.gif#<nowiki/>。 ==== 控制外链图像分辨率 ==== <sup>※ 需要先开启外链图像功能:[[#允许插入外链图像]],[https://stackoverflow.com/questions/19450262/mediawiki-set-external-image-width-by-value 参考资料]</sup> > 在CSS样式(<code>[[MediaWiki:Common.css]]</code>)中添加:<syntaxhighlight lang="css" line="1"> /*控制外链图像分辨率 开始*/ .externalimage-holder { position: relative; } .externalimage-holder img { width: 100%; height: auto; } /*控制外链图像分辨率 结束*/ </syntaxhighlight>> 新建页面:<code>[[模板:Image-size]]</code>,粘贴以下代码:<syntaxhighlight lang="html" line="1"> <div class="externalimage-holder" style="width:{{{1}}}">{{{2}}}</div> </syntaxhighlight>> 源代码编辑器调用示例:<syntaxhighlight lang="wikitext" line="1"> {{Image-size|100px|http://scio.icu/image/lain1.gif}} </syntaxhighlight>> 渲染染结果:{{Image-size|100px|https://scio.icu/image/lain1.gif}} ==== 通过HTML嵌入图片 ==== <sup>※ 需要先启用 [[#嵌入html代码]],我主要是用来嵌入.avif图像,但这本身就是html代码,因此您可以根据您的需求写,我这里只控制了宽度和让其[[建站/WIKI功能/站点维护#懒加载|#懒加载]]。</sup> 普通的嵌入图像的操作对<code>.avif</code>文件不生效,因此需要使用<code><nowiki><html></nowiki></code>标签,代码本身很简单:<syntaxhighlight lang="html" line="1"> <html><img loading="lazy" style="width: 600px;" src='https://scio.eu.org/WIKI/图片/PXL_20231021_053439723.avif' /></html> </syntaxhighlight>我主要作用于起居注的食日记系列,这是我的操作流程,仅供参考: * (自动)Syncthing同步手机相册到PC(安卓端默认可接受变动,PC端只设定监视更改,下面两个不勾选也是同样效果); * 于PC执行命令:<code>cp ~/图片/android/相机/*.jpg ~/文档/0-核心文档/1-Camera/1-食物记录/ && cp ~/图片/android/相机/*.jpg ~/下载/食日记/ && rm -rf ~/图片/android/相机/*.jpg && mogrify -resize 1200x900 -format avif ~/下载/食日记/*.jpg && rm -rf ~/下载/食日记/*.jpg</code> ** 意思为:复制一份图片到备份文件夹、一份到操作文件夹,并从原文件夹中删除图像<sup>(手机相册也会一同被删除)</sup>;修改分辨率、转格,并删除操作文件夹中的.jpg文件。 * 通过ftp(FileZilla/FTPrush)传输到网站目录下; ** 提前设定好双端初始文件夹、传输时右键重命名复制文件名、传输完顺便手动删除图片; * 在WIKI的可视化编辑器内复制一个嵌入的图片并粘贴到要插入的位置;点击编辑html代码,在弹出卡片窗口唤醒粘贴版(diodon)粘贴文件名。 或许要写一个微件来精简下插入流程,毕竟原计划作用于到处都是嵌入的图片的食日记,而它停更了,目前没有集中需要嵌入图片的文章,所以要找一个用来复制的元素得点很多下(或许可以弄一个专门的测试页)。 ==== 嵌入外部WIKI的图片 ==== <sup>※ 本打算用于[[建站/WIKI功能/二次元老婆墙|二次元老婆墙]],但弃用了,只做参考。</sup> '''维基共享资源''' <sup>※ 参考:[[mediawikiwiki:InstantCommons|InstantCommons]]</sup> 配置文件添加:<syntaxhighlight lang="php" line="1"> $wgForeignFileRepos[] = [ 'class' => ForeignAPIRepo::class, 'name' => 'enwikipedia', 'apibase' => 'https://scio.eu.org/project/favorites/api.php', 'hashLevels' => 2, 'fetchDescription' => true, 'descriptionCacheExpiry' => 43200, 'apiThumbCacheExpiry' => 86400, ]; </syntaxhighlight><sup>※ 默认是使用 [https://commons.wikimedia.org/ 维基共享资源] 的文件,将第四行的url改为你所需要的的:<code>域名/api.php</code></sup> 接下来只需要像插入内部图片一样,若站内无此图片则会试图从设定的站点寻找同名文件。但我的需求是嵌入自己需要的图片又不想占用本机带宽,本以为此举可以应对,但发现它会将图片下载到本地并创建一堆略缩图,引用的也是本机资源,区别就是省的重新上传一遍文件(及创建文件页面)。 再然后我灵机一动,将原<code>images</code>文件重命名为<code>images_old</code>(或者不给写入权限),(重启apache后)发现其引用的图片变为了另一个服务器的资源,于是这个问题就这么被解决了,但我总感觉这不太保险, 可能会在未来版本被当作bug改掉(更希望成为功能的一部分)?代价是没写入权限,自己也没法上传文件。 * 无法验证此举的有效性,因为这是在折腾二次元老婆墙时的产物,后续我直接将其放到了另一个服务器下。 '''NFS共享文件''' 服务端和客户端都安装:<code>apt-get -y install nfs-kernel-server nfs-common</code> 服务端: * 修改配置文件:<code>nano /etc/exports</code> * 添加行:<code>/要共享出去的目录 共享目标的IP(*是所有人) (写入权限,sync,no_subtree_check)</code> ** 如:<code><u>/var/www/html/scio.eu.org/project/images/images</u> <u>120.xx.xxx.xxx</u> (<u>rw</u>,sync,no_subtree_check)</code> * 重启nfs服务:<code>systemctl restart nfs-server</code> 客户端: * 挂载远程目录:<code>mount <u>服务端的ip地址</u>:<u>服务端的目录</u> <u>挂载到的本地目录</u></code>(挂载前建议先将文件名重命名以备用/避免文件丢失) ** 如:<code>mount <u>65.xx.xxx.xxx</u>:<u>/var/www/html/scio.eu.org/project/images/images</u> <u>/var/www/html/favorites/images</u></code> * 取消挂载把命令换成<code>umount</code>就行了。 优势:直接在本机操作,图片存储外外部服务器; 缺点:向主机请求资源,主机再通过nfs向服务器请求资源,主机做转发/代理用途,与带宽无益,甚至延迟更高(假若目标服务器速度网络不怎么样),只是减少了空间占用。 ==== <s>嵌入全景图片</s> ==== <s>通过[[mediawikiwiki:User:TheDJ/panoviewer|User:TheDJ]]创建的扩展:</s> * <s>下载扩展:https://gitlab.wikimedia.org/hartman/panoviewer <sup>(记得将文件夹重命名为与配置文件一致,例如:panoviewer)</sup></s> * <s>配置文件添加:wfLoadExtension( 'panoviewer' );</s> <s>在页面按照正常插入图片的方式插入<sup>(建议控制下宽度)</sup>:[[文件:<u>全景照片.jpg</u>|800px]]</s> <s>对于全景图片,图片左上角会出现“360°”的字样,点击图片就可以使其以全景照片的方式浏览:</s> * <s>由于服务器只有1Mbps,所以托管到了:favorites:示例<sup>(仅娱乐实验,可能会不正常工作)</sup></s> <s>已知问题:与[[#嵌入外部WIKI的图片]]不兼容,正常渲染图像,但鼠标点击后会报错提示无此文件,我本地测试是可以的,一开始以为是cf墙的问题,关了cf的代理、切换到本服务器的另一个站点(favorites)都不行,不知道具体原理,没法处理。</s> === 嵌入YouTube视频 === '''通过扩展实现''': * 下载扩展:[[mediawikiwiki:Extension:YouTube|Extension:YouTube]] * 配置文件添加:<code>wfLoadExtension( 'YouTube' );</code> 在源代码编辑模式下使用标签<code><youtube>视频的完整URL</youtube></code>插入ytb视频。 '''通过微件实现''': <sup>※ 需要的前置工作:[[#微件]]。</sup> > 创建<code>[[微件:YouTube]]</code>页面,粘贴以下代码<sup>(均为[https://zh.moegirl.org.cn/Template:YoutubeVideo 萌娘百科]抄的,你可以根据需求调整)</sup>:<syntaxhighlight lang="wikitext" line="1"> <includeonly><iframe width="<!--{$width|escape:'html'|validate:int|default:'425'}-->" height="<!--{$height|escape:'html'|validate:int|default:355}-->" src="https://www.youtube.com/embed/<!--{if isset($playlist)}-->?listType=playlist&list=<!--{$playlist|escape:'urlpathinfo'}--><!--{else}--><!--{$id|escape:'urlpathinfo'}--><!--{/if}-->" frameborder="0" allowfullscreen></iframe></includeonly> </syntaxhighlight>> 创建<code>[[模板:YouTube]]</code>页面,粘贴以下代码:<syntaxhighlight lang="wikitext" line="1"> <includeonly>{{#if:{{{id|{{{1|}}}}}}|{{#widget:YouTube|id={{{id|{{{1|}}}}}}|width={{{width|625}}}|height={{{height|350}}}}}|{{#if:{{{playlist|}}}|{{#widget:YouTube|playlist={{{playlist|}}}|width={{{width|625}}}|height={{{height|350}}}}}|}}}}</includeonly> </syntaxhighlight>共四个有效参数:id(视频ID)、playlist(播放列表ID)<sup>(两者不能同时存在)</sup>,以及width(宽度)、height(高度)<sup>(可以留空不填,不需要带后缀,默认单位px)</sup> > 源代码编辑器调用示例: * 视频的ID(URL中“<code>watch?v=</code>”后面的字符串): <syntaxhighlight lang="wikitext" line="1"> {{YouTube|id=3U_LjQKV4FM|width=300}} </syntaxhighlight> * 播放列表(URL中“<code>list=</code>”后面的字符串): <syntaxhighlight lang="wikitext" line="1"> {{YouTube|playlist=OLAK5uy_nrxtDaW31fja4eh5HZQaaxeTe5e9EK1o0|width=400}} </syntaxhighlight>'''通过HTML代码实现''': * 一般视频网站的分享功能会提供嵌入代码。 === 鼠标悬浮显示引用文本 === <sup>※ 需要先启用扩展:Cite(初始化安装的)、[[#小工具]]</sup> 来源:[[mediawikiwiki:Reference_Tooltips|Reference_Tooltips]] 新建并复制粘贴如下页面: * js脚本:<code>[[MediaWiki:Gadget-ReferenceTooltips.js|MediaWiki:Gadget-'''ReferenceTooltips'''.js]]</code> ** 将第[[MediaWiki:Gadget-ReferenceTooltips.js#L-479|479]]行的url改为自己的网站。 * css样式:<code>[[MediaWiki:Gadget-ReferenceTooltips.css|MediaWiki:Gadget-'''ReferenceTooltips'''.css]]</code> * 小工具信息:<code>[[MediaWiki:Gadget-ReferenceTooltips|MediaWiki:Gadget-'''ReferenceTooltips''']]</code> ** [[Special:参数设置#mw-prefsection-gadgets|特殊:参数设置]]小工具选项卡中的提示文本。 在[[MediaWiki:Gadgets-definition]]页面启用小工具(插入行):<syntaxhighlight lang="text" line="1"> * ReferenceTooltips[ResourceLoader|default|type=general|dependencies=mediawiki.cookie,jquery.client]|ReferenceTooltips.js|ReferenceTooltips.css </syntaxhighlight>效果<sup>(如果没反应请尝试[[建站/WIKI功能/基础功能#刷新页面缓存|刷新缓存]])</sup>: <html><img loading="lazy" style="width: 600px;" src='https://scio.eu.org/WIKI/图片/建站相关/ReferenceTooltips.avif' /></html> === 隐藏内容 === ==== 折叠 ==== * 内置CSS样式<sup>(通过Class属性:<code>collapsible</code>)</sup>,详见:[[mediawikiwiki:Manual:Collapsible_elements|Manual:Collapsible_elements]] 源代码编辑器下插入代码:<syntaxhighlight lang="html" line="1"> <div class="toccolours mw-collapsible mw-collapsed" style="width:400px; overflow:auto;"> 点击展开查看详情 <div class="mw-collapsible-content"> 详</br> 情 <span style="color:red">在</span>此 </div> </div> </syntaxhighlight>渲染结果:<div class="toccolours mw-collapsible mw-collapsed" style="width:400px; overflow:auto;"> 点击展开查看详情<div class="mw-collapsible-content"> 详 情 <span style="color:red">在</span>此 </div></div>※ 可视化编辑器下可以修改元素,如回车会转为<nowiki><br></nowiki>标签,可以进行基本的文字编辑;源代码编辑器下只能手动搓html代码<sup>(只支持:[[#嵌入html代码]])</sup>。 ==== 剧透 ==== * 下载扩展:[[mediawikiwiki:Extension:Spoilers|Extension:Spoilers]] 记得重命名文件夹为:<code>Spoilers</code> * 配置文件添加:<code>wfLoadExtension( 'Spoilers' );</code> 官网提示的用法可以用,但我采用的是另一种用法:“<code><nowiki><spoiler show="折叠时提示文本" hide="展开后提示文本">正文</spoiler></nowiki></code>”示例:<spoiler show="折叠时提示文本" hide="展开后提示文本">测试。 你好。 我是SCIO。 https://scio.icu/image/scio.png https://scio.icu/image/touxiang.gif</spoiler>※ 其实叫折叠更加恰当。 ※ 无法通过可视化编辑器直接调用,不过这类标签我都是复制粘贴一个当模板一直套用,可以在可视化编辑器内编辑内容,也可以编辑参数<sup>(就是提示文本)</sup>;跟代码块一样,一个换行符/回车就是一行;正常解析wikitext标记语言。 ※ 默认提示与风格就需要自行修改扩展源代码了,我没那个水平就不硬上了,如果你进行了美化欢迎与我分享配置。 ==== <s>黑幕</s> ==== <sup><s>※ 需要启用[[#CSS]],代码来源于[https://lobba.miraheze.org/wiki/Template:Spoiler lobba]</s></sup> '''新版本有兼容性问题''' <s>新建并复制粘贴:<code>[[模板:黑幕]]</code>、[[模板:黑幕CSS]]<sup>(页内有效果测试)</sup></s> * <s>实现方式:<code>模板:黑幕</code>只是加载了<code>模板:黑幕CSS</code>,参数被<code>class="spoiler"</code>的span标签包含,spoiler的样式由黑幕CSS设定。</s> * <s>所以一般调用方式(黑幕文本):<code><nowiki>{{黑幕|要黑幕的文本}}</nowiki></code></s> * <s>特殊情况(对div、span标签使用):在页面添加空白参数:<code><nowiki>{{黑幕|}}</nowiki></code>或<code><nowiki>{{黑幕CSS}}</nowiki></code>(两者效力一致,因为用前者的目的也只是它加载了后者所设定的css样式)并以以下方式调用:</s> ** <s>适用于一行文本:<code><span class="'''spoiler'''">内容<nowiki></span></nowiki></span></code></s> ** <s>适用于一块区域:</s><div class="'''spoiler'''"><code><s>内容<nowiki></div></nowiki></s></code></div> ** <s>※ 作用于当前页面所有clacss属性为spoiler的内容,即您可以启用[[#嵌入html代码]],使任意HTML调用此样式。</s> <s>如果想实现更多功能,可以尝试偷一下萌娘百科的(引自镜像站):[https://moegirl.icu/Template:%E9%BB%91%E5%B9%95 Template:黑幕]、[https://moegirl.icu/Template:%E6%96%87%E5%AD%97%E6%A8%A1%E7%B3%8A Template:文字模糊]</s> [[Category:建站]]
该页面使用的模板:
Template:Image-size
(
查看源代码
)
返回
建站/WIKI功能/功能实现
。
导航菜单
个人工具
登录
命名空间
页面
讨论
不转换
不转换
简体
繁體
大陆简体
香港繁體
澳門繁體
大马简体
新加坡简体
臺灣正體
查看
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
站点信息
更新日志
所有内容
三部曲
互联网
提问的艺术
策略与名词目录
建站
LAMP
WIKI功能
互联网
慢讯
OSINT项目
工具
链入页面
相关更改
特殊页面
页面信息