Manuel:Accroches/GetPreferences
GetPreferences | |
---|---|
Disponible depuis version 1.16.0 Modification des préférences utilisateur. | |
Fonction à définir : | public static function onGetPreferences( User $user, array &$preferences ) { ... }
|
Attacher l'accroche : | Dans extension.json :
{
"Hooks": {
"GetPreferences": "MediaWiki\\Extension\\MyExtension\\Hooks::onGetPreferences"
}
}
|
Appelé de : | Fichier(s) : preferences/DefaultPreferencesFactory.php |
Interface : | GetPreferencesHook.php |
Pour plus d'information sur l'ajout des accroches (hooks), voir Accroches .
Pour des exemples d'extensions utilisant cette accroche, voir Category:GetPreferences extensions/fr .
Utilisation
Paramètres
Paramètre/Option | Description |
---|---|
$user | Utilisateur dont les préférences vont être modifiées. |
&$preferences | Tableau de description des préférences, à transmettre à un objet HTMLForm |
Exemple
In extension.json
:
"Hooks": {
"GetPreferences": [ "MediaWiki\\Extension\\ExampleExtension\\Hooks::onGetPreferences" ]
}
In includes/Hooks.php
:
namespace MediaWiki\Extension\ExampleExtension;
class Hooks {
/**
* @param User $user
* @param array $preferences
*/
public static function onGetPreferences( $user, &$preferences ) {
// A checkbox
$preferences['mypref'] = [
'type' => 'toggle',
'label-message' => 'tog-mypref', // a system message
'section' => 'personal/info',
];
// 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['mypref2'] = [
'type' => 'radio',
'label-message' => 'tog-mypref2', // a system message
'section' => 'personal/info',
// Array of options. Key = text to display. Value = HTML <option> value.
'options' => [
'Pick me please' => 'choice1',
'No, pick me!' => 'choice2',
'Seriously, pick me right now' => 'choice3',
],
'default' => 'choice1', // A 'default' key is required!
'help-message' => 'tog-help-mypref2', // a system message (optional)
];
}
}
Onglets et sections
The section
array key specifies which tab and section of Preferences contains your preferences.
If your section
value is foo/bar, this means your preference will appear on the foo tab (named by system message prefs-foo
) within the bar section (named by system message prefs-bar
).
Si l'onglet ou la section correspondante n'existent pas, ils sont créés automatiquement.
Liste des onglets par défaut
Indicatif | Présenter comme |
---|---|
personal | Informations personnelles |
rendering | Apparence |
editing | Modification |
rc | Modifications récentes |
watchlist | Liste de suivi |
misc | Préférences diverses |
Types supportés
Types apparents
Le type peut prendre diverses valeurs trouvées dans le tableau HTMLForm::$typeMappings
du fichier includes/htmlform/HTMLForm.php, incluant info
, multiselect
, radio
, etc.
Most preferences are stored in the same format as is used by the HTMLFormField, but in the case of 'type' => 'usersmultiselect'
a transformation should be carried out from a newline-separated list of usernames (which is what the form widget works with) and a newline-separated list of user IDs (which is what gets stored in the database).
See the treatment of email-blacklist
(in core) or echo-notifications-blacklist
(in Echo ) for examples of this.
Floats
For float
types, you can set min
and max
, which will be validated on save.
Préférences d'API
Les préférences API utilisent le type api
. Elles ne sont pas affichées dans Special:Preferences.
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).
Préférences par défaut
To set the default value for a preference (i.e. the value that is set for a new user that hasn't customized their preferences yet), add the setting to the $wgDefaultUserOptions global variable. Use the same key name as you use for $preferences in the hook.
Par ailleurs, si vous écrivez une extension, vous pouvez ajouter à la section DefaultUserOptions du fichier extensions.json.