Tools 是非官方社区Wiki。社区文档正在编写中,欢迎参与。 Wiki编辑答疑群:717421103
版本250722.2
全站通知:

帮助:解析函数/defaultsort

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

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

DEFAULTSORT

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

当页面被索引时,用于在分类和搜索结果中的排序。

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

语法

{{DEFAULTSORT:文本|选项}}
  • 文本:要作为排序依据的字符串。分类与搜索结果会按此值排序。
  • 选项(可选):
    • noreplace:若页面已有默认排序键,则不替换。
    • noerror:禁止在多次设置不同排序键时显示错误提示。

示例

比如在页面史密斯专员中设置其排序位置为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使用了相关特性,如下所示这个静态列表可能在下列页面更改后过时仅供批判性参考