社区文档构建进行中,欢迎编辑。社区答疑群(非官方):717421103,点点小课堂(腾讯会议):5696651544

全站通知:

帮助:解析函数/defaultsort

来自WIKI实验室WIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索

DEFAULTSORT是一个魔术字。帮助:解析函数页列出了所有解析函数的说明。

DEFAULTSORT

指定页面排序关键字。MediaWiki原生支持。

为页面设置默认的排序关键字。当页面被索引时,这个关键字将用于排序,确保页面在分类和搜索结果中按照指定顺序显示。

设置分类时指定排序关键字可以覆盖它:[[分类:分类名称|排序关键字]]

语法

{{DEFAULTSORT:文本|选项}}
  • 文本:要设置为默认排序键的字符串,需要按顺序显示页面时,将按照此值进行排序。
  • 选项:可选参数,可以是以下值之一:
    • noreplace:设置不替换已经存在默认排序键,可用于禁止后续的#defaultsort覆盖。
    • noerror:不显示错误信息,用于阻止多次使用#defaultsort的报错。

示例

比如在页面史密斯专员中设置其排序位置为Smith

  • 设置默认排序键: {{DEFAULTSORT:Smith}}
  • 使用 noreplace 选项:{{DEFAULTSORT:Smith|noreplace}}
  • 使用 noerror 选项:{{DEFAULTSORT:Smith|noerror}}

底层代码

/** mediawiki-1.37.0\includes\parser\CoreParserFunctions.php
 * @param Parser $parser
 * @param string $text The sortkey to use
 * @param string $uarg Either "noreplace" or "noerror" (in en)
 *   both suppress errors, and noreplace does nothing if
 *   a default sortkey already exists.
 * @return string
 */
public static function defaultsort( $parser, $text, $uarg = '' ) {
	static $magicWords = null;
	if ( $magicWords === null ) {
		$magicWords = $parser->getMagicWordFactory()->newArray(
			[ 'defaultsort_noerror', 'defaultsort_noreplace' ] );
	}
	$arg = $magicWords->matchStartToEnd( $uarg );

	$text = trim( $text );
	if ( strlen( $text ) == 0 ) {
		return '';
	}
	$old = $parser->getCustomDefaultSort();
	if ( $old === false || $arg !== 'defaultsort_noreplace' ) {
		$parser->setDefaultSort( $text );
	}

	if ( $old === false || $old == $text || $arg ) {
		return '';
	} else {
		$converter = $parser->getTargetLanguage()->getConverter();
		return '<span class="error">' .
			wfMessage( 'duplicate-defaultsort',
				// Message should be parsed, but these params should only be escaped.
				$converter->markNoConversion( wfEscapeWikiText( $old ) ),
				$converter->markNoConversion( wfEscapeWikiText( $text ) )
			)->inContentLanguage()->text() .
			'</span>';
	}
}

该函数的主要逻辑如下:

  • 初始化:检查是否已经定义了默认排序关键字。如果没有定义,则使用传入的 `$text` 设置为默认排序关键字。
  • 错误处理:如果之前已经设置了默认排序关键字,并且当前传入的 `$text` 不同于之前的,则显示一个错误信息,提示存在重复的默认排序关键字。

实际用例

一些Wiki使用了相关特性,如下所示这个静态列表可能在下列页面更改后过时仅供批判性参考