User:Hoggwild5/ExtraSidebar

From MediaWiki.org

Jump to: navigation, search

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.

[edit] Code

       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;
        }

[edit] Notes

  • 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.
Personal tools