Manual:Kancalar/GetPreferences
GetPreferences | |
---|---|
sürüm 1.16.0 sürümünden mevcuttur Kullanıcı tercihlerini değiştirin. | |
İşlevi tanımlayın: | public static function onGetPreferences( User $user, array &$preferences ) { ... }
|
Ek kancası | extension.json sürümünde:
{
"Hooks": {
"GetPreferences": "MediaWiki\\Extension\\MyExtension\\Hooks::onGetPreferences"
}
}
|
Çağrıdan: | Dosya(lar): preferences/DefaultPreferencesFactory.php |
Arayüz: | GetPreferencesHook.php |
Kancaların takılmasıyla ilgili daha fazla bilgi için Manual:Hooks sayfasına bakın.
Bu kancayı kullanan uzantı örnekleri için Category:GetPreferences extensions/tr sayfasına bakın.
Since REL1_35:
Define function: |
public function onGetPreferences( $user, &$preferences ) { ... }
|
---|---|
Attach hook: | In extension.json: |
{
"Hooks": {
"GetPreferences": "example_tag"
},
"HookHandlers": {
"example_tag": {
"class": "MediaWiki\\Extension\\ExampleExtension\\Hooks",
"services": [
"MainConfig",
"UserOptionsLookup"
]
}
}
}
| |
Interface: | GetPreferencesHook.php |
Kullanım
Parametreler
Parametre/Seçenek | Açıklama |
---|---|
$user | Tercihleri değiştirilen kullanıcı |
&$preferences | Bir HTMLForm nesnesine beslenecek tercihler açıklama dizisi |
Sekmeler ve bölümler
section
dizi anahtarı, tercihlerinizi Preferences sayfasının hangi sekme ve bölümünün içerdiğini belirtir.
section
değeriniz foo/bar ise, bu, tercihinizin bar bölümündeki (prefs-bar
sistem mesajı ile adlandırılmış) foo sekmesinde (prefs-foo
sistem mesajı ile adlandırılmış) görüneceği anlamına gelir.
Böyle bir sekme veya bölüm yoksa, otomatik olarak oluşturulur.
Varsayılan sekmeler listesi
Tanımlayıcı | Şunu görüntüler |
---|---|
personal | Kullanıcı bilgileri |
rendering | Görünüm |
editing | Sayfa yazma alanı |
rc | Son değişiklikler |
watchlist | İzleme listesi |
misc | Diğer ayarlar |
Desteklenen türler
Görünür türler
type, info
, multiselect
, radio
vb. dahil olmak üzere includes/htmlform/HTMLForm.php dosyasındaki HTMLForm::$typeMappings
dizisinde bulunan çeşitli değerleri alabilir.
Tercihlerin çoğu HTMLFormField tarafından kullanılan formatta saklanır, ancak 'type' => 'usersmultiselect'
olması durumunda, yeni satırla ayrılmış kullanıcı adları listesinden (form widget'ının çalıştığı şey budur) ve yeni satırla ayrılmış kullanıcı kimliklerinin listesi (veritabanında depolanan budur) bir kullanıcı adları listesinden bir dönüşüm gerçekleştirilmelidir.
Bunun örnekleri için email-blacklist
(çekirdek olarak) veya echo-notifications-blacklist
(Echo olarak) tedavisine bakın.
Floats
For float
types, you can set min
and max
, which will be validated on save.
API tercihleri
API tercihleri 'api' türünü kullanır. Special:Preferences sayfasında görüntülenmezler. They are usually set via custom front-end interfaces that call the API.
'type' => 'hidden'
for API preferences (that type exists for HTML forms, not preferences).
Varsayılan tercihler
Bir tercihin varsayılan değerini (yani, henüz tercihlerini özelleştirmemiş yeni bir kullanıcı için ayarlanan değer) ayarlamak için, ayarı $wgDefaultUserOptions küresel değişkenine ekleyin. Kancada $preferences için kullandığınız anahtar adını kullanın.
Alternatif olarak, bir uzantı yazıyorsanız, extensions.json dosyasının DefaultUserOptions bölümüne ekleyebilirsiniz.
Örnek
See: Handling hooks in MediaWiki 1.35 and later
extension.json
In extension.json
:
"Hooks": {
"GetPreferences": "main"
},
"HookHandlers": {
"main": {
"class": "MediaWiki\\Extension\\ExampleExtension\\Hooks",
"services": [
"MainConfig",
"UserOptionsLookup"
]
}
},
"AutoloadClasses": {
"MediaWiki\\Extension\\ExampleExtension\\Hooks": "includes/Hooks.php",
},
"config": {
"PersonalSettingsEnabledPageId": {
"type": "boolean",
"value": false
},
"PersonalSettingsNumberOfMostViewedPages": {
"type": "int",
"value": 50
},
"PersonalSettingsPeriodForLastViewedPages": {
"type": "string",
"value": "year"
}
},
"manifest_version": 2
Hooks.json
In includes/Hooks.php
:
namespace MediaWiki\Extension\ExampleExtension;
use MediaWiki\Preferences\Hook\GetPreferencesHook;
use GlobalVarConfig;
use MediaWiki\MediaWikiServices;
use MediaWiki\User\UserOptionsLookup;
class Hooks implements GetPreferencesHook {
private GlobalVarConfig $config;
private UserOptionsLookup $userOptionsLookup;
public function __construct(
GlobalVarConfig $config,
UserOptionsLookup $userOptionsLookup
) {
$this->config = $config;
$this->userOptionsLookup = $userOptionsLookup;
}
public function onGetPreferences( $user, &$preferences ) {
$your_new_extensions_section = 'exampleextension';
// A checkbox
$preferences_key = 'hitcounters-pageid';
$preferences_default = $this->userOptionsLookup->getOption(
$user,
$preferences_key,
$this->config->get( 'PersonalSettingsEnabledPageId' ) );
$preferences[$preferences_key] = [
'type' => 'toggle',
'label-message' => 'hitcounters-pageid-label',
'default' => $preferences_default,
'section' => $your_new_extensions_section
];
// An int input box
$preferences_key = 'hitcounters-numberofmostviewedpages';
$preferences_default = $this->userOptionsLookup->getOption(
$user,
$preferences_key,
$this->config->get( 'PersonalSettingsNumberOfMostViewedPages' ) );
$preferences[$preferences_key] = [
'type' => 'int',
'help-message' => 'hitcounters-numberofmostviewedpages-help',
'label-message' => 'hitcounters-numberofmostviewedpages-label',
'maxLength' => 4,
'default' => $preferences_default,
'section' => $your_new_extensions_section
];
// A select box
$ctx = RequestContext::getMain();
$preferences_key = 'hitcounters-periodforlastviewedpages';
$key_base = 'hitcounters-statistics-mostpopular';
// Ensure that 'default' is always the 1st array item
$preferences_default = $period = $this->config->get( 'PersonalSettingsPeriodForLastViewedPages' );
$itemDisplayName = $ctx->msg( "$key_base-$period" )->text();
$itemArray = [ $itemDisplayName => $period ];
$period = 'week';
$itemDisplayName = $ctx->msg( "$key_base-$period" )->text();
$itemArray[$itemDisplayName] = $period;
$period = 'month';
$itemDisplayName = $ctx->msg( "$key_base-$period" )->text();
$itemArray[$itemDisplayName] = $period;
$period = 'year';
$itemDisplayName = $ctx->msg( "$key_base-$period" )->text();
$itemArray[$itemDisplayName] = $period;
$usersItem = $this->userOptionsLookup->getOption(
$user,
$preferences_key,
$preferences_default );
$preferences[$preferences_key] = [
'type' => 'select',
'options' => $itemArray,
'default' => $usersItem,
'label-message' => "$preferences_key-label",
'section' => $your_new_extensions_section
];
// A set of radio buttons. Notice that in the 'options' array,
// the keys are the text (not system messages), and the values are the HTML values.
// They keys/values might be the opposite of what you expect. PHP's array_flip()
// can be helpful here.
$preferences_key = 'exampleextension-exampleselect';
$key_base = 'exampleextension-select';
$itemKey1 = 'choice1';
$itemName1 = $ctx->msg( "$key_base-$itemKey1" )->text();
$itemKey2 = 'choice2';
$itemName2 = $ctx->msg( "$key_base-$itemKey2" )->text();
$itemKey3 = 'choice3';
$itemName3 = $ctx->msg( "$key_base-$itemKey3" )->text();
// A 'default' key is required, ...
$preferences_default = $itemKey1;
// ..., but respect user's choice!
$usersItem = $this->userOptionsLookup->getOption(
$user,
$preferences_key,
$preferences_default );
$preferences[$preferences_key] = [
'type' => 'radio',
'help-message' => 'exampleextension-exampleselect-help', // a system message (optional)
'label-message' => 'exampleextension-exampleselect-label', // a system message
// Array of options. Key = text to display. Value = HTML <option> value.
'options' => [
$itemName1 => $itemKey1,
$itemName2 => $itemKey2,
$itemName3 => $itemKey3
],
'default' => $usersItem, // A 'default' key is required!
'section' => $your_new_extensions_section
];
}
<!-- [...] -->
}
i18n
In i18n/en.json
:
{
"exampleextension-select-help": "Put a help message here!",
"exampleextension-select-label": "Select an item:",
"exampleextension-select-choice1": "Pick me please",
"exampleextension-select-choice2": "No, pick me!",
"exampleextension-select-choice3": "Seriously, pick me right now",
"hitcounters-pageid-label": "Show page ID",
"hitcounters-numberofmostviewedpages-label": "Number of most viewed pages",
"hitcounters-periodforlastviewedpages-label": "Period for last viewed pages:",
"hitcounters-statistics-mostpopular-week": "Most viewed pages in the current week",
"hitcounters-statistics-mostpopular-month": "Most viewed pages in the current month",
"hitcounters-statistics-mostpopular-year": "Most viewed pages in the current year",
}
Example Old School
extension.json
In extension.json
:
"Hooks": {
"GetPreferences": "ExampleExtensionHooks::onGetPreferences",
},
"AutoloadClasses": {
"ExampleExtensionHooks": "includes/Hooks.php",
},
"config": {
"PersonalSettingsEnabledPageId": false,
"PersonalSettingsNumberOfMostViewedPages": 50,
"PersonalSettingsPeriodForLastViewedPages": "year"
},
"manifest_version": 1
Hooks.json
In includes/Hooks.php
:
class ExampleExtensionHooks extends Hooks {
public static function onGetPreferences( $user, &$preferences ) {
global $wgPersonalSettingsEnabledPageId, $PersonalSettingsNumberOfMostViewedPages, $PersonalSettingsPeriodForLastViewedPages;
$your_new_extensions_section = 'exampleextension';
// A checkbox
$preferences_key = 'hitcounters-pageid';
$preferences_default = $this->userOptionsLookup->getOption(
$user,
$preferences_key,
$wgPersonalSettingsEnabledPageId );
$preferences[$preferences_key] = [
'type' => 'toggle',
'label-message' => 'hitcounters-pageid-label',
'default' => $preferences_default,
'section' => $your_new_extensions_section
];
// An int input box
$preferences_key = 'hitcounters-numberofmostviewedpages';
$preferences_default = $this->userOptionsLookup->getOption(
$user,
$preferences_key,
$PersonalSettingsNumberOfMostViewedPages );
$preferences[$preferences_key] = [
'type' => 'int',
'help-message' => 'hitcounters-numberofmostviewedpages-help',
'label-message' => 'hitcounters-numberofmostviewedpages-label',
'maxLength' => 4,
'default' => $preferences_default,
'section' => $your_new_extensions_section
];
// A select box
$ctx = RequestContext::getMain();
$preferences_key = 'hitcounters-periodforlastviewedpages';
$key_base = 'hitcounters-statistics-mostpopular';
// Ensure that 'default' is always the 1st array item
$preferences_default = $period = $PersonalSettingsPeriodForLastViewedPages;
$itemDisplayName = $ctx->msg( "$key_base-$period" )->text();
$itemArray = [ $itemDisplayName => $period ];
$period = 'week';
$itemDisplayName = $ctx->msg( "$key_base-$period" )->text();
$itemArray[$itemDisplayName] = $period;
$period = 'month';
$itemDisplayName = $ctx->msg( "$key_base-$period" )->text();
$itemArray[$itemDisplayName] = $period;
$period = 'year';
$itemDisplayName = $ctx->msg( "$key_base-$period" )->text();
$itemArray[$itemDisplayName] = $period;
$usersItem = $this->userOptionsLookup->getOption(
$user,
$preferences_key,
$preferences_default );
$preferences[$preferences_key] = [
'type' => 'select',
'options' => $itemArray,
'default' => $usersItem,
'label-message' => "$preferences_key-label",
'section' => $your_new_extensions_section
];
// A set of radio buttons. Notice that in the 'options' array,
// the keys are the text (not system messages), and the values are the HTML values.
// They keys/values might be the opposite of what you expect. PHP's array_flip()
// can be helpful here.
$preferences_key = 'exampleextension-exampleselect';
$key_base = 'exampleextension-select';
$itemKey1 = 'choice1';
$itemName1 = $ctx->msg( "$key_base-$itemKey1" )->text();
$itemKey2 = 'choice2';
$itemName2 = $ctx->msg( "$key_base-$itemKey2" )->text();
$itemKey3 = 'choice3';
$itemName3 = $ctx->msg( "$key_base-$itemKey3" )->text();
// A 'default' key is required, ...
$preferences_default = $itemKey1;
// ..., but respect user's choice!
$usersItem = $this->userOptionsLookup->getOption(
$user,
$preferences_key,
$preferences_default );
$preferences[$preferences_key] = [
'type' => 'radio',
'help-message' => 'exampleextension-exampleselect-help', // a system message (optional)
'label-message' => 'exampleextension-exampleselect-label', // a system message
// Array of options. Key = text to display. Value = HTML <option> value.
'options' => [
$itemName1 => $itemKey1,
$itemName2 => $itemKey2,
$itemName3 => $itemKey3
],
'default' => $usersItem, // A 'default' key is required!
'section' => $your_new_extensions_section
];
}
<!-- [...] -->
}
i18n
In i18n/en.json
:
{
"exampleextension-select-help": "Put a help message here!",
"exampleextension-select-label": "Select an item:",
"exampleextension-select-choice1": "Pick me please",
"exampleextension-select-choice2": "No, pick me!",
"exampleextension-select-choice3": "Seriously, pick me right now",
"hitcounters-pageid-label": "Show page ID",
"hitcounters-numberofmostviewedpages-label": "Number of most viewed pages",
"hitcounters-periodforlastviewedpages-label": "Period for last viewed pages:",
"hitcounters-statistics-mostpopular-week": "Most viewed pages in the current week",
"hitcounters-statistics-mostpopular-month": "Most viewed pages in the current month",
"hitcounters-statistics-mostpopular-year": "Most viewed pages in the current year",
}