Extension:BetaFeatures(测试功能)
发行状态: 稳定版 |
|
|---|---|
| 实现 | 媒体, 函数钩, 数据库 |
| 描述 | 可讓其他的扩展在用户参数设置中註冊其beta功能 |
| 作者 | Mark Holmquist (MarkTraceur留言) |
| 最新版本 | 0.1 (Continous updates) |
| 兼容性政策 | 快照跟随MediaWiki发布。 master分支不向后兼容。 |
| MediaWiki | 1.25+ |
| PHP | 5.4+ |
| 数据库更改 | 是 |
| 表 | betafeatures_user_counts |
| 许可协议 | GNU通用公眾授權條款2.0或更新版本 |
| 下載 | |
| 示例 | Special:Preferences#mw-prefsection-betafeatures |
|
Special |
|
|
|
| 前往translatewiki.net翻譯BetaFeatures扩展 | |
| 問題 | 开启的任务 · 报告错误 |
测试功能(BetaFeatures)扩展可讓其他的MediaWiki扩展在wiki的使用者偏好清單中登錄beta功能。它通过現有的用户设置架構和一些特殊页面達到其功能。
安装
- 下载文件,并解压
BetaFeatures文件夹到extensions/目录中。
开发者和代码贡献人员应改从Git安装此扩展,输入:cd extensions/ git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/BetaFeatures
- 請新增下列代码到您的LocalSettings.php文件的底部:
wfLoadExtension( 'BetaFeatures' );
- 請运行更新脚本,它将自动创建此扩展所必须的数据库表。
- 按需求配置。
完成 – 請导航至您的wiki上的Special:Version,以验证此扩展已成功安装。
对您的扩展使用新钩子
使用此扩展程序支持您的Beta功能非常简单。在您的extension.json文件中注册一个类型为“GetBetaFeaturePreferences”的钩子——语法几乎与钩子相同,只需稍作更改即可支持本例中需要的首选项类型。
GetPreferences
在extension.json中:
"Hooks": {
"GetBetaFeaturePreferences": "MediaWiki\\Extension\\MyExtension\\Hooks::onGetBetaFeaturePreferences"
},
在MyExtension/includes/Hooks.php中:
namespace MediaWiki\Extension\MyExtension;
class Hooks {
public static function onGetBetaFeaturePreferences( User $user, array &$betaPrefs ) {
$extensionAssetsPath = MediaWikiServices::getInstance()
->getMainConfig()
->get( 'ExtensionAssetsPath' );
$betaPrefs['myextension-awesome-feature'] = [
// 前兩個是訊息鍵
'label-message' => 'myextension-awesome-feature-message',
'desc-message' => 'myextension-awesome-feature-description',
// 代表該特徵的圖片路徑。
// 圖像對於從左到右和從右到左的語言,通常會有所不同。
// 特定語言的圖片亦可透過語言代碼指定。
'screenshot' => array(
'ru' => "$extensionAssetsPath/MyExtension/images/screenshot-ru.png",
'ltr' => "$extensionAssetsPath/MyExtension/images/screenshot-ltr.png",
'rtl' => "$extensionAssetsPath/MyExtension/images/screenshot-rtl.png",
),
// 功能說明的連結--或許可以使用mw.org的子頁面?
'info-link' => 'https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:MyExtension/MyFeature',
// 此功能的討論的連結--討論頁可能可以用
'discussion-link' => 'https://www.mediawiki.org/wiki/Help_talk:Extension:MyExtension/MyFeature',
];
}
}
'label-message'、'desc-message'、'info-link'和'discussion-link'都是需要的。请确保您全部都有使用!然后,您可以使用Beta功能中提供的便捷功能来检查该功能是否已启用。
// SpecialMyExtension.php
class SpecialMyExtension extends SpecialPage {
public function execute() {
if ( BetaFeatures::isFeatureEnabled( $this->getUser(), 'my-awesome-feature' ) ) {
// 請實作此功能!
}
}
}
您也可以使用常规首选项检查,但不要检查真值或假值--請使用HTMLFeatureField类中的值。
// SpecialMyExtension.php
class SpecialMyExtension extends SpecialPage {
public function execute() {
if ( $this->getUser()->getOption( 'my-awesome-feature' ) === HTMLFeatureField::OPTION_ENABLED ) {
// 請實作此功能!
}
}
}
由于BetaFeatures类应该无处不在,因此您可以在任何钩子、特殊页面或您想要的任何其他内容中使用便利函数。请注意这些更改可能会引入的潜在性能或缓存问题。
如果您还想「不通过」Beta功能使用您的扩展,您还应该检查它是否存在,例如:
if (
!ExtensionRegistry::getInstance()->isLoaded( 'BetaFeatures' )
|| \BetaFeatures::isFeatureEnabled( $user, 'my-awesome-feature' )
) {
// 請實作此功能!
}
配置
$wgBetaFeaturesWhitelist配置变量可用于限制首选项中显示的Beta功能。
默认情况下,它为空,并显示所有Beta功能。
如果使用它,那么为了在参数设置中显示Beta版功能,需要在白名单中列出。
此配置变量接受字符串数组。
每个字符串应是传递给onGetBetaFeaturePreferences()的首选项定义中指定的Beta功能的名称。
例如,在上面给出的代码中,Beta功能的名称是myextension-awesome-feature,因此您需要将该字符串添加到您的维基配置的$wgBetaFeaturesWhitelist数组中:
$wgBetaFeaturesWhitelist = [
'myextension-awesome-feature'
];
高级用法
想尝试更酷的玩法?!
自动参与组
在此示例中,我们定义了一个“自动參與”的选项 - 如果用户选中此选项,并且特定组中出现新功能,则用户将自动开启这些功能。
// MyExtensionHooks.php
class MyExtensionHooks {
static function getPreferences( $user, &$prefs ) {
global $wgExtensionAssetsPath;
$prefs['my-awesome-feature-auto-enroll'] = array(
// 前兩個是訊息鍵
'label-message' => 'beta-feature-autoenroll-message',
'desc-message' => 'beta-feature-autoenroll-description',
// 功能說明的連結--或許可以使用mw.org的子頁面?
'info-link' => 'https://wwww.mediawiki.org/wiki/Special:MyLanguage/MyFeature',
// 此功能的討論的連結--討論頁可能可以用
'discussion-link' => 'https://www.mediawiki.org/wiki/Talk:MyFeature',
// 為此群組啟用自動參與功能
'auto-enrollment' => 'my-awesome-feature-group',
);
$prefs['my-awesome-feature'] = array(
// 前兩個是訊息鍵
'label-message' => 'beta-feature-message',
'desc-message' => 'beta-feature-description',
// 代表該特徵的圖片路徑。
// 圖像對於從左到右和從右到左的語言,通常會有所不同。
// 特定語言的圖片亦可透過語言代碼指定。
'screenshot' => array(
'ru' => "$wgExtensionAssetsPath/MyExtension/images/screenshot-ru.png",
'ltr' => "$wgExtensionAssetsPath/MyExtension/images/screenshot-ltr.png",
'rtl' => "$wgExtensionAssetsPath/MyExtension/images/screenshot-rtl.png",
),
// Link to information on the feature - use subpages on mw.org, maybe?
'info-link' => 'https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:MyExtension/SomeFeature',
// Link to discussion about the feature - talk pages might work
'discussion-link' => 'https://www.mediawiki.org/wiki/Extension_talk:MyExtension/SomeFeature',
// Add feature to this group
'group' => 'my-awesome-feature-group',
);
}
}
依赖管理
接下来,我们实际上可以定义每个功能的依赖关系管理。
为此,我们首先用钩子“GetBetaFeatureDependencyHooks”注册我们想要用于此目的的钩子的「名称」,然后我们注册一个该类型的钩子,该钩子检查某些依赖关系,如果满足,则返回true,否则返回false。
// MyExtension.php
$wgAutoloadClasses['MyExtensionHooks'] = __DIR__ . '/MyExtensionHooks.php';
Hooks::register( 'GetBetaFeaturePreferences', 'MyExtensionHooks::getPreferences' );
Hooks::register( 'GetBetaFeatureDependencyHooks', 'MyExtensionHooks::getDependencyCallbacks' );
Hooks::register( 'CheckDependenciesForMyExtensionFeature', 'MyExtensionHooks::checkDependencies' );
// MyExtensionHooks.php
class MyExtensionHooks {
static function getPreferences( $user, &$prefs ) {
global $wgExtensionAssetsPath;
$prefs['my-awesome-feature'] = array(
// The first two are message keys
'label-message' => 'beta-feature-message',
'desc-message' => 'beta-feature-description',
// Paths to images that represents the feature.
// The image is usually different for ltr and rtl languages.
// Images for specific languages can also specified using the language code.
'screenshot' => array(
'ru' => "$wgExtensionAssetsPath/MyExtension/images/screenshot-ru.png",
'ltr' => "$wgExtensionAssetsPath/MyExtension/images/screenshot-ltr.png",
'rtl' => "$wgExtensionAssetsPath/MyExtension/images/screenshot-rtl.png",
),
// Link to information on the feature - use subpages on mw.org, maybe?
'info-link' => 'https://www.mediawiki.org/wiki/Special:MyLanguage/Extension:MyExtension/SomeFeature',
// Link to discussion about the feature - talk pages might work
'discussion-link' => 'https://www.mediawiki.org/wiki/Extension_talk:MyExtension/SomeFeature',
// Mark as dependent on something
'dependent' => true,
);
}
static function getDependencyCallbacks( &$depHooks ) {
$depHooks['my-awesome-feature'] = 'CheckDependenciesForMyExtensionFeature';
return true;
}
static function checkDependencies() {
$dependenciesMet = false;
// Do some fancy checking and return the result
return $dependenciesMet;
}
}
如果功能被标记为依赖功能,您可以滥用此功能来禁用每个wiki的功能。但这听起来真的很骇人听闻。您可能不应该这样做。我能听见您现在在想它,停手吧。
数据库填充
有一个数据库表(betafeatures_user_counts)由Beta功能定义和使用。但是,如果您尝试在本地使用它,您可能会对它感到困惑。
当缓存过期(30分钟TTL)时,我们使用作业队列来运行此表的更新。如果您的wiki配置为对每个请求运行作业,这将使每30分钟大约一个请求的速度非常慢,但其余的请求会相对较快。如果您将您的wiki配置为通过cron运行作业将会好很多。
故障排除
使用次數統計
使用次數統計可能無法精確反映當前即時啟用某些beta版功能的使用者數量。這些數據應視為近似值。
此數值由一項工作計算得出,該工作可能延遲或耗時較長。過去,這些數據還設有30分鐘的快取機制。
参见
| 此扩展用于一个或多个维基媒体项目。 这可能意味着扩展足够稳定、运作足够良好,可以用在这样的高流量的网站上。 请在维基媒体的CommonSettings.php和InitialiseSettings.php配置文件中查找此扩展的名称以查看哪些网站安装了该扩展。 特定wiki上的已安装的扩展的完整列表位于Special:Version页面。 |
| 此扩展在以下wiki农场/托管网站和/或软件包中提供: 這不是一份權威名單。 即使某些wiki农场/托管网站和/或软件包未在这里列出,它们也可能提供此扩展。 请检查你的wiki农场/托管网站或软件包以确认提供情况。 |
- Stable extensions/zh
- Media handling extensions/zh
- Hook extensions/zh
- Database extensions/zh
- GPL licensed extensions/zh
- Extensions in Wikimedia version control/zh
- ExtensionTypes extensions/zh
- GetPreferences extensions/zh
- LoadExtensionSchemaUpdates extensions/zh
- MakeGlobalVariablesScript extensions/zh
- PreferencesGetIcon extensions/zh
- SaveUserOptions extensions/zh
- SkinTemplateNavigation::Universal extensions/zh
- UserGetDefaultOptions extensions/zh
- All extensions/zh
- Pages using deprecated NoteTA template
- Extensions used on Wikimedia/zh
- Extensions included in Canasta/zh
- Extensions included in Miraheze/zh
- Beta Features/zh
