Manuel:Utiliser des espaces de noms personnalisés

From MediaWiki.org
Jump to navigation Jump to search
This page is a translated version of the page Manual:Using custom namespaces and the translation is 99% complete.

Outdated translations are marked like this.
Other languages:
Deutsch • ‎English • ‎Tiếng Việt • ‎español • ‎français • ‎galego • ‎polski • ‎português do Brasil • ‎русский • ‎中文 • ‎日本語 • ‎한국어

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 vos contenus et permettre une organisation de ceux-ci plus logique.

Les espaces de noms personnalisés sont faciles à administrer en utilisant la directive de configuration $wgExtraNamespace . Il est aussi possible de définir des noms d'alias pour les espaces de noms personnalisés (et prédéfinis), en utilisant la directive de configuration $wgNamespaceAliases .

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 par exemple la création d'un espace de noms personnalisé, ajouter les lignes suivantes au fichier LocalSettings.php définira un espace de noms "Foo" 3000 et son espace de noms de discussion associé "Foo_talk".

// 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é.
Afin de suivre la convention, les espaces de noms numérotés de 100 à 199 sont réservés pour des utilisations spécifiques au wiki, bien qu'il existe des extensions qui 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 les espaces de noms par défaut des extensions afin de rendre possible l'installation de ces extensions dans le futur. En conséquence, les indices supérieurs à 3000 sont un bon choix pour les administrateurs systèmes qui souhaitent définir leurs espaces de noms personnalisés.
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] = array( '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; par exemple il ne peut pas être manipulé après l'initialisation, à un point d'ancrage 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 LocalSettings.php (en remplaçant news par le nom en minuscules du protocole que vous voulez enlever):
$wgUrlProtocols = array_diff( $wgUrlProtocols, array( 'news:' ) );

Dans les extensions

Les extensions ajoutent souvent leurs propres espaces de noms, comme l'espace de noms "Topic" des extensions de Flow . Une extension peut délibérément ajouter à $wgExtraNamespaces comme décrit ci-dessus, ou si l'enregistrement de son espace de noms est conditionnel (par exemple EventLogging définit seulement l'espace de noms de son "schéma" sur le wiki où il enregistre ses schémas), alors elle peut ajouter une fonction gestionnaire (handler) pour le point d'ancrage des CanonicalNamespaces qui décidera de ce qu'il faut faire.

Le temps d'enregistrement d'une extension est subtile. Les fonctions que les extensions enregistrent avec $wgExtensionFunctions sont exécutées trop tard pour enregistrer les espaces de noms supplémentaires (bug T47031). Ainsi les extensions devraient relier le point d'ancrage de CanonicalNamespaces aux besoins du fichier (dans MyExtension.php) et vérifier si le wiki doit activer les espaces de noms supplémentaires ou pas. Les extensions peuvent configurer inconditionnellement les droits d'accès sur les espaces de noms et les gestionnaires de contenu en fonction des besoins du fichier parce qu'elles ne nécessitent pas que l'espace de noms soit actuellement créé.

Version de MediaWiki : 1.25
Gerrit change 166705

Le nouveau système d'enregistrement extension.json possède une clé de namespaces afin qu'une extension puisse lister ses espaces de noms qui devraient toujours exister. De l'extension Gadgets  :

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

Il supporte aussi le point d'ancrage CanonicalNamespaces.

Les espaces de noms des contenus

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 à 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 de $wgContentNamespaces, il est bon d'exécuter soit le script maintenance/updateArticleCount.php ou bien le script maintenance/initSiteStats.php afin de mettre à jour le cache des statistiques internes (voir Manual:Maintenance scripts/fr ).

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é

Traiement 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 troois 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.

Voir aussi