Manual:Using custom namespaces/es
Además de disponer de los espacios de nombres incorporados de serie, es posible añadir espacios de nombres personalizados a una instalación de MediaWiki, para así poder clasificar el contenido de forma más detallada y permitir una organización más lógica.
Los espacios de nombres personalizados son fáciles de administrar utilizando la directiva de configuración $wgExtraNamespaces
.
También es posible definir nombres de alias para los espacios de nombres, tanto los personalizados como los ofrecidos por defecto, usando la directiva de configuración $wgNamespaceAliases
.
Algunas extensiones facilitan crear espacios de nombres personalizados.
Algunos ejemplos son NamespaceManager y BlueSpiceNamespaceManager .
Cómo crear un espacio de nombres personalizado
Puedes registrar espacios de nombres adicionales añadiéndolos a la variable global $wgExtraNamespaces
en tu archivo "LocalSettings.php" .
Todos los espacios de nombres deben contar con un índice numérico único en esta matriz.
A modo de ejemplo de creación rápida de un espacio de nombres personalizado, al añadir las siguientes líneas a tu archivo "LocalSettings.php" se define un espacio de nombres «Foo» con el índice 3000, así como su espacio de nombres asociado «Foo_talk»:
Ten en cuenta que es obligatorio disponer de un espacio de nombres de discusión asociado con tu espacio de nombres personalizado.
// Definir constantes para mis espacios de nombres adicionales.
define("NS_FOO", 3000); // Este número DEBE ser par.
define("NS_FOO_TALK", 3001); // Éste DEBE ser el siguiente entero impar.
// Añadir los espacios de nombres.
$wgExtraNamespaces[NS_FOO] = "Foo";
$wgExtraNamespaces[NS_FOO_TALK] = "Foo_talk"; // Fíjate en los signos de guión bajo en el nombre del espacio de nombres.
- Elige un número que no esté en uso
- Como convención, los espacios de nombres comprendidos entre 100 y 199 están reservados para espacios de nombres específicos del sitio, si bien existen algunas extensiones que no siguen esta convención. Los desarrolladores de extensiones usan números más altos, hasta el 32767. Al elegir un índice, debes evitar cualquier número que ya se esté usando en los Espacios de nombres predefinidos de extensiones , puesto que en el futuro podrías querer instalar alguna extensión. Los números del 3000 al 4999 están reservados para que los administradores del sistema definan sus espacios de nombres personalizados. (Además, querrás evitar cualquier nombre de espacio de nombres que ya esté en los espacios de nombres por defecto de las extensiones.)
- Primero par, después impar
- Fíjate en que el índice en la matriz del espacio de nombres es 3000 en el ejemplo anterior.
- un índice de espacio de nombres par denota un espacio de nombres temático.
- el índice impar inmediatamente a continuación de ese número denota el espacio de nombres de discusión (talk) que tiene asociado.
- Crea también el espacio de nombres de discusión
- Lo habitual es crear un espacio de nombres de «discusión» junto con cada espacio de nombres personalizado que se defina. Con este ejemplo, si trasladas una página al espacio de nombres «Foo», se te solicitará que traslades también su página de discusión, si la tiene, y en caso de hacerlo, MediaWiki colocará la página de discusión en «Foo talk».
- Evita los espacios
- Usa guiones bajos en lugar de espacios al registrar espacios de nombres. En este contexto, «Mi espacio» no es válido; debes usar «Mi_espacio».
- Evita los guiones
La parte en mayúsculas no permite guiones, pero pueden añadirse al título del prefijo. Ejemplo:
$wgExtraNamespaces[NS_FOOFOO] = "Foo-Foo";
- Nombra los números que elijas
- El ejemplo define constantes para los IDs del espacio de nombres de forma que luego puedas hacer referencia fácilmente a estos espacios de nombres en la configuración, por ejemplo en
$wgNamespaceProtection
,$wgNamespacesWithSubpages
o$wgExtraGenderNamespaces
.
Podrías seguir y configurar algunos ajustes más para tu nuevo espacio de nombres.
$wgNamespaceProtection[NS_FOO] = [ 'editfoo' ]; // el permiso «editfoo» es necesario para editar el espacio de nombres foo
$wgNamespacesWithSubpages[NS_FOO] = true; // subpáginas activadas para el espacio de nombres foo
$wgGroupPermissions['sysop']['editfoo'] = true; // concedido el permiso «editfoo» a los usuarios del grupo «sysop»
- Hazlo pronto
- La manipulación de
$wgExtraNamespaces
debe completarse durante la inicialización de MediaWiki, es decir, en caso de que una extensión, etc., deba funcionar con el espacio de nombres personalizado recién creado, asegúrate de definirlos y nombrarlos antes de invocar la extensión respectiva. Por ejemplo, no se puede manipular en un gancho posterior a la inicialización como$wgExtensionFunctions
.
- Ojo con posibles colisiones con protocolos URL
- El código de enlazado de MediaWiki conoce una serie de protocolos URL, definidos en la variable $wgUrlProtocols . Si el nombre de tu espacio de nombres es idéntico al de uno de estos protocolos, tendrás problemas para crear [[enlaces]] a páginas que se encuentren en tu espacio de nombres personalizado. Esto suele suceder principalmente cuando se intenta crear un espacio de nombres llamado «News», dado que
news:
es un protocolo URL para los grupos de noticias NNTP. - Para evitar este problema, puedes desregistrar el protocolo URL que te estorbe añadiendo el siguiente código a «LocalSettings.php» (sustituyendo
news
por el nombre todo en minúsculas del protocolo que quieras eliminar):
$wgUrlProtocols = array_diff( $wgUrlProtocols, array( 'news:' ) );
En extensiones
Versión de MediaWiki: | ≥ 1.25 Gerrit change 166705 |
Las extensiones a menudo añaden sus propios espacios de nombres, por ejemplo, el espacio de nombres «Topic» en el caso de la extensión Flow .
El sistema de registro extension.json dispone de una clave namespaces
para que una extensión pueda enumerar sus espacios de nombres.
En la extensión Gadgets :
"namespaces": [
{
"id": 2300,
"constant": "NS_GADGET",
"name": "Gadget",
"protection": "gadgets-edit"
},
{
"id": 2301,
"constant": "NS_GADGET_TALK",
"name": "Gadget_talk"
},
]
También puedes definir aquí otros parámetros relacionados con los espacios de nombres, por ejemplo, si se trata de un espacio de nombres de contenido o no; consulta Manual:Extension.json/Schema#namespaces para ver las propiedades disponibles.
Si el registro de espacios de nombres es condicional (por ejemplo, EventLogging solo define su espacio de nombres «Schema» en el wiki donde almacena esquemas), la extensión debería añadir "conditional": true
a la definición del espacio de nombres en extension.json
, y también registrar un controlador allí para el gancho CanonicalNamespaces que decida si registrar o no el espacio de nombres.
El controlador del gancho solo debería cambiar los $namespaces
con los que se le llama; todos los demás parámetros del espacio de nombres deberían seguir registrándose en extension.json
.
En caso de que estos parámetros también deban ser dinámicos, no cambies $wgContentNamespaces
, $wgNamespaceContentModels
, etc. en el controlador del gancho CanonicalNamespaces (no tendrá efecto – T288819); en lugar de eso, tendrás que establecerlos antes, por ejemplo, en una retrollamada (pero no en $wgExtensionFunctions
).
Ten en cuenta que añadir una extensión a LocalSettings.php no hace que las constantes de los espacios de nombres relevantes estén necesariamente disponibles como globales para otras extensiones.
Espacios de nombres de contenido
Al construir la página de estadísticas del sitio (véase Special:Statistics), MediaWiki usa los valores almacenados en la base de datos para calcular determinadas cifras totales. Un número interesante de este tipo es el «número de artículos» o «número de páginas de contenido».
Para que una página sea considerada como un artículo o contenido propio, debe:
- * encontrarse en el espacio de nombres principal, o en un espacio de nombres declarado como de contenido
- * no ser una página de redirección
- * contener al menos un enlace interno, tal como está definido por
$wgArticleCountMethod
.
Al crear espacios de nombres personalizados para albergar contenido adicional, es una buena idea indicarlo en la configuración. Esto se hace mediante la directiva de configuración $wgContentNamespaces .
Siguiendo con el ejemplo anterior, podríamos añadir lo siguiente al archivo "LocalSettings.php":
$wgContentNamespaces[] = 3000;
- o
$wgContentNamespaces[] = NS_FOO;
Desde ese momento, y suponiendo que cumplan con el resto de criterios para ser reconocidas como tales, MediaWiki considerará que las páginas del espacio de nombres «Foo» son artículos, y por lo tanto las contabilizará al actualizar los contadores de estadísticas del sitio.
Ejecutar scripts de mantenimiento
- Al modificar el valor del parámetro de configuración
$wgContentNamespaces
, es una buena idea ejecutar el script "path/to/maintenance/updateArticleCount.php o bien "path/to/maintenance/initSiteStats.php" para actualizar el caché interno de estadísticas (véase Manual:Scripts de mantenimiento ).
Por qué usar espacios de nombres personalizados
Existen varias razones por las que podría interesarte usarlos:
- * Se puede usar un espacio de nombres personalizado para albergar contenido que no debería mostrarse en la página de resultados de una búsqueda, por ejemplo, páginas que solo se usan para transclusiones.
- * Ciertos espacios de nombres requieren privilegios adicionales para editarlos.
- * Te interesa que cierto espacio de nombres no esté sujeto a determinada limitación o ajuste por defecto de la configuración ($wgNoFollowNsExceptions , por ejemplo).
- * Poder usar un prefijo uniforme para determinados contenidos, que sólo puedan buscarse dentro de ese espacio de nombres.
- * Si eres desarrollador de MW, a veces necesitas tener un espacio de nombres personalizado para tus extensiones.
Qué hacer con las páginas existentes
Al almacenar registros de páginas, MediaWiki utiliza el índice numérico de un espacio de nombres junto con el resto del texto que forma el título. Por lo tanto, si se crea una página en un espacio de nombres que no existe (por ejemplo, «Bar:Una página»), se asumirá que está en el espacio de nombres principal.
Esto puede causar problemas si posteriormente se define un espacio de nombres personalizado con el nombre «Bar», dado que MediaWiki buscará una página indizada mediante el espacio de nombres correcto, pero no podrá encontrarla, con lo cual el contenido se volverá inaccesible.
You can use the NamespaceDupes maintenance script to correct this problem. It will find pages in the main namespace with a prefix matching any of the defined namespaces, and update their records.
If you are not able to run maintenance scripts, then the following approach might be suitable:
- # Anula (convierte en comentario) la definición del espacio de nombres en el archivo de configuración.
- # Accede a cada una de las páginas afectadas y trasládala a otro lugar fuera del pseudo espacio de nombres; por ejemplo, traslada «Bar:Una página» a «Bar2:Una página».
- # Restaura (descomenta) la definición del espacio de nombres.
- # Traslada las páginas afectadas al nuevo espacio de nombres.
Eliminar espacios de nombres personalizados
El problema que abordamos antes también se da cuando se elimina la definición de un espacio de nombres personalizado: MediaWiki ya no puede saber el índice numérico que se corresponde con el espacio de nombres, así que intenta buscar las páginas en el espacio de nombres principal, lo que da lugar a contenido inaccesible. Esto se da más raramente, dado que la mayoría de sitios no necesitarán eliminar espacios de nombres, pero no deja de ser un problema.
Versión de MediaWiki: | ≥ 1.43 Gerrit change 1052196 |
You can use the CleanupTitles maintenance script to correct this problem. It will find pages any namespace that is no longer defined, and update their records. The pages will be moved to the main namespace with an added prefix like NS123:, unless specified otherwise by parameters to the script.
As above, you can also temporarily restore the namespace configuration and move the pages from the user interface (or delete them).
Renombrar espacios de nombres personalizados
Supón que necesitas renombrar el espacio de nombres personalizado de «Foo» a «New» sin realizar un traslado masivo de páginas.
La forma más fácil de conseguir esto es preservar el ID del espacio de nombre (aquí, «3000
»), así como la constante de espacio de nombres (aquí, «NS_FOO
»), y modificar el título (visible) del espacio de nombres y añadir el antiguo como un alias.
cambia
define("NS_FOO", 3000);
$wgExtraNamespaces[NS_FOO] = "Foo";
a
define("NS_FOO", 3000);
$wgExtraNamespaces[NS_FOO] = "New";
$wgNamespaceAliases['Foo'] = NS_FOO;
Note that some extensions store namespace names in plain text instead of their internal IDs, and should therefore be dealt with extra care. Examples include:
- The Translate extension creates pages with the source page's name (containing the namespace prefix) under the Translations namespace, e.g. Translations:Manual:Using custom namespaces/117/es for the Spanish translation of the 117th message on this page. When you change the namespace's name, translatable pages should be handled as if they were moved .
Evitar conflictos entre espacios de nombres
Para que puedas evitar conflictos entre espacios de nombres (por ejemplo, usar un espacio de nombres con el mismo número que el de un espacio de nombres definido por una extensión), la lista de espacios de nombres de extensiones muestra los números que debes evitar para prevenir cualquier conflicto.
Definir en $wgNamespacesToBeSearchedDefault , $wgNamespacesWithSubpages , $wgContentNamespaces o $wgNamespaceAliases un identificador que no esté asociado con ningún espacio de nombres declarado en $wgExtraNamespaces no corrompe el wiki; MediaWiki ignora discretamente estas configuraciones.
Dar estilo a los espacios de nombres
Por ejemplo, para aplicar un color de fondo a las páginas de un espacio de nombres concreto (y a su espacio de nombres de discusión correspondiente), puedes añadir el siguiente código a tu common.css:
.ns-3000 #content, .ns-3001 #content { background-color: #f3f3ff; }
.ns-3000 div.thumb, .ns-3001 div.thumb { border-color: #f3f3ff; }
donde 3000
es el índice del espacio de nombres y #f3f3ff
es el color que quieres usar como color de fondo.
Puede que también desees cambiar el nombre predeterminado de la pestaña (el nombre del espacio de nombres). Esto se encuentra en tus mensajes de sistema en MediaWiki:nstab-espacio-de-nombres-.
Véase también
- Manual:Espacio de nombres
- Namespace manager - tal como se propuso originalmente para MW1.6-wikidata y sus sucesores. Actualmente utilizado por el proyecto OmegaWiki.
Administración del sitio
Extensiones
- Categoría:Extensiones de espacios de nombres
- Extension:NamespaceManager – para la gestión de espacios de nombres
- Extension:BlueSpiceNamespaceManager – permite crear espacios de nombres personalizados
- Extension:SpecialNamespaces – una versión modificada de Extensión:Interwiki que la modifica para que proporcione un administrador de espacios de nombres como una página especial.
- Extension:Lockdown – para controlar el acceso a los espacios de nombres
Para desarrolladores de extensiones
- Extension namespace registration - Lista de espacios de nombres personalizados registrados por extensiones. En caso de definir una constante para un espacio de nombres personalizado, añádela también aquí.