Extension:BetaFeatures

From mediawiki.org
This page is a translated version of the page Extension:BetaFeatures and the translation is 97% complete.
Outdated translations are marked like this.
MediaWiki manüel uzantıları
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 Template:WikimediaDownload/gerritonly
Örnek Special:Preferences#mw-prefsection-betafeatures
Special
  • $wgBetaFeatures
  • $wgBetaFeaturesAllowList
Quarterly downloads 87 (Ranked 71st)
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üzdeki BetaFeatures 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.
  • Yes 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',
        ];
    }
}
Şimdilik, 'label-message', 'desc-message', 'info-link' ve 'discussion-link' gereklidir. Lütfen hepsini kullandığınızdan emin olun!

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.

Ayrıca bakınız