Manual:Cómo usar espacios de nombres personalizados

This page is a translated version of the page Manual:Using custom namespaces and the translation is 82% complete.
Outdated translations are marked like this.

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. Los ejemplos incluyen NamespaceManager y BlueSpiceNamespaceManager .

Es recomendable asegurar que no hay trabajos pendientes en la cola de trabajos antes de manipular los espacios de nombres, para evitar que esos trabajos fallen si apuntan a páginas en los espacios de nombres quieres borrar o renombrar. Usa runJobs.php para ejecutar todos los trabajos pendientes y limpiar la cola antes de manipular la configuración de espacios de nombres.

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 la creación rápida de un espacio de nombres personalizado, añadir las siguientes líneas a tu archivo "LocalSettings.php" define un espacio de nombres "Foo" con el índice 3000, así como su espacio de nombres "Foo_discusión" asociado: Note that having a talk namespace associated with your custom namespace is currently a hard requirement.

// 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é usado
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 por defecto de las extensiones, puesto que en el futuro podrías querer instalar alguna extensión. Números del 3000 al 4999 están reservados para que los administradores del sistema definan sus espacios de nombres personalizados. (También, 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 que el índice en la matriz del espacio de nombres es 3000 en el ejemplo de arriba.
Crea también el espacio de nombres para discusión
Lo habitual es crear un espacio de nombres de "discusión" por 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 discusión".
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".
No uses 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' ]; // se necesita el permiso "editfoo" 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úrese 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 cierto número 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

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 . Una extensión puede añadir información incondicionalmente a $wgExtraNamespaces tal como se describe arriba, o si su sistema de registro de espacios de nombres es condicional (por ejemplo, EventLogging sólo define su espacio de nombres "Schema" en el wiki donde almacena esquemas), entonces puede añadir una función de manejador al gancho CanonicalNamespaces que decida qué hacer.

La franja temporal para las extensiones que se registran es sutil. Las funciones que las extensiones registran con $wgExtensionFunctions se ejecutan demasiado tarde para registrar espacios de nombres adicionales (task T47031). Por lo tanto, las extensiones deberían vincular el gancho CanonicalNamespaces en contexto de archivo (en MiExtensión.php) y comprobar ahí si el wiki debería activar o no el espacio de nombres extra. Las extensiones pueden configurar de forma incondicional permisos de espacios de nombres y manejadores de contenido en contexto de archivo, dado que no necesitan que el espacio de nombres se cree.

Versión de MediaWiki:
1.25
Gerrit change 166705

El sistema de registro extension.json dispone de un parámetro namespaces para que una extensión pueda indicar una lista de sus espacios de nombres que deberían siempre existir. Para 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 soporta el gancho CanonicalNamespaces. Las extensiones deben preferir el registro de extensiones sobre CanonicalNamespaces. Fíjate que añadir una extensión a LocalSettings.php no necesariamente hace las constantes de espacios de nombres relevantes disponibles como globales para otras extensiones.

Espacios de nombres de contenido

Al generar la página de estadísticas del sitio (mira Special:Statistics), MediaWiki usa los valores almacenados en la base de datos para calcular determinadas cifras totales. Una cifra interesante de este tipo es la que contiene el "número de cartículos" o "número de páginas de contenido".

Para que una página sea considerada como un artículo -es decir, de contenido generado por algún usuario- la página debe:

Al crear espacios de nombres personalizados pensados para albergar contenido, es una buena idea declararlos como tales en la configuración. Esto se hace mediante la directiva de configuración $wgContentNamespaces .

Siguiendo con el ejemplo de arriba, podríamos añadir lo siguiente a "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 de $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 (mira Manual:Scripts de mantenimiento ).

Por qué usar espacios de nombres personalizados

Existen varias razones por las que podría interesarte usarlos:

  • Puede usarse 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 se usan solamente para transclusión.
  • 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 un programador de MW, a veces necesitas tener un espacio de nombres 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, cuando se crea una página en un espacio de nombres que no existe (por ejemplo, "Bar:Una página"), se entiende que está en el espacio principal de nombres.

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 vuelve inaccesible.

Existen tres métodos principales para corregir este problema.

Trasladar las páginas conflictivas

Si el número de páginas afectadas es pequeño (por ejemplo, si "Bar" contenía cinco páginas antes de que el espacio de nombres fuese definido en la configuración del sitio), entonces el siguiente método podría ser apropiado:

  1. Anula (convierte en comentario) la definición del espacio de nombres en el archivo de configuración.
  2. Accede a cada una de las páginas afectadas y trasládalas a otro lugar fuera del pseudo-espacio de nombres; por ejemplo, traslada "Bar:Una página" a "Bar2:Una página".
  3. Vuelve a activar la definición del espacio de nombres.
  4. Traslada las páginas afectadas al nuevo espacio de nombres.

Usar un script de mantenimiento

Dentro del directorio maintenance hay un script de mantenimiento que realiza la operación anterior de forma más eficiente cuando se trata de un gran número de páginas: NamespaceDupes.php . Es fácil de usar, pero al igual que con todos los scripts de mantenimiento de MediaWiki, conviene que consultes primero la información que describe cómo se usa (usa --help como opción).

Usar un diálogo con la base de datos

Para trasladar todas la páginas "Bar:Una página" al espacio de nombres 3000, utiliza el siguiente diálogo con la base de datos:

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

Para hacer lo propio con páginas de discusión:

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

Después de tal manipulación, ejecuta el script refreshLinks.php y el script updateSearchIndex.php para actualizar los enlaces internos y los resultados de búsqueda en tu wiki. Fíjate en que motores de búsqueda externos como Google tardarán un tiempo en actualizar su índice.

Eliminación de espacios de nombres personalizados

El problema teórico que hemos resuelto arriba 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 de nuevo significa que el contenido se vuelve 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. (Mira esta discusión de lista de correo (en inglés)).

Ejemplo de cómo quitar Flow y el espacio de nombres Tema:

  • Desinstala Flow
  • Añade $wgExtraNamespaces[2600] = 'Topic'; a la configuración temporalmente
  • Usa deleteBatch.php para eliminar todas las páginas en el espacio de nombres Tema
  • Quita la configuración $wgExtraNamespaces

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 ("300"), así como la constante de espacio de nombres ("NS_FOO"), y modificar el título (visible) del espacio de nombres y añadir el viejo 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;

Evitar conflictos entre espacios de nombres

Para que puedas evitar conflictos entre espacios de nombres (por ejemplo, que uses 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 te muestra los números que debes evitar para prevenir cualquier conflicto.

Indicar en $wgNamespacesToBeSearchedDefault , $wgNamespacesWithSubpages , $wgContentNamespaces o $wgNamespaceAliases un ID que no está asociado con ningún espacio de nombres declarado en $wgExtraNamespaces no corrompe el wiki; MediaWiki simplemente ignora tales 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.

You might also want to change the name of the tab from its default (the namespace's name). This is located in your system messages at MediaWiki:nstab-namespace.

Véase también

Site administration

Extensions

For extension developers