Extension:BetaFeatures
![]() Sürüm durumu: kararlı |
|
---|---|
![]() |
|
Uygulama | Medya, Kanca , Veritabanı |
Açıklama | Diğer uzantıların beta özelliklerini kullanıcı tercihlerine kaydetmesine izin verir |
Yazar(lar) | Mark Holmquist (MarkTraceurmesaj) |
En son sürüm | 0.1 (Continous updates) |
Uyumluluk politikası | MediaWiki ile birlikte anlık görüntüler yayımlanır. Master geriye dönük olarak uyumlu değil. |
MediaWiki | 1.25+ |
PHP | 5.4+ |
Veritabanı değişiklikleri | Evet |
Tablolar | betafeatures_user_counts |
Lisans | GNU Genel Kamu Lisansı 2.0 veya üstü |
İndir | |
Örnek | Special:Preferences#mw-prefsection-betafeatures |
Special |
|
|
|
Quarterly downloads | 61 (Ranked 86th) |
Public wikis using | 1,031 (Ranked 249th) |
Translatewiki.net adresinde mevcutsa, BetaFeatures uzantısını çevirin | |
Sorunlar | Açık görevler · Hata bildir |
BetaFeatures uzantısı, diğer MediaWiki uzantılarının, beta özelliklerini vikideki kullanıcı tercihleri listesiyle kaydetmesine izin verir. İşlevini gerçekleştirmek için mevcut kullanıcı tercihleri mimarisini ve birkaç özel sayfayı kullanır.
Kurulum
- Dosyaları indirin ve
extensions/
klasörünüzdekiBetaFeatures
adlı dizine yerleştirin.
Developers and code contributors should install the extension from Git instead, using:cd extensions/
git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/BetaFeatures - LocalSettings.php dosyanızın altına aşağıdaki kodu ekleyin:
wfLoadExtension( 'BetaFeatures' );
- Bu uzantının ihtiyaç duyduğu gerekli veritabanı tablolarını otomatik olarak oluşturacak betik güncelleme komutunu çalıştırın.
- Gerektiği gibi yapılandırın.
- Yapıldı – Uzantının başarıyla yüklendiğini doğrulamak için vikinizde Special:Version seçeneğine gidin.
Uzantınızda yeni kancaları kullanma
Beta özelliğinizi desteklemek için bu uzantıyı kullanmak kolaydır. extension.json
dosyanıza "GetBetaFeaturePreferences
" türünde bir kanca kaydedin. Sözdizimi GetPreferences
kancasıyla hemen hemen aynıdır, bu durumda ihtiyacımız olan tercih türünü desteklemek için küçük değişiklikler yapın.
extension.json
içinde:
"Hooks": {
"GetBetaFeaturePreferences": "MediaWiki\\Extension\\MyExtension\\Hooks::onGetBetaFeaturePreferences"
},
MyExtension/includes/Hooks.php
içinde:
namespace MediaWiki\Extension\MyExtension;
class Hooks {
public static function onGetBetaFeaturePreferences( User $user, array &$betaPrefs ) {
$extensionAssetsPath = MediaWikiServices::getInstance()
->getMainConfig()
->get( 'ExtensionAssetsPath' );
$betaPrefs['myextension-awesome-feature'] = [
// The first two are message keys
'label-message' => 'myextension-awesome-feature-message',
'desc-message' => 'myextension-awesome-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' => "$extensionAssetsPath/MyExtension/images/screenshot-ru.png",
'ltr' => "$extensionAssetsPath/MyExtension/images/screenshot-ltr.png",
'rtl' => "$extensionAssetsPath/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/MyFeature',
// Link to discussion about the feature - talk pages might work
'discussion-link' => 'https://www.mediawiki.org/wiki/Special:MyLanguage/Help_talk:Extension:MyExtension/MyFeature',
];
}
}
Ardından, özelliğin etkin olup olmadığını kontrol etmek için BetaFeatures tarafından sağlanan kullanışlılık işlevini kullanabilirsiniz.
// SpecialMyExtension.php
class SpecialMyExtension extends SpecialPage {
public function execute() {
if ( BetaFeatures::isFeatureEnabled( $this->getUser(), 'my-awesome-feature' ) ) {
// Implement the feature!
}
}
}
Normal bir tercih denetimi de kullanabilirsiniz, ancak doğru veya yanlış değerlere karşı kontrol etmeyin. HTMLFeatureField sınıfındaki değerleri kullanın.
// SpecialMyExtension.php
class SpecialMyExtension extends SpecialPage {
public function execute() {
if ( $this->getUser()->getOption( 'my-awesome-feature' ) === HTMLFeatureField::OPTION_ENABLED ) {
// Implement the feature!
}
}
}
BetaFeatures sınıfının her yerde bulunması gerektiğinden, kolaylık işlevini herhangi bir kancada, özel sayfada veya istediğiniz herhangi bir şeyde kullanabilirsiniz. Bu değişikliklerle ortaya çıkabilecek potansiyel performans veya önbelleğe alma sorunlarının farkında olun.
Uzantınızı Beta Özellikleri olmadan da kullanmak istiyorsanız, varlığını da kontrol etmelisiniz, örneğin:
if (
!ExtensionRegistry::getInstance()->isLoaded( 'BetaFeatures' )
|| \BetaFeatures::isFeatureEnabled( $user, 'my-awesome-feature' )
) {
// Implement the feature!
}
Yapılandırma
$wgBetaFeaturesWhitelist
yapılandırma değişkeni, tercihlerde hangi beta özelliklerinin gösterileceğini sınırlamak için kullanılabilir.
Varsayılan olarak boştur ve tüm beta özellikleri gösterilir.
Kullanılıyorsa, bir beta özelliğinin tercihlerde görünmesi için beyaz listede listelenmesi gerekir.
Bu yapılandırma değişkeni bir dizi dizeyi kabul eder.
Her dize, onGetBetaFeaturePreferences()
öğesine iletilen tercih tanımında belirtildiği gibi bir beta özelliğinin adı olmalıdır.
Örneğin, yukarıda verilen kodda, beta özelliğinin adı myextension-awesome-feature
şeklindedir, dolayısıyla bu dizeyi içindeki $wgBetaFeaturesWhitelist
dizisine vikinizin yapılandırması gerekir:
$wgBetaFeaturesWhitelist = [
'myextension-awesome-feature'
];
Gelişmiş kullanım
Gerçekten harika bir şey görmek ister misin?
Otomatik kayıt grupları
Bu örnekle, "otomatik kayıt" olan bir tercih kaydediyoruz. Bir kullanıcı bunu kontrol ederse ve belirli bir grupta yeni özellikler ortaya çıkarsa, kullanıcı bu özelliklere otomatik olarak kaydolacaktır.
// MyExtensionHooks.php
class MyExtensionHooks {
static function getPreferences( $user, &$prefs ) {
global $wgExtensionAssetsPath;
$prefs['my-awesome-feature-auto-enroll'] = array(
// The first two are message keys
'label-message' => 'beta-feature-autoenroll-message',
'desc-message' => 'beta-feature-autoenroll-description',
// Link to information on the feature - use subpages on mw.org, maybe?
'info-link' => 'https://wwww.mediawiki.org/wiki/Special:MyLanguage/MyFeature',
// Link to discussion about the feature - talk pages might work
'discussion-link' => 'https://www.mediawiki.org/wiki/Talk:MyFeature',
// Enable auto-enroll for this group
'auto-enrollment' => 'my-awesome-feature-group',
);
$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',
// Add feature to this group
'group' => 'my-awesome-feature-group',
);
}
}
Bağımlılık yönetimi
Ardından, özellik başına bağımlılık yönetimini gerçekten tanımlayabiliriz. Bunu yapmak için önce bunun için kullanmak istediğimiz kancanın adın "GetBetaFeatureDependencyHooks " kancasına kaydederiz, sonra bazılarını kontrol eden bu türden bir kancayı kaydederiz. Bağımlılık ve karşılanırsa true, yoksa false döndürür.
// 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;
}
}
Bağımlı olarak işaretlenmişlerse, özellikleri wiki başına devre dışı bırakmak için bu özelliği kötüye kullanabilirsiniz. Ama bu kulağa gerçekten zor geliyor. Muhtemelen yapmamalısın. Şu anda bunu düşündüğünü duyabiliyorum, kes şunu.
Veritabanı malzemeleri
BetaFeatures tarafından tanımlanan ve kullanılan bir veritabanı tablosu (betafeatures_user_counts
) vardır. Ancak yerel olarak kullanmaya çalışırsanız kafanız karışabilir.
Önbelleğin süresi dolduğunda (30 dakika TTL) bu tablo için güncellemeleri çalıştırmak için iş kuyruğunu kullanırız. Eğer vikiniz her istekte iş çalıştıracak şekilde yapılandırılmışsa, bu her 30 dakikada bir istekte yeniden göze çarpacak şekilde yavaşlayacaktır, ancak geri kalanı görece hızlı olacaktır. Vikinizi işleri cron aracılığıyla çalıştıracak şekilde yapılandırırsanız, işler çok daha iyi çalışacaktır.
Troubleshootings
Usage counts
The usage counts might not reflect exactly the number of users having some beta features activated at this precise moment. These should be interpreted as approximate numbers.
This number is computed by a job, which could be delayed or long-running. In the past, there was also a 30-minutes cache on these figures.
Ayrıca bakınız
Bu uzantı bir veya daha fazla Wikimedia projelerinde kullanılıyor. Bu, muhtemelen uzantının kararlı olduğu ve bu tür yüksek trafikli web siteleri tarafından kullanılacak kadar iyi çalıştığı anlamına gelir. Nerede kurulduğunu görmek için bu uzantının adını Wikimedia'nın CommonSettings.php ve InitialiseSettings.php yapılandırma dosyalarında arayın. Belirli bir vikide yüklü olan uzantılar listesinin tamamı vikinin Special:Version sayfasında görülebilir. |
This extension is included in the following wiki farms/hosts and/or packages: This is not an authoritative list. Some wiki farms/hosts and/or packages may contain this extension even if they are not listed here. Always check with your wiki farms/hosts or bundle to confirm. |