User:Hoggwild5/ExtraSidebar
Appearance
The function below can be copied and pasted into the skins.php file you wish to modify, after the following:
function initPage( &$out ) {
SkinTemplate::initPage( $out );
$this->skinname = 'monobook';
$this->stylename = 'monobook';
$this->template = 'MonoBookTemplate';
}
Make sure the function is part of the first class in the skins file, the one that extends SkinTemplate.
Code
[edit] function buildSidebar() {
global $wgLang, $wgContLang, $wgUser;
$fname = 'SkinTemplate::buildSidebar';
wfProfileIn( $fname );
$bar = array();
$lines = explode( "\n", wfMsgForContent( 'sidebar' ) );
if($wgUser->isLoggedIn()){
$lines2 = explode( "\n", wfMsgForContent( 'sidebar-internal' ) );
$lines = array_merge($lines, $lines2);
}
$heading = '';
foreach ($lines as $line) {
if (strpos($line, '*') !== 0)
continue;
if (strpos($line, '**') !== 0) {
$line = trim($line, '* ');
$heading = $line;
} else {
if (strpos($line, '|') !== false) { // sanity check
$line = explode( '|' , trim($line, '* '), 2 );
$link = wfMsgForContent( $line[0] );
if ($link == '-')
continue;
if (wfEmptyMsg($line[1], $text = wfMsg($line[1])))
$text = $line[1];
if (wfEmptyMsg($line[0], $link))
$link = $line[0];
if ( preg_match( '/^(?:' . wfUrlProtocols() . ')/', $link ) ) {
$href = $link;
} else {
$title = Title::newFromText( $link );
if ( $title ) {
$title = $title->fixSpecialName();
$href = $title->getLocalURL();
} else {
$href = 'INVALID-TITLE';
}
}
$bar[$heading][] = array(
'text' => $text,
'href' => $href,
'id' => 'n-' . strtr($line[1], ' ', '-'),
'active' => false
);
} else { continue; }
}
}
wfProfileOut( $fname );
return $bar;
}
Notes
[edit]- Because the sidebar changes depending on the logged in status of the user, caching for the sidebar has to be disabled. This is a small performance hit, and one that should not be noticable on any but the most active sites. If you have been using $wgEnableSidebarCache or $wgSidebarCacheExpiry, these settings will no longer function for any skin utilizing this sidebar.