Hauptseite

Aus ARTECO Wiki
Zur Navigation springen Zur Suche springen

Peilsender - MediaWiki Vorlage:Interface message

MediaWiki:Sidebar defines the navigation bar, which provides links to the most important locations in the wiki and supplies site administrators with a place to add a persistent collection of links. For instance, most wikis will link to their community discussion page and some useful tools.

The default Monobook skin places the navigation bar on the top-left (top-right for right-to-left languages) along with the search bar and toolbox, but the placement may be different in other skins.

Customize the sidebar

As an administrator, edit the wiki page "MediaWiki:Sidebar". (The editinterface permission needs to be enabled and is enabled for administrators by default; for information on assigning it to other groups, see Manual:User rights.) You may need to use the syntax //yourdomain/yourwiki/index.php?title=MediaWiki:Sidebar&action=edit if you use long URLs.

If you are sure you are logged in with the relevant rights but do not see the edit link, click on the create tab at the top of the page - this will take you to the edit page.

Example sidebar code:

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

Headings

The navigation bar can be split into sections, each with a heading of its own. The heading for each section is taken from the first-level list element ("navigation" and "new heading" in the example above).

If this text corresponds to the name of an interface message (an existing page of that title in the MediaWiki namespace), then the text of that page is used as a label; otherwise, the header title is used as-is.

Bug: only the first section will be shown in the Classic, Cologne Blue, and Simple skins (bug 2557).
Bug: no sidebar is shown in the Nostalgia skin (bug 10794).

Links

Second-level list elements are links ("mainpage|mainpage" in the example above), where the format is:

** target|link text
target
The link target can be the name of an interface message (page in the MediaWiki namespace) or wiki page, or an external link. In either case, the link can be internal, interwiki, or external. In some cases (such as links with the "&" character), an interface message is necessary. The link target cannot be made dependent on the interface language set in the preferences.
Algorithm followed:
  1. Get the target text.
  2. If there is an existing or default interface message with that name, use the content of that message instead of the target text.
  3. If the output from the previous step is a valid url (beginning with http:// or other url protocol), the link will point to that url.
  4. Else, it will treat it as the link target of a wikilink (linking to that page name or interwiki).
  5. In case it would end up linking to '-', the whole entry is removed from the sidebar (that's useful for removing an entry on all languages by changing the message holding the link).


Examples:


text
The link text can be the name of an interface message (page in the MediaWiki namespace) or plain text.
  • If the link text is the name of an existing or default interface message, the content of that message will be used. MediaWiki will check for localized versions; for example, if the current language is fr (French) and the link text is the interface message "forum", it will check for "forum/fr" before using "forum".
  • Otherwise, the link text is used as the target as-is.
  • Notice that the link text is not optional as in normal wiki links. If the link text is missing, the item is ignored.
Examples:
  • ** mainpage|mainpage uses MediaWiki:Mainpage (which contains "Hauptseite").
  • ** Special:Recentchanges|Recent changes uses "Recent changes", since there is no interface message of that name.

Order of elements

By default, the sidebar consists of elements in this order: navigation, search, toolbox, languages. The order can be changed (in MediaWiki 1.13+) by adding special keywords (SEARCH, TOOLBOX and LANGUAGES) to MediaWiki:Sidebar using the heading syntax. For example, the following code moves the search box to the top of the sidebar:

* SEARCH

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

Advanced customization

The sidebar can be fully customized by implementing JavaScript or Cascading Style Sheets, or by editing the PHP files directly. Before using these methods, note that:

  • JavaScript is fragile: it will not work for users with JavaScript disabled, and scripts frequently fail in different browsers or skins.
  • Editing the PHP files can easily cause unexpected errors, and your changes will be lost in the next update unless you manually change the new files.

Force UI-messages to follow content

Some pages should sometimes follow the content language, especially for multilingual sites. This can be controlled with the setting $wgForceUIMsgAsContentMsg. Each message overridden in this way must be explicitly given, for example to let the sidebar link to versions given by the content language for the main page and the portal page add the following to LocalSettings.php

code
$wgForceUIMsgAsContentMsg = array( 'mainpage', 'portal-url' );

Add or remove sections (JavaScript)

The toolbox, which appears under the search bar, is a dynamic element and cannot be easily customized without the use of skinning extensions (otherwise it requires programming in PHP.) If you still want to do so, you can copy skins/MonoBook.php, creating a new skin. You can then make a custom skin to generate these links in your preferred fashion.

Another javascript solution is below.

For this solution to work on the entire mediawiki site, this script has to be copied to MediaWiki:Common.js (MediaWiki:Common.js is available for Mediawiki 1.9 +).

For this solution to work only for a specific user, add this script to Special:Mypage/monobook.js (or another js-page, depending on your prefered skin).

Now simply configure which link should appear in which section. You also can remove some links if you want to.

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) {
      // lets just ignore what's happened
      return;
    }
}

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

addOnloadHook(CustomizeModificationsOfSidebar);
Usage
function CustomizeModificationsOfSidebar() has to be customized for adding or removing links in specific sections:
ModifySidebar("action", "section", "name", "link");
parameter value
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
restricting modifications to specific usergroups

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

addOnloadHook(CustomizeModificationsOfSidebar);

to

if (isArray(wgUserGroups)) {
    if (wgUserGroups.Contains('bureaucrat')) {
        addOnloadHook(CustomizeModificationsOfSidebar);
    }
}

and add

function isObject(obj) {
    if (typeof obj == "object" && obj != null)
         return true;
    else
         return false;
}

function isArray(obj) {
    if (isObject(obj)) {
        if (obj.constructor.toString().indexOf("Array") == -1)
            return false;
        else
            return true;
    }
    else
        return false;
}

Array.prototype.Contains = function(element,strict) {
     for(i in this) {
          if(this[i] == element && !strict) return true;
               else if(this[i] === element) return true;
          }
     return false;
 }

For restricting the modifications to IPs instead of a specific usergroup use

if (!isArray(wgUserGroups)) {
        addOnloadHook(CustomizeModificationsOfSidebar);
 }

Sidebar width (CSS)

  • Bug: only works with the default MonoBook skin.

You can change the width of your sidebar by adding the following CSS rules to your MediaWiki:Common.css article (MediaWiki:Monobook.css if pre 1.9), 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.

#column-content { margin-left: -15em }
#column-content #content { margin-left: 15em }
#p-logo a, #p-logo a:hover { width: 15em }
.portlet { width: 14em }
#p-cactions { left: 14em }

Change sidebar content when logged in (PHP)

To get anonymous users to have their own sidebars change includes/Skin.php. There is a function called buildSidebar. Edit this function to check for $wgUser->isLoggedIn() and call a different system message than sidebar.

 if ($wgUser->isLoggedIn()) {
   $lines = explode( "\n", wfMsgForContent( 'sidebar' ) );
 } else {
   $lines = explode( "\n", wfMsgForContent( 'anon_sidebar' ) );
 }

Then in your Wiki, go to MediaWiki:anon_sidebar and create your new sidebar. You may need to add $wgUser to the list of global variables in the buildSidebar().

You'll also have to add $wgUser in the globals declaration of the function.

A better solution is to modify the sidebar per hook. You don't have to change the Skin.php for this. Just create a simple extension like this one:

<?php
$wgHooks['SkinBuildSidebar'][] = 'efHideSidebar';

function efHideSidebar($skin, &$bar) {
        global $wgUser;
        // Hide sidebar for anonymous users
        if (!$wgUser->isLoggedIn()) {
                $url = Title::makeTitle(NS_SPECIAL, wfMsg('login'))->getLocalUrl();
                $bar = array(
                        navigation => array(
                                array(text   => 'Login',
                                      href   => $url,
                                      id     => 'n-login',
                                      active => '')
                        )
                );
        }
        return true;
}

Allow wiki markup (PHP)

Many people on support desk have been asking about how to put arbitrary wikitext into the side bar. You can hack your skins/Monobook.php file (if you're using monobook) and replace the following section of code.

MediaWiki < 1.13.2

Replace this:

<?php foreach ($this->data['sidebar'] as $bar => $cont) { ?>
<div class='portlet' id='p-<?php echo Sanitizer::escapeId($bar) ?>'<?php echo $skin->tooltip('p-'.$bar) ?>>
	<h5><?php $out = wfMsg( $bar ); if (wfEmptyMsg($bar, $out)) echo $bar; else echo $out; ?></h5>
	<div class='pBody'>
		<ul>
<?php 		foreach($cont as $key => $val) { ?>
			<li id="<?php echo Sanitizer::escapeId($val['id']) ?>"<?php
				if ( $val['active'] ) { ?> class="active" <?php }
			?>><a href="<?php echo htmlspecialchars($val['href']) ?>"<?php echo ... </li>
<?php		} ?>
		</ul>
	</div>
</div>
<?php } ?>

with this...

<?php
global $wgUser,$wgTitle,$wgParser;
$side = new Article(Title::newFromText('Sidebar',NS_MEDIAWIKI));
if (is_object($wgParser)) { $psr = $wgParser; $opt = $wgParser->mOptions; }
else { $psr = new Parser; $opt = NULL; }
if (!is_object($opt)) $opt = ParserOptions::newFromUser($wgUser);
$wikitext = "__NOEDITSECTION____NOTOC__\n";
$wikitext .= $side->fetchContent();
$html = $psr->parse($wikitext,$wgTitle,$opt,true,true)->getText();
echo preg_replace("/<li>\\s*<\\/li>/",'',$html);
?>


If php4 on your sys

$html = $psr->parse($wikitext,$wgTitle,$opt,true,true);
$html = $psr->mOutput->getText();

MediaWiki 1.13.2

Replace this:

		$sidebar = $this->data['sidebar'];
		if ( !isset( $sidebar['SEARCH'] ) ) $sidebar['SEARCH'] = true;
		if ( !isset( $sidebar['TOOLBOX'] ) ) $sidebar['TOOLBOX'] = true;
		if ( !isset( $sidebar['LANGUAGES'] ) ) $sidebar['LANGUAGES'] = true;
		foreach ($sidebar as $boxName => $cont) {
			if ( $boxName == 'SEARCH' ) {
				$this->searchBox();
			} elseif ( $boxName == 'TOOLBOX' ) {
				$this->toolbox();
			} elseif ( $boxName == 'LANGUAGES' ) {
				$this->languageBox();
			} else {
				$this->customBox( $boxName, $cont );
			}
		}

with this:

global $wgParser, $wgUser, $wgTitle;
if (!is_object($wgParser)) {
    $wgParser = new Parser;
    $opt = $wgParser->mOptions;
}
if (!is_object($opt)) {
    $opt = ParserOptions::newFromUser($wgUser);
}
echo $wgParser->parse(wfMsgForContent( 'sidebar' ),$wgTitle,$opt,true,true)->getText();
$this->searchBox();
$this->toolbox();
$this->languageBox();

Content of MediaWiki:Sidebar

That will allow the MediaWiki:Sidebar article to be proper wikitext. You will need to include the 'pBody' div tag to ensure the portlet is styled correctly, so your MediaWiki:Sidebar article will need to look something like the following example after the change:

<div class="portlet">
<h5>Navigation</h5>
<div class='pBody'>
*[[Main Page]]
*[[Community portal]]
*[{{fullurl:Special:Recentchanges}} Recent changes]
*[[Sandbox]]
*[[Help]]
</div>
</div>

Add a banner to the sidebar (PHP)

You can add one or more banners to the sidebar by hacking your skins/Monobook.php file (if you're using monobook) to include the following piece of code.

Find (line 188):

?>
		</div><!-- end of the left (by default at least) column -->

Include:

?>
	<!-- begin of banner1 -->
	<div class='generated-sidebar portlet'>
	<h5><?php $this->msg('sidebar-banner1-headingtext') ?></h5>
	<div style="border: 1px solid #B0B0B0; background-color: #FFFFFF;">
	<a href="<?php $this->msg('sidebar-banner1-url') ?>">
	<img width="100%" title="<?php $this->msg('sidebar-banner1-alttext') ?>" 
		alt="<?php $this->msg('sidebar-banner1-alttext') ?>" 
		src="<?php $this->msg('sidebar-banner1-imgsrc') ?>" /></a>
	</div></div>
	<!-- end of banner1 -->
		</div><!-- end of the left (by default at least) column -->

Now in your Wiki, create four System messages: (i.e. articles named MediaWiki:sidebar-banner1-...)

parameter value
sidebar-banner1-headingtext The text that will be displayed as the banner heading ("advertisement", "sponsor" etc.)
sidebar-banner1-url The destination URL of this banner
sidebar-banner1-alttext Content of the alt="" parameter of an HTML <img> tag: any title for the destination site
sidebar-banner1-imgsrc Content of the src="" parameter of an HTML <img> tag: the URL of the banner image. It may be the address of an image uploaded to your Wiki (magic words may be used, e.g. {{filepath:banner1.png}}), or the address of an external image

To add more banners, just repeat the process renaming "banner1" to "banner2" etc.

Troubleshooting

Changes not showing up

MediaWiki aggressively caches content if possible, which often causes the navigation bar to persist after changes. Purging the cache of affected pages should correct the situation. To perform a mass-purge of all caches at once, touch the LocalSettings.php file or truncate the objectcache table in your database (you may have to do both).

You also need to have $wgUseDatabaseMessages set to true.

Lowercase link labels

If your links are not being capitalized as intended, try adding spaces around the bar character; for example:

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

Sections disappear or show unexpected content

If a section does not display or displays unexpected content, check that the header text isn't the name of an interface message by searching Special:Allmessages. If it is, use a different header text, or create a new interface message and use it.

For example, if you want to use "Sidebar" as header text, create the interface message "MediaWiki:Sidebar-header" containing only "Sidebar". Then, use * sidebar-header as header.

Sections are not displayed if there are no links of the form ** target|link text (e.g. when the target was forgotten).

Broken links after updating Special:Version

This will happen e.g., each time there are newer translations for your site language's sidebar items. One could add new redirect pages each time, but a better solution would be to use one's own sidebar item names instead of trying to keep track of the current MediaWiki translations.

Ancient version of MediaWiki

If you have a pre-release version of 1.5 Beta, or earlier, it is still possible in some cases to edit the sidebar:

See also

Vorlage:Languages