امتداد:مزايا_تجريبية
![]() حالة الإصدار مستقر |
|
---|---|
![]() |
|
تنفيذ | وسائط, وصلة , قاعدة بيانات |
بيان | يسمح للامتدادات الأخرى تسجيل مزاياها التجريبية في تفضيلات المستخدم |
المؤلف/المؤلفون | Mark Holmquist (MarkTraceurنقاش) |
آخر إصدار | 0.1 (Continous updates) |
سياسة التوافق | تصدر اللقطات البرمجية مع ميدياويكي. الإصدار الرئيسي لا يتوافق مع الإصدارات السابقة. |
MediaWiki | 1.25+ |
PHP | 5.4+ |
تغييرات قاعدة البيانات | نعم |
جداول | betafeatures_user_counts |
ترخيص | رخصة جنو العمومية 2.0 أو ما بعدها |
التنزيل | |
مثال | Special:Preferences#mw-prefsection-betafeatures |
Special |
|
|
|
تنزيلات ربع سنوية | 61 (Ranked 86th) |
استخدام مواقع الويكي العمومية | 1,031 (Ranked 249th) |
ترجم الامتداد BetaFeatures لو كان متوفرا على translatewiki.net | |
المسائل | المهام المفتوحة · الإبلاغ عن عطل تقني |
يسمح امتداد BetaFeatures لامتدادات ميدياويكي الأخرى تسجيل مزايا تجريبية في قائمة تفضيلات المستخدم على موقع الويكي. يستعين الامتداد ببنية تفضيلات المستخدم القائمة وبضع صفحات أخرى لتنفيذ وظيفته.
التنصيب
- نزّل الملف/الملفات وضعها في دليل يحمل اسم
BetaFeatures
داخل مجلد extensions/
لديك.
يجب على مطوري البرمجيات والمساهمين بالكود البرمجي تثبيت الامتداد من غت بدلا من ذلك، مستخدمين:cd extensions/
git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/BetaFeatures - أضف الكود التالي في الجزء الأسفل من ملف LocalSettings.php :
wfLoadExtension( 'BetaFeatures' );
- شغل نص التحديث البرمجي الذي سوف ينشئ تلقائيا جداول قاعدة البيانات الضرورية التي يحتاج إليها الامتداد.
- أعدّ الامتداد حسب ما هو مطلوب.
- تم التنفيذ – اذهب إلى Special:Version على موقع الويكي لديك كي تتحقق من أن الامتداد قد ثبت بنجاح.
استخدام الروابط الجديدة في امتدادك
إن استخدام هذا الامتداد كي تدعم مزاياك التجريبية سهل. سجل رابط من النوع «GetBetaFeaturePreferences
» في ملف extension.json
لديك — تماثل الصياغة البرمجية إلى حد كبير الرابط 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'] = [
// 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',
];
}
}
'label-message'
و'desc-message'
و'info-link'
و'discussion-link'
بنود مطلوبة. يرجى الحرص على استخدامها جميعا!ومن ثم، يمكنك استخدام وظيفة الملائمة التي يقدمها BetaFeatures كي تتأكد من كون السمة ناشطة أم لا.
// SpecialMyExtension.php
class SpecialMyExtension extends SpecialPage {
public function execute() {
if ( BetaFeatures::isFeatureEnabled( $this->getUser(), 'my-awesome-feature' ) ) {
// Implement the feature!
}
}
}
يمكنك أيضا استخدام سبيل تحقق من التفضيلات معتاد، لكن عليك ألا تتحقق مستخدما قيم «صحيح - truthy» أو «خطأ - falsy» - بل عليك استخدام قيم من فئة HTMLFeatureField
.
// SpecialMyExtension.php
class SpecialMyExtension extends SpecialPage {
public function execute() {
if ( $this->getUser()->getOption( 'my-awesome-feature' ) === HTMLFeatureField::OPTION_ENABLED ) {
// Implement the feature!
}
}
}
منذ أن فئة BetaFeatures
يجب أن تكون قائمة في كل مكان، يمكنك استخدام وظيفة الملائمة في أي رابط أو صفحة خاصة أو أي شيء آخر تريد. إلا أن عليك أن تحذر من حدوث مشاكل محتملة في الأداء أو الحفظ المؤقت التي ربما تنتج عن تنفيذ تلك التغييرات.
لو كنت ترغب أيضا في استخدام امتدادك دون BetaFeatures، يتعين عليك أيضا أن تتحقق من وجوده، مثال:
if (
!ExtensionRegistry::getInstance()->isLoaded( 'BetaFeatures' )
|| \BetaFeatures::isFeatureEnabled( $user, 'my-awesome-feature' )
) {
// Implement the feature!
}
الإعداد
يمكن استخدام متغير الضبط $wgBetaFeaturesWhitelist
في تقييد ما هي المزايا التجريبية التي تعرض في صفحة التفضيلات.
تلقائيا تكون القيمة فارغة، وبالتالي تعرض كافة المزايا التجريبية.
لو كانت مستخدمة، لذا كي تعرض ميزة تجريبية في صفحة التفضيلات يتعين أن تدرج في القائمة البيضاء.
يقبل متغير الإعداد هذا أي عدد من السطور.
يجب أن يكون كل سطر هو اسم الميزة التجريبية حسب ما هو محدد في تعريف التفضيلات المذكور في onGetBetaFeaturePreferences()
.
على سبيل المثال، كما هو مبين في الكود البرمجي السالف، اسم الميزة التجريبية هو 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(
// 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',
);
}
}
التعامل مع مسألة التبعية
بعد ما سلف، يمكنك في الواقع تحديد التعامل مع مسألة التبعية لكل ميزة على حدة. كي ننفذ ذلك نسجل أولا اسم الرابط الذي نرغب في استخدامه في هذا الأمر مع الرابط "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;
}
}
يمكنك إساءة استخدام استخدام هذه السمة كي تعطل المزايا لكل موقع ويكي على حدة، لو كانت المزايا محددة على أنها تابعة. إلا أن هذا الأمر يبدو معقدا من الناحية البرمجية. ربما يجب عليك تجنبها. يمكنني أن أسمعك تمعن النظر في هذا الأمر الآن، لا تفعل ذلك.
أمور خاصة بقاعدة البيانات
يوجد جدول قاعدة بيانات (betafeatures_user_counts
) محدد، ومستخدم، في BetaFeatures. إلا أنك ربما تنتابك الحيرة بسببه لو حاولت استخدامه محليا.
نستعين بطابور المهام كي نشغل التحديثات على هذا الجدول، حينما تنتهي صلاحية الحفظ المؤقت (30 دقيقة TTL). لو أعدّ موقعك الويكي كي يشغل مهام لكل طلب، سوف يجعل هذا حوالي طلب واحد فقط كل 30 دقيقة بطيء للغاية، إلا أن الباقي سوف يكون سريعا إلى حد ما. لو أعددت موقعك الويكي كي يشغل المهام مستخدما cron، سوف تعمل الأمور أفضل كثيرا.
استكشاف الأخطاء وإصلاحها
عدد مرات الاستخدام
قد لا يكون عدد مرات الاستخدام دقيقًا حينما يعرض عدد المستخدمين الذين نشطوا بعض المزايا التجريبية في تلك اللحظة بعينها. يجب أن ينظر إلى هذه الأعداد على أنها أعداد تقريبية.
هذا العدد يحسب عن طريق مهمة، والتي يجوز تأجيلها أو تستغرق وقتًا طويلًا حتى تنتهي. في السابق، كان ثمة أيضًا برهة مقدارها 30 دقيقة للحفظ المؤقت في شأن هذه الأعداد.
انظر أيضا
هذا الامتداد يستخدم على واحد من مشاريع ويكيميديا أو أكثر من واحد. يعني هذا الأمر أن الامتداد مستقر ويعمل/تعمل جيدا بما فيه الكفاية ليستخدم/لتستخدم في مواقع تتمتع بمستوى زيارات مرتفع مثل هذه. ابحث عن اسم هذا الامتداد في ملفات الضبط CommonSettings.php وكذلك InitialiseSettings.php كي ترى أين تنصب. توجد قائمة كاملة بالامتدادات المنصبة على موقع ويكي بعينه على صفحة Special:Version الخاصة بموقع الويكي. |
هذا الامتداد مشمول في الحزم أو مزارع الويكي التالية أو كليهما: هذه ليست قائمة كاملة. بعض مزارع الويكي أو الاستضافة أو حزم البرمجيات قد تحتوي على هذا الامتداد حتى لو كانت غير مدرجة هنا. راجع دائمًا مزرعة الويكي أو المستضيف أو حزمة البرمجيات للتأكد من ذلك. |