Manual:インターフェイス/サイドバー

From mediawiki.org
Jump to navigation Jump to search
This page is a translated version of the page Manual:Interface/Sidebar and the translation is 67% complete.
Other languages:
Deutsch • ‎English • ‎Taqbaylit • ‎español • ‎français • ‎italiano • ‎português • ‎português do Brasil • ‎русский • ‎עברית • ‎العربية • ‎अवधी • ‎中文 • ‎日本語 • ‎한국어
サイドバーの例

MediaWiki:Sidebarはサイドバー、つまりウィキ上の最も重要な位置へのリンクを置き、サイト管理者が永続的なリンクをまとめて追加する場所をどこに提供するか定義します。ほとんどのウィキの例では、コミュニティの議論のページや便利な複数のツールにリンクしています。

外装がMonobookとVectorの場合、サイドバーは検索バーやツールボックスとともに画面左上から始まり(書字方向が右から左の言語では右上)、外装が変わると場所も変わることがあります。 このサイドバーはMobileサイト利用者には非表示です (Extension:MobileFrontend / Skin:MinervaNeue外装で生成される版のこと) - 表示するにはMobileMenuフックで対応できます。)

サイドバーをカスタマイズする

ウィキで MediaWiki:Sidebar をカスタマイズするには、まず最初に「インターフェイス編集」(editinterface)権限のある利用者 (管理者であれば既定で権限がある)としてログインします。(グループまたは利用者への権限付与についての情報は、Manual:利用者権限 を参照。)

次に、自分のウィキのページへのリンクを開き、URL/アドレスバーに書かれたウィキページ名(例:Main_Page)を MediaWiki:Sidebar に書き換えてから、ページを読み込みます - すると変更後のサイドバーが表示されるはずです。(URLが長文の場合は //yourdomain/yourwiki/index.php?title=MediaWiki:Sidebar&action=edit の構文を使用する必要があります。)

もしサイドバーの内容が既に変更してある場合は、 EditEdit source(編集/ソースを編集)リンクをクリックします。あるいは CreateCreate source(作成/ソースを作成)を押してページを最初から作成します。

ページを新しく作ることになった場合、エディター画面に既定のサイドバーが表示されます。「MediaWiki:Sidebar」というページをきちんと作成するには、内容を変更してから保存してください。

サイドバーに用いるコードのサンプル:

* navigation
** mainpage|Accueil
** Special:RecentChanges|Recent changes
* new heading
** portal-url|Forums
** https://www.mediawiki.org|MediaWiki home

上記の記述のサンプルは下記のサイドバーを表示します。

サイドバーの例

見出し

サイドバーを区切り、個別の見出しを作ることができます。区切りごとの見出しは1番目のレベルの要素から拾います(上記のサンプルでは「navigation」と「new heading」)。

もし見出しの語句がインタフェースのメッセージ(MediaWikiの名前空間にある同名のページ)と一致する場合は、そのページ名がラベルとなります。その他の場合、区切りの見出しは指定どおりです。

magic word {{int:}}を使うと、多言語化された版を使っているかどうか確認できます。

** randompage-url|{{int:randompage}}

リンク

2番目のレベルの要素はリンクで(上記のサンプルの「mainpage|mainpage」)、以下の書式を使います。

** target|link text
ターゲット
リンクのターゲット(リンク先)には、インターフェイスメッセージの名前(MediaWiki 名前空間のページ名)あるいはウィキページの名前もしくは外部リンクが入ります。どの場合にもリンクは内部リンク、ウィキ間リンク、外部リンクのどれも該当し、特定の場合(記号「&」を含むリンク)はインターフェイスメッセージの設定が必要です。リンクのターゲットは個人設定で指定した利用者の言語に依存しません。
アルゴリズムは以下のとおり:
  1. ターゲットテキストを取得。
  2. その名前の既存または既定のインタフェースメッセージがある場合、そのメッセージの内容を代用。
  3. 出力が有効なURLである場合(http://または他のURLプロトコルで始まる)は、リンクはそのURLを指す。
  4. 有効なURLでない場合は、それをwikilinkのリンクターゲットとして扱う(そのページ名またはインターウィキへリンク)。
  5. もし ' - ' にリンクする場合、入力内容を全てサイドバーから削除する(リンクを保持しているメッセージの変更を利用して実行できるため、特定のエントリをすべての言語版から削除したいときに使える方法)。
例:
  • "** portal-url|portal" MediaWiki:Portal-urlの文字列を使用 (出力は"Project:Community portal").
  • "** Special:RecentChanges|Recent changes" リンク先はSpecial:最近の更新。一致するインタフェースメッセージがないため。
  • "** w:Foo|Some interwiki page" 同じ理由でw:Fooにリンク。
  • "** https://www.mediawiki.org|MediaWiki home" 同じ理由でhttp://www.mediawiki.orgにリンク。
リンクの文字列
インタフェースメッセージの名称と同じ(MediaWiki 名前空間のページ)または平文(プレーンテキスト)でよい。
  • リンクの文字列が既存もしくは既定のインタフェースメッセージと一致すると、メッセージの内容を使用。MediaWiki は自動で地域化バージョンを照会する。例えば使用言語がfr(フランス語)でリンクの文字列がインタフェースメッセージ「forum」だったと仮定すると、「forum/fr」を照会してから「forum」を使用する。
  • それ以外の場合には、リンクの文字列をそのまま使用。
  • 通常のウィキリンクと異なり、リンクの文字列は必須。リンクの文字列がないとその項目は無視されることに注意。
例:
  • ** Homepage|mainpageMediawiki:Mainpageを使用 ("MediaWiki"を入力。)
  • ** Special:Recentchanges|Recent changes にはインターフェースに該当するメッセージがないため「最近の更新」を使用。

要素の順序

サイドバーの要素には既定の順序があり、「ナビゲーション」、「検索」、「ツールボックス」、「言語」の順です。順序の変更は(MediaWiki 1.13+MediaWiki:Sidebarに見出し構文を用いて特殊なキーワード(SEARCH、TOOLBOX、 LANGUAGES)を追加します。例として、次のコードで検索ボックスをサイドバーのいちばん上に移動します。

* SEARCH
* navigation
** mainpage|mainpage
** Special:Recentchanges|Recent changed
* new heading
** portal-url|portal
** https://www.mediawiki.org|MediaWiki home

ツールチップとアクセスキー

自分で何か項目をサイドバーに追加した場合、対応するツールチップがありません。ただしツールチップは自作でき、次の手順があります[1]

  • 「MediaWiki:Tooltip-n-<項目のid>」という名前のウィキページを作成
  • 作成したツールチップをその新しいページに格納。

アクセスキーも同様に、次の手順で自作できます。

  • 「MediaWiki:Accesskey-n-<id of the item>」という名前のウィキページを作成
  • 自作したアクセスキーをその新しいページに格納。

例:

翻訳

文字列を翻訳して使用するには、MediaWiki 名前空間で該当するページを編集します。

例: 「メインページ」という名の項目を置換する文字列は、MediaWiki:Mainpageから取ります。ドイツ語版ウィキを使用するユーザーのために文字列を設定/変更するには、使いたい文字列をMediaWiki:Mainpage/deに記入します。

これでMediaWikiのインタフェースを使ってリンクの文字列を簡単に置換できます。

注意事項としてMediaWikiが既定で使用するサイドバーページは、その 言語つまりあなたのウィキの既定の使用言語のものです。例えば仮にフランス語が既定の使用言語だとすると、MediaWiki:Mainpage/frを編集すると、個人で言語設定を変更していなくても、あるいは匿名の利用者を含むすべての利用者に対し、フランス語版のサイドバーが表示されます。

さらに高度な翻訳の解説は Help:Extension:Translate/構造化されていない要素の翻訳 を参照してください。

高度なカスタマイズ

サイドバーを思い通りにカスタマイズするにはJavaScriptもしくはCascading Style Sheetsを実行、あるいは直接、PHPファイルを編集します。これらの方法に取りかかる前に以下の注意点に目を通してください。

  • 壊れやすい JavaScript の扱い: JavaScript を無効にした利用者には役立たないほか、ブラウザや外装によりうまく作動しない頻度が高まります。
  • PHP ファイルを編集すると予想外のエラーを招きやすく、新規ファイルを手動で書き換えない限り、変更箇所は次回の更新で失われます。

UI メッセージを強制的に内容に沿わせる

特に多言語版の場合、ページによっては時により内容の言語に合わせて調整する必要があります。その実現には$wgForceUIMsgAsContentMsgの設定を変えます。この方法でそれぞれのメッセージを上書きする場合には、メインページの内容の言語のバージョンに対してサイドバーからリンクを貼り、かつポータルページから以下を渡すように個別に調整します。

LocalSettings.php

code
$wgForceUIMsgAsContentMsg = [ 'mainpage', 'portal-url' ];

ツールボックスのセクションを追加または削除する(JavaScript)

The toolbox appears on the left under MediaWiki:Sidebar. The toolbox is a dynamic element requiring programmatic methods such as skin extensions, PHP (see skins/MonoBook.php and creating a new skin) or JavaScript.

The JavaScript solution uses User:{username}/common.js / MediaWiki:Common.js, available for MediaWiki 1.9+.

次に、どのセクションにどのリンクを表示するかを設定するだけです。また、必要に応じていくつかのリンクを削除することもできます。

code
function ModifySidebar( action, section, name, link ) {
	try {
		switch ( section ) {
			case 'languages':
				var target = 'p-lang';
				break;
			case 'toolbox':
				var target = 'p-tb';
				break;
			case 'navigation':
				var target = 'p-navigation';
				break;
			default:
				var target = 'p-' + section;
				break;
		}

		if ( action == 'add' ) {
			var node = document.getElementById( target )
							   .getElementsByTagName( 'div' )[0]
							   .getElementsByTagName( 'ul' )[0];

			var aNode = document.createElement( 'a' );
			var liNode = document.createElement( 'li' );

			aNode.appendChild( document.createTextNode( name ) );
			aNode.setAttribute( 'href', link );
			liNode.appendChild( aNode );
			liNode.className = 'plainlinks';
			node.appendChild( liNode );
		}

		if ( action == 'remove' ) {
			var list = document.getElementById( target )
							   .getElementsByTagName( 'div' )[0]
							   .getElementsByTagName( 'ul' )[0];

			var listelements = list.getElementsByTagName( 'li' );

			for ( var i = 0; i < listelements.length; i++ ) {
				if (
					listelements[i].getElementsByTagName( 'a' )[0].innerHTML == name ||
					listelements[i].getElementsByTagName( 'a' )[0].href == link
				)
				{
					list.removeChild( listelements[i] );
				}
			}
		}


	} catch( e ) {
		// let's just ignore what's happened
		return;
	}
}

function CustomizeModificationsOfSidebar() {
	// adds [[Special:CategoryTree|Special:CategoryTree]] to toolbox
	ModifySidebar( 'add', 'toolbox', 'CategoryTree', 'https://en.wikipedia.org/wiki/Special:CategoryTree' );
	// removes [[Special:Upload|Special:Upload]] from toolbox
	ModifySidebar( 'remove', 'toolbox', 'Upload file', 'https://en.wikipedia.org/wiki/Special:Upload' );
}

jQuery( CustomizeModificationsOfSidebar );
使用法
function CustomizeModificationsOfSidebar() has to be customized for adding or removing links in specific sections:
ModifySidebar( "action", "section", "name", "link" );
パラメーター
action add to add a link; remove to remove a link
section navigation, toolbox, languages but also any other existing customized section; the given link will be added to or removed from this section
name contains the text of the link
link contains the URL of the link
特定の利用者グループへの変更を制限する

If you want to restrict the modification of the links to a specific user group (e.g. bureaucrat), change:

jQuery( CustomizeModificationsOfSidebar );

to

if ( mw.config.get( 'wgUserGroups', [] ).indexOf( 'bureaucrat' ) !== -1 ) {
	jQuery( CustomizeModificationsOfSidebar );
}

For restricting the modifications to IPs instead of a specific user group, use

if ( mw.config.get( 'wgUserGroups', [] ).indexOf( 'user' ) === -1 ) {
	jQuery( CustomizeModificationsOfSidebar );
}

ツールボックスのセクションを追加または削除する(PHP)

You can add in your file LocalSettings.php the hook described on this page. With this, you can modify via MediaWiki:Sidebar the links in the toolbox panel (remove some links, change their name) and add custom links (e.g. add the "Recent changes" link there instead of the navigation panel.

Make expanding/collapsing sidebar for all users (Monobook skin only)

If you use the Monobook skin and don't want to miss the expandable menu bar from e.g. Vector skin, paste the following code into MediaWiki:Monobook.js of your wiki.

/////////////////////////////////////////////////////////
// Code snippet to make your sidebar items expandable. 
// Use this code ONLY for the Monobook skin. 
/////////////////////////////////////////////////////////

$( document ).ready( function() {
	// Set the default expanded items by their headline
	var defaultExpandItems = ['Navigation', 'Orga'];
	// Set the basic-name for the cookies, which save the current state of expanding
	var expandCookieName = 'disdance_project_wiki_nav_expanded_';

var maxHeights = [];
	var expandeds = [];
	var labels = [];
	initNav();
});

function initNav() {
	$( '#p-logo' ).css({'position': 'relative', 'display': 'block'});
	$( '.generated-sidebar h5,#p-tb h5 ').each( function( i ) {
		var id = $( this ).parent().attr( 'id' );
		maxHeights[id] = $( this ).next( 'div' ).height();
		var str = $( this ).html();
		labels[id] = str;

if ( $.cookie( expandCookieName + id ) == 'false' ) {
			expandeds[id] = false;
			minimize( $( this ) );
		} else if ( $.cookie( expandCookieName + id ) == 'true' ) {
			expandeds[id] = true;
			maximize( $( this ) );
		} else if ( defaultExpandItems.indexOf( str ) == -1 ) {
			expandeds[id] = false;
			minimize( $( this ) );
		} else {
			expandeds[id] = true;
			maximize( $( this ) );
		}
		$( this ).css({'cursor': 'pointer'});
		$( this ).click( toggleNav );
	} );
}

function minimize( target ) {
	var id = $( target ).parent().attr( 'id' );
	// You can change the expires parameter to save the cookie longer/shorter than 7 days like in this code
	$.cookie( expandCookieName + id, 'false', { expires: 7} );
	var str = labels[id] + '  ►';
	$( target ).next( 'div' ).animate({'height': '0px'});
	$( target ).html( str );
}

function maximize( target ) {
	var id = $( target ).parent().attr( 'id' );
	// You can change the expires parameter to save the cookie longer/shorter than 7 days like in this code
	$.cookie( expandCookieName + id, 'true', { expires: 7} );
	var str = labels[id] + '  ▼';
	var newHeight = maxHeights[id];
	$( target ).next( 'div' ).animate({'height': newHeight + 'px'});
	$( target ).html( str );
}

function toggleNav( e ) {
	var id = $(e.target ).parent().attr( 'id' );
	expandeds[id] = !expandeds[id];
	if( expandeds[id] == true ) {
		maximize( e.target );
	} else {
		minimize( e.target );
	}
}

///////////////////////////////////////////////////////
///////////////////////////////////////////////////////

Sidebar width in Monobook skin (CSS)

You can change the width of your sidebar by adding the following CSS rules to your MediaWiki:Monobook.css

;

note that this is an article, not a file. This changes the width to 15em, the actions position and portlet width should be an em or so less, so I've set them to 14em in this example.

/* increase sidebar width */
#column-content { margin-left: -15em; }
#column-content #content { margin-left: 15em; }
#p-logo a, #p-logo a:hover { width: 15em; }
#p-cactions { left: 14.5em; }
.portlet { width: 14em; }
#column-content { margin-left: -14em; }
#content.mw-body { margin-left: 14em; }

Change sidebar content when logged in (PHP)

Install and configure the DynamicSidebar extension.

Parser functions in sidebar

Although it is not exactly recommended, the sidebar does support parser functions (such as ParserFunctions), provided the ** is outside the parser function, and the parser function does not span multiple lines. For example:

*Heading
**{{#ifeq:{{NAMESPACE}}|User|Page-to-link-to{{!}}text-to-show-on-user-page}}
**{{#ifeq:{{NAMESPACE}}|Talk|Another-Page-to-link-to{{!}}text-to-show-on-talk-page}}

works. However the following would not work since the parser function spans multiple lines:

*Heading
{{#ifeq:1|1|
**foo{{!}}
bar
|
**baz{{!}}fred
}}

トラブルシューティング

変更点が表示に反映されない

MediaWiki aggressively caches content if possible, which often causes the navigation bar to persist after changes. 影響を受けるページ群でキャッシュをパージすると、問題が解決かもしれません。 すべてのキャッシュを大量に一括パージするには、ご利用のデータベースでLocalSettings.php ファイルの改変もしくはobjectcache 表の切り詰めが必要です (両方が必要な場合もあり)。

trueに設定するには、$wgUseDatabaseMessages も必要です。

一般利用者もしくは特別な権限のない管理者には、上記の変更点が表示されるよう、前述の上記の高度な処理をすることができないかもしれません。あるいはページの再読み込み(パージ)をしても表示が変わらない場合にも、プレビュー画面で CSS の変更を確認できることがあります (特に個人用の CSS の変更。) たとえば サイドバーの幅や輪郭線とラベル文字の余白もしくはマージンを変更した場合。ただし変更を保存しても、画面表示への反映までに時差が発生することがあります。数時間後でも何も表示されない場合には、ウィキ全体もしくはウィキファームの管理者に相談する必要があるかもしれません。

リンクラベルが小文字になる

もしも大文字になるはずのリンクが小文字で表示される場合は、縦棒記号の前後に半角開きスペースを記入してみます。例:

** http://www.example.com/download.php?file=44555 | Download

Sections 節が非表示もしくは想定外の文字列に変わった

もし特定の節が非表示もしくは想定外のコンテンツが表示される場合は、見出しの文字列がインターフェースのメッセージ名と重複していないか、 Special:AllMessagesを検索して調べます。もしそうだった場合は、ヘッダー名を変更するか、インターフェースのメッセージを新しく作り、それを使います。

たとえば見出しの文字列として 「Sidebar」を使いたい場合、 インターフェースのメッセージ「MediaWiki:Sidebar-header」として「Sidebar」のみ記入します。その後、見出しには * sidebar-header を使います。

フォーム** ターゲット | リンクテキスト がリンクされていないと、節は非表示になります (たとえばターゲットの記入を忘れた場合。)

Special:Versionの更新後、リンクが切れた

この現象は、たとえばサイト言語用のサイドバーの項目に新しい翻訳が付くたびに発生します。毎回、新しいリダイレクトのページを作成すればよいのですが、よりよい対策としては、MediaWiki 翻訳の最新版を常に追跡するよりも、サイドバーの項目名を自作する方法があります。

関連項目

References