Jump to content

매뉴얼:사용자 지정 이름 공간

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

기존의 이름공간 이외에도 미디어위키에 사용자 정의 이름공간을 추가할 수 있으며, 이를 통해 컨텐츠를 나누는 것, 보다 논리적으로 위키를 구성하는 것이 가능합니다.

사용자 지정 이름 공간은 $wgExtraNamespaces 구성 지침을 사용하여 관리하기 쉽습니다. $wgNamespaceAliases 설정 지시어를 사용하여 기본 이름공간 또는 사용자 정의 이름공간에 대해 별칭(alias name)을 정의할 수 있습니다. 일부 확장 기능은 사용자 지정 네임스페이스를 쉽게 만들 수 있도록 해줍니다. 예를 들어 NamespaceManager BlueSpiceNamespaceManager 가 있습니다.

네임스페이스를 조작하기 전에 작업 대기열에 대기 중인 작업이 없는지 확인하는 것이 좋습니다. 작업 대기열에 대기 중인 작업이 삭제하거나 이름을 바꾸려는 네임스페이스의 페이지를 대상으로 하는 경우 작업이 실패하는 것을 방지할 수 있습니다. 대기 중인 모든 작업을 실행하고 큐를 비우기 위해 runJobs.php 을 사용하여 네임스페이스 구성을 조작하세요.

사용자 정의 이름공간 만들기

추가 네임스페이스를 등록하려면 전역 변수 $wgExtraNamespaces 에 파일 "LocalSettings.php" 를 추가합니다. 모든 이름공간은 이 배열에서 사용될 유일한 숫자 인덱스가 필요합니다. 사용자 정의 네임스페이스를 간단하게 생성하는 예로, 다음 줄을 "LocalSettings.php" 파일에 추가하면 "Foo" 네임스페이스 3000과 관련된 "Foo_talk" 네임스페이스를 정의할 수 있다. 사용자 정의 네임스페이스와 연결된 토론 네임스페이스를 갖는 것은 현재 필수 요구 사항입니다.

// 내가 추가할 이름공간에 대한 상수를 정의합니다.
define("NS_FOO", 3000); // 이 상수는 반드시 짝수여야 합니다.
define("NS_FOO_TALK", 3001); // 이 값은 반드시 따라나오는(following) 홀수여야 합니다. (*역주: 따라나오는 홀수란 짝수 n의 바로 다음 수인 n+1을 말합니다.)

// 이름공간을 추가합니다.
$wgExtraNamespaces[NS_FOO] = "Foo";
$wgExtraNamespaces[NS_FOO_TALK] = "Foo_talk"; // 이름공간 이름의 밑줄에 주목하십시오.
사용되지 않은 수를 고르세요
관례적으로, 100-199 숫자가 할당된 이름공간은 특수 목적(site-specific) 이름공간으로 예약되어있습니다. 어떤 확장 도구는 이 관례를 따르지 않기도 합니다. 확장 도구 개발자는 32767까지의 큰 수를 사용합니다. 인덱스를 선택할 때는 extension default namespaces 에 이미 포함된 숫자를 피해야 합니다. 나중에 확장 기능을 설치할 수 있도록 하기 위해서입니다. 3000에서 4999 사이의 숫자는 시스템 관리자가 사용자 정의 네임 스페이스를 정의하도록 예약되어 있습니다. (Also, you’ll want to avoid any namespace name that’s already in Extension default namespaces.)
짝수 다음 홀수
위 예제에서 이름공간 배열의 인덱스가 3000인 것에 주목하십시오.
토론 이름공간도 같이 만드세요
You typically create a discussion "Talk" namespace along with each custom namespace. With this example, if you move a page into the "Foo" namespace, you will be prompted to move its associated talk page, if any, and if you choose to do so, MediaWiki will place the talk page in "Foo talk".
공백 문자를 쓰지 마세요
이름공간 이름을 등록할 때는 공백 대신 밑줄을 사용하세요. "My Namespace"는 올바르지 않습니다. "My_Namespace"를 대신 사용하세요.
하이픈(-)을 사용하지 마세요

The uppercase part does not permit hyphens but they can still be safely added to the prefix title. 예시:

$wgExtraNamespaces[NS_FOOFOO] = "Foo-Foo";
선택한 수에 이름을 지으세요
The example defines constants for the namespace IDs, so that you can refer to these namespaces later on in the configuration, for example in $wgNamespaceProtection , $wgNamespacesWithSubpages , or $wgExtraGenderNamespaces .

새 이름공간에 대해 추가적인 설정을 계속할 수 있습니다.

$wgNamespaceProtection[NS_FOO] = [ 'editfoo' ]; // foo 이름공간의 문서를 편집하려면 "editfoo" 퍼미션이 필요합니다
$wgNamespacesWithSubpages[NS_FOO] = true;            // foo 이름공간에 대해 하위 문서(subpage)를 활성화 합니다.
$wgGroupPermissions['sysop']['editfoo'] = true;      // sysop 그룹의 사용자들에 대해 "editfoo" 퍼미션을 인정합니다
일찍 하세요
$wgExtraNamespaces의 조작은 미디어 위키 초기화 중에 완료되어야합니다. 예를 들어 $wgExtensionFunctions 와 같은 초기화 후 후크에서 조작 할 수 없습니다.
Watch out for collisions with URL protocols
MediaWiki's linking code knows about a number of URL protocols, defined in the $wgUrlProtocols variable. If your namespace name is identical to one of these protocols, you're going to have trouble creating [[wikilinks]] to pages in your custom namespace. This most commonly arises when someone tries to create a "News" namespace, because news: is a URL protocol for NNTP newsgroups.
To avoid this issue, you can deregister the relevant URL protocol by adding the following code to the "LocalSettings.php" file (replacing news by the lowercased name of the protocol you wish to remove):
$wgUrlProtocols = array_diff( $wgUrlProtocols, array( 'news:' ) );

확장기능에서

미디어위키 버전:
1.25
Gerrit change 166705

Extensions often add their own namespaces, such as the Flow extension's "Topic" namespace. The extension.json registration system has a namespaces key for an extension to list its namespaces. From the Gadgets extension:

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

You can also set other namespace-related settings here, such as whether it should be a content namespace or not; see Manual:Extension.json/Schema#namespaces for the available properties.

If namespace registration is conditional (for example EventLogging only defines its "Schema" namespace on the wiki where it stores schemas), the extension should add "conditional": true to the namespace definition in extension.json, and also register a handler for the CanonicalNamespaces hook there which decides whether to register the namespace or not. The hook handler should only change the $namespaces with which it is called; all other settings of the namespace should still be registered in the extension.json. If those settings should also be dynamic, do not change $wgContentNamespaces , $wgNamespaceContentModels etc. in the CanonicalNamespaces hook handler (it will have no effect – T288819); instead, you will have to set them earlier, such as in a callback (not in $wgExtensionFunctions ).

Note that adding an extension to LocalSettings.php does not necessarily make relevant namespace constants available as globals for other extensions.

Content namespaces

When building the site statistics page (see Special:Statistics), MediaWiki uses values stored in the database to calculate certain totals. One particular total is the "number of articles" or "number of content pages" figure.

For a page to be considered an article, or proper content, it must:

When creating custom namespaces to hold additional content, it is a good idea to indicate this in the configuration. This is done via the $wgContentNamespaces configuration directive.

To extend the example above, one might add the following to the "LocalSettings.php" file:

$wgContentNamespaces[] = 3000;
or
$wgContentNamespaces[] = NS_FOO;

MediaWiki will now consider pages in the "Foo" namespace to be articles, if they meet the remaining criteria, and will include them when updating the site statistics counters.

Running maintenance scripts

  • When adjusting the value of configuration parameter $wgContentNamespaces, it is a good idea to run either the "path/to/maintenance/updateArticleCount.php or "path/to/maintenance/initSiteStats.php" script to update the internal statistics cache (see 메뉴얼:유지보수 스크립트 ).

Why you would want a custom namespace

There are several reasons you might want this:

  • A custom namespace can be used to hold content that should not be shown on the search results page, for example pages that are used only for transclusion.
  • Certain namespaces require additional privilege(s) for editing.
  • You want certain namespaces not to be subjected to certain limitations or default settings ($wgNoFollowNsExceptions for example)
  • A uniform prefix for specific content(s), which is searchable for that namespace only

Dealing with existing pages

When storing page records, MediaWiki uses a namespace's numerical index, along with the remaining title text. Thus, when a page is created in a namespace that doesn't exist, e.g. "Bar:Some page", it is treated as being in the main namespace.

This can cause problems if adding a custom namespace definition for "Bar" at a later date, as MediaWiki will look for a page indexed via the proper namespace, but won't be able to find it, thus making the content inaccessible.

To correct this problem, there are three main approaches.

Move conflicting pages

If the number of pages affected is small (e.g. "Bar" held five pages created before the namespace was defined in the site configuration), then the following approach might be suitable:

  1. Comment out the namespace definition in the configuration file
  1. Access each affected page, and move it out of the pseudo-namespace, e.g. move "Bar:Some page" to "Bar2:Some page"
  1. Un-comment the namespace definition
  1. Move the affected pages back into the new namespace

Use a maintenance script

Within the maintenance directory, there is a maintenance script which performs the above operation more effectively for a large number of pages: NamespaceDupes.php It is simple to use, but as with all MediaWiki maintenance scripts, consult the available usage information first (use --help as an option).

데이터베이스 쿼리 사용

To move all pages "Bar:Some page" into namespace 3000, make the following database query:

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

To handle discussion pages:

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

After such fiddling, run the refreshLinks.php script and the updateSearchIndex.php script to update internal links and search results in your wiki. Note that external search engines like Google will take some time to update their index.

Removing custom namespaces

The problem addressed above also occurs when a custom namespace definition is removed; MediaWiki is no longer aware of the numerical index for the namespace, and attempts to search the main namespace for the desired pages, leading to inaccessible content. This is a rare occurrence, since most sites will not need namespaces removed, but it is a problem. (See mailing list discussion).

Example on how to remove Flow and the Topic namespace:

  • Uninstall Flow
  • Temporarily add $wgExtraNamespaces[2600] = 'Topic'; to the config
  • Use deleteBatch.php to delete all pages in the Topic namespace
  • Remove the $wgExtraNamespaces config

Renaming custom namespaces

Suppose that you need to rename custom namespace "Foo" to "New" without performing a mass move of pages. The easiest way to achieve this is to preserve the namespace ID (here "3000") as well as the namespace constant (here "NS_FOO"), modify the (visible) namespace title and add the old one as an alias.

변경

Avoid namespace conflicts

In order for you to avoid namespace conflicts e.g. your namespace has the same number as a namespace defined by an extension, the extension namespace list shows you which numbers to avoid to prevent conflicts.

Defining $wgNamespacesToBeSearchedDefault , $wgNamespacesWithSubpages , $wgContentNamespaces or $wgNamespaceAliases for an ID not associated to any existing namespace in $wgExtraNamespaces doesn't break the wiki; MediaWiki gracefully ignores such configurations.

Styling namespaces

For example, to set the background color of pages in a particular namespace (and its associated talk namespace) you can add the following code to your common.css:

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

where 3000 is the namespace's index and #f3f3ff is the color you want as its background color.

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.

같이 보기

Site administration

Extensions

For extension developers