Jump to content

Manuel:Utiliser des espaces de noms personnalisés

From mediawiki.org
This page is a translated version of the page Manual:Using custom namespaces and the translation is 100% complete.

En plus des espaces de noms prédéfinis, il est possible d'ajouter des espaces de noms personnalisés à une installation de MediaWiki, permettant ainsi de séparer les contenus et de les organiser plus logiquement.

Les espaces de noms personnalisés sont faciles à administrer en utilisant la directive de configuration $wgExtraNamespaces . Il est aussi possible de définir des noms d'alias pour les espaces de noms personnalisés (et également pour ceux prédéfinis), en utilisant la directive de configuration $wgNamespaceAliases . Certaines extensions vous permettent de créer facilement des espaces de noms personnalisés. Ce sont par exemple NamespaceManager et BlueSpiceNamespaceManager .

Il est recommandé de s'assurer qu'il n'y a aucune tâche en suspens dans la file d'attente des tâches avant de manipuler les espaces de noms afin d'éviter les échecs de celles-ci quand elles ciblent des pages appartenant aux espaces de noms que vous allez renommer ou supprimer. Utilisez runJobs.php pour lancer toutes les tâches en attente et ainsi vider la file d'attente avant de modifier la configuration des espaces de noms.

Création d'un espace de noms personnalisé

Vous pouvez enregistrer des espaces de noms supplémentaires en les ajoutant à la variable globale $wgExtraNamespaces de votre fichier "LocalSettings.php" . Tous les espaces de noms nécessitent un index numérique unique dans ce tableau. En prenant pour exemple la création d'un simple espace de noms personnalisé, ajouter les lignes suivantes au fichier "LocalSettings.php" définira un espace de noms "Foo" 3000 avec son espace de noms de discussion associé "Foo_talk". Notez qu'avoir un espace de noms de discussion associé à votre espace de noms personnalisé est actuellement une forte nécessité.

// Définir les constantes liées à mes espaces de noms supplémentaires.
define("NS_FOO", 3000); // Ce nombre DOIT être pair.
define("NS_FOO_TALK", 3001); // Celui-ci DOIT être l'entier impair situé juste après.

// Ajouter des espaces de noms.
$wgExtraNamespaces[NS_FOO] = "Foo";
$wgExtraNamespaces[NS_FOO_TALK] = "Foo_talk"; // Noter les tirets bas (underscore) dans l'espace de noms.
Choisir un nombre non encore utilisé.
Par convention, les espaces de noms numérotés de 100 à 199 sont réservés pour des utilisations spécifiques au wiki, bien que certaines extensions ne respectent pas cette règle. Les développeurs d'extensions utilisent des indices plus grands, jusqu'à 32767. Lorsque vous choisissez votre indice, évitez les nombres déjà présents dans Espaces de noms par défaut des extensions afin de rendre possible l'installation de ces extensions dans le futur. Les numéros de 3000 à 4999 sont réservés aux administrateurs système pour définir leurs espaces de noms personnalisés. (Aussi, vous devrez éviter les espaces de noms tels que name qui figure déjà dans les espaces de noms par défaut des extensions ).
Pair, puis impair.
Notez que l'indice du tableau des espaces de noms est à 3000 dans l'exemple ci-dessus.
Créer aussi l'espace de noms de discussion.
Vous créez automatiquement un espace de noms de "discussion" (talk) en parallèle avec chaque espace de noms d'utilisateur. Avec cet exemple, si vous renommez une page dans l'espace de noms "Foo" , il vous sera demandé de renommer également sa page de discussion associée, s'il existe une, et si vous acceptez de le faire, MediaWiki va placer la page de discussion dans "Foo talk".
Pas de caractère espace
Utilisez des soulignés ('_') à la place des espaces quand vous enregistrez des noms d'espace de noms. "My Namespace" n'est pas valide ici; remplacez-le par "My_Namespace" .
Pas de tirets

La partie en majuscules n'autorise pas les tirets mais ils peuvent encore être ajoutés sans problème dans le libellé du préfixe. Exemple:

$wgExtraNamespaces[NS_FOOFOO] = "Foo-Foo";
Nommez les numéros que vous choisissez
L'exemple définit des constantes pour les IDs des espaces de noms, pour pouvoir vous référer plus tard à ces espaces de noms, dans la configuration, par exemple dans $wgNamespaceProtection , dans $wgNamespacesWithSubpages , ou dans $wgExtraGenderNamespaces .

Vous pourriez continuer en configurant des paramètres supplémentaires pour votre nouvel espace de noms.

$wgNamespaceProtection[NS_FOO] = [ 'editfoo' ]; // la permission "editfoo" est nécessaire pour modifier l'espace de noms foo
$wgNamespacesWithSubpages[NS_FOO] = true;            // sous-pages activées pour l'espace de noms foo
$wgGroupPermissions['sysop']['editfoo'] = true;      // la permission "editfoo" est attribuée aux utilisateurs du groupe "sysop"
Faites le plus tôt
La manipulation de $wgExtraNamespaces doit être terminée durant l'initialisation de MediaWiki; c'est à dire que si une extension ou autre doit travailler avec l'espace de noms personnalisé nouvellement créé, assurez-vous que vous l'avez défini et nommé avant d'appeler l'extension en question. Par exemple il ne peut pas être manipulé dans une accroche après l'initialisation, comme $wgExtensionFunctions .
Vérifiez qu'il n'y a pas de collisions avec les protocoles des URL
Le code qui crée les liens de MediaWiki connait un certain nombre de protocoles d'URL définis dans la variable $wgUrlProtocols . Si le nom de votre espace de noms est le même que celui de l'un de ces protocoles, vous aurez des problèmes lors de la création des [[wikilinks]] vers les pages de votre espace de noms personnalisé. Ceci arrive fréquemment quand quelqu'un essaie de créer un espace de noms d'actualités ("News"), parce que news: est un protocole d'URL pour les groupes d'actualités (newsgroup) NNTP.
Pour éviter ce problème, vous pouvez supprimer le protocole d'URL concerné de la configuration en ajoutant le code suivant au fichier LocalSettings.php (en remplaçant news par le nom en minuscules du protocole que vous souhaitez enlever) :
$wgUrlProtocols = array_diff( $wgUrlProtocols, array( 'news:' ) );

Dans les extensions

Version de MediaWiki :
1.25
Gerrit change 166705

Les extensions ajoutent souvent leurs propres espaces de noms, comme l'espace de noms "Topic" des extensions de Flow . Le nouveau système d'enregistrement extension.json possède une clé namespaces afin qu'une extension puisse lister ses espaces de noms. De l'extension Gadgets  :

"namespaces": [
		{
			"id": 2300,
			"constant": "NS_GADGET",
			"name": "Gadget",
			"protection": "gadgets-edit"
		},
		{
			"id": 2301,
			"constant": "NS_GADGET_TALK",
			"name": "Gadget_talk"
		},
]

Vous pouvez également définir ici d'autres paramètres liés à l'espace de noms, comme s'il s'agissait d'un espace de noms de contenu ou pas; voir Manuel:Extension.json/Schéma pour les propriétés disponibles.

Si l'enregistrement de l'espace de noms est conditionnel (par exemple, EventLogging ne définit que son espace de noms « Schema » sur le wiki où il stocke les schémas), l'extension doit ajouter "conditional": true à la définition de l'espace de noms dans extension.json, et également enregistrer un gestionnaire pour l'accroche CanonicalNamespaces qui décide s'il faut enregistrer l'espace de noms ou pas. Le gestionnaire de l'accroche ne doit changer que le $namespaces avec lequel il est appelé; tous les autres paramètres de l'espace de noms doivent toujours être enregistrés dans extension.json. Si ces paramètres doivent aussi être dynamiques, ne modifiez pas $wgContentNamespaces , $wgNamespaceContentModels etc. dans le gestionnaire de l'accroche CanonicalNamespaces (il n'aura pas d'effet – T288819); à la place, vous devrez les définir plus tôt, comme dans une fonction de rappel (mais pas dans $wgExtensionFunctions ).

Notez que l'ajout d'une extension à LocalSettings.php ne valide pas forcément les constantes des espaces de noms disponibles en tant que variables globales pour les autres extensions.

Les espaces de noms de contenu

Lorsqu'il construit la page des statistiques du site (voir Special:Statistics), MediaWiki utilise les valeurs rangées dans la base de données pour calculer certains totaux. Un total particulier est le "nombre d'articles" ou la figure du "nombre de pages de contenu".

Pour qu'une page soit considérée comme un article, ou un contenu spécifique, elle doit :

Lorsque vous créez des espaces de noms personnalisés pour y ranger du contenu supplémentaire, une bonne idée est d'indiquer cela dans la configuration. Ceci est fait via la directive de configuration $wgContentNamespaces .

Pour étendre l'exemple ci-dessus, on pourrait ajouter ce qui suit au fichier "LocalSettings.php" :

$wgContentNamespaces[] = 3000;
ou bien
$wgContentNamespaces[] = NS_FOO;

MediaWiki va maintenant considérer les pages dans l'espace de noms "Foo" comme des articles, s'ils vérifient les critères restants, et va les inclure quand il mettra à jour les compteurs de statistiques du site.

Exécuter les scripts de maintenance

  • Quand vous ajustez la valeur du paramètre de configuration $wgContentNamespaces, il est bon d'exécuter soit le script "path/to/maintenance/updateArticleCount.php ou bien le script "path/to/maintenance/initSiteStats.php" afin de mettre à jour le cache des statistiques internes (voir Scripts de maintenance ).

Pourquoi vouloir un espace de noms personnalisé ?

Il y a plusieurs raisons à le vouloir :

  • Un espace de noms personnalisé peut être utilisé pour ranger le contenu qui ne doit pas apparaître parmi les résultats de la page de recherche, par exemple les pages qui ne sont utilisées que pour la transclusion.
  • Certains espaces de noms ont besoin de privilège(s) supplémentaires pour la modification.
  • Vous désirez que certains espaces de noms ne soient pas sujets à certaines limitations ou initialisations par défaut (par exemple $wgNoFollowNsExceptions )
  • Un préfixe uniforme pour le/les contenu(s) spécifique(s), sur lequel faire les recherches mais uniquement dans cet espace de noms
  • Si vous êtes un développeur MédiaWiki, vous avez besoin parfois d'un espace de noms pour votre/vos extension(s) , personnalisé

Traitement des pages existantes

Lors de la sauvegarde des enregistrements de pages, MediaWiki utilise un index numérique d'espace de noms, en même temps que le reste du texte du titre. Ainsi, quand une page est créée dans un espace de noms qui n'existe pas, par exemple "Bar:Some page", ce cas est traité comme étant dans l'espace de noms principal.

Ceci peut causer des problèmes si l'ajout de la définition d'un espace de noms personnalisé pour "Bar" se fait ultérieurement, lorsque MediaWiki cherchera une page indexée par le propre espace de noms, mais ne sera pas capable la trouver, rendant ainsi le contenu inaccessible.

Pour corriger ce problème, il existe trois approches principales.

Renommer les pages conflictuelles

Si le nombre de pages concernées est petit (par exemple si "Bar" contient cinq pages créées avant que l'espace de noms ait été défini dans la configuration du site), alors l'approche suivante pourrait être envisagée:

  1. Décommentez la définition de l'espace de noms dans le fichier de configuration
  2. Accèdez à chaque page concernée, et déplacez-la en dehors du pseudo espace de noms, par exemple déplacez "Bar:Some page" vers "Bar2:Some page"
  3. décommentez la définition de l'espace de noms
  4. remettre les pages concernées de nouveau dans l'espace de noms

Utiliser un script de maintenance

Dans le répertoire maintenance , il y a un script de maintenance qui réalise l'opération ci-dessus plus efficacement pour un grand nombre de pages; NamespaceDupes.php Il est simple à utiliser, mais comme avec tous les scripts de maintenance MediaWiki, consultez d'abord les informations d'usage disponibles (utiliser --help en tant qu'option).

Utiliser une requête en base de données

Pour déplacer toutes les pages "Bar:Some page" dans l'espace de noms 3000, faites la requête de base de données suivante:

UPDATE page SET
page_title = REPLACE(page_title, 'Bar:', ''),
page_namespace = 3000
WHERE page_title LIKE 'Bar:%' AND page_namespace=0

Pour gérer les pages de discussion :

UPDATE page SET
page_title = REPLACE(page_title, 'Bar_talk:', ''),
page_namespace = 3001
WHERE page_title LIKE 'Bar_talk:%' AND page_namespace=1

Après ces manipulations, exécutez le script refreshLinks.php et le script updateSearchIndex.php pour mettre à jour les liens internes et les résultats de recherche dans votre wiki. Remarquez que les moteurs de recherche externes tels que Google demandent un certain temps pour mettre à jour leur index.

Supprimer des espaces de noms personnalisés

Le problème évoqué ci-dessus apparait aussi quand la définition d'un espace de noms utilisateur est supprimée; MediaWiki n'est plus conscient de l'index numérique de l'espace de noms, et essaie de rechercher les pages désirées, dans l'espace de noms principal, ce qui conduit à du contenu inaccessible. Ceci apparait rarement, depuis que la plupart des sites n'ont pas besoin de supprimer d'espaces de noms, mais c'est un problème. (voir la discussion sur la liste de diffusion).

Exemple sur la manière d'enlever Flow et l'espace de noms Topic:

  • désinstaller Flow
  • ajouter temporairement $wgExtraNamespaces[2600] = 'Topic'; à la configuration
  • Utilisez deleteBatch.php pour supprimer toutes les pages de l'espace de noms Topic
  • Supprimer la configuration $wgExtraNamespaces

Renommer des espaces de noms personnalisés

Supposez que vous deviez renommer l'espace de noms utilisateur "Foo" en "New" sans réaliser un déplacement massif des pages. Pour faire cela, le moyen le plus simple consiste à conserver l'ID d'espace de noms (ici "3000") ainsi que la constante d'espace de noms (ici "NS_FOO"), à modifier le titre (visible) de l'espace de noms et à ajouter l'ancien en tant qu'alias.

changer

define("NS_FOO", 3000);
$wgExtraNamespaces[NS_FOO] = "Foo";

en

define("NS_FOO", 3000);
$wgExtraNamespaces[NS_FOO] = "New";
$wgNamespaceAliases['Foo'] = NS_FOO;

Eviter les conflits d'espaces de noms

Afin d'éviter les conflits d’espace de noms, par exemple, votre espace de noms porte le même numéro qu'un espace de noms défini par une extension, la liste des espaces de noms des extensions vous indique les numéros à éviter pour empêcher les conflits.

Déclarer $wgNamespacesToBeSearchedDefault , $wgNamespacesWithSubpages , $wgContentNamespaces ou $wgNamespaceAliases pour un ID qui n'est associé à aucun espace de noms présent dans $wgExtraNamespaces ne cassera pas le wiki; MediaWiki ignore discrètement ces configurations.

Mettre en forme les espaces de noms

Par exemple, pour appliquer une couleur de fond aux pages d'un espace de noms particulier (et à son espace de noms de discussion correspondant), vous pouvez ajouter le suivant code à votre common.css :

.ns-3000 #content, .ns-3001 #content { background-color: #f3f3ff; }
.ns-3000 div.thumb, .ns-3001 div.thumb { border-color: #f3f3ff; }

3000 est l'index de l'espace de noms et #f3f3ff est la couleur que vous voulez pour son fond.

Vous voudrez peut-être également changer le nom par défaut de l'onglet (nom de l'espace de noms). Cela se trouve dans vos messages système sur MediaWiki:nstab-espace de noms.

Voir aussi

Administration de site

Extensions

Pour les développeurs d'extensions

  • Extension namespace registration - Liste des espaces de noms personnalisés enregistrés par les extensions. Si vous définissez une constante pour un espace de noms personnalisé, listez-la ici aussi.