allwiki首页  
天下维客 你可以修改的网络知识库
首页最近更改优秀条目专题展示电脑科技词典软件学习网络知识电脑安全明星时尚天下百科
 

MediaWiki修改:页尾导航条

天下维客,你可以修改的网络知识库

Jump to: navigation, search

本文取自元维基,欢迎共同翻译、整理与大家共享,促进中文wiki发展^_^


This is a fairly ugly (imho) solution to a problem I had when working on my personal wiki. Even though it's ugly, it happens to work perfectly for me. I hope it'll help other people with the same problems I had.

Situation
I have a wiki in which I have created about eighty namespaces in order to further categorize my information (yeah, I'm anal). I created a fairly rigorous and uniform system of tables for navigating the wiki. They hang out in templates and are included from each file.
Problems
1. I like having printable versions of my wiki. My printable documents (consisting of {{Namespace:Document 1}} {{Namespace:Document 2}}-type stuff end up including the templates that the original documents call, of course, thus providing me with several dozen copies of the same navigation bar. For someone who has to print out several dozen documents every couple weeks in order to put his mind at ease, this waste of ink and paper is horrible.
2. I hate starting a new document and having to remember to type {{All Namespaces Navigation Bar}}{{This Namespace Navigation Bar}}{{Corresponding and Cross-indexed Articles Navigation Bar}} et cetera just to get the document navigable, let alone remembering to spell everything properly, put terms in the proper order, et cetera. It kills productivity.
C. Did I mention that I have a great deal of difficulty with creating complex patterns and then having to remember them?
Solution
What I have done here, which is an ugly hack by someone who is a complete n00b with php. Although I used this for navigation bars, there's no reason this couldn't be done with any other template. Hopefully I don't look like an idiot by posting something that's easily mimicked through some less complex/"factory" option. If I am, sorry for wasting your time.

If not, then I hope that this will help people who are just as lazy and inexperienced as I am. It's greatly boosted my productivity as well as the attractiveness of my site.

目录

Installing the Hack

This is simple -- first, you create the information that you want to be reproduced on every page. Second, you edit the appropriate skin's .php and insert some code at the appropriate place.

Step 1: Create Reproducible Data

First, create the information you want in each page.

What I did was the following (just as an example):

Template:Table Header -- this begins a table.

{| class="toccolours" style="margin: 0 2em 0 2em;"

Template:Root Navigation Bar -- this is text that appears on every page.

|-
| style="background:#000000" align="center" width="550px"| <b><font color="white">Namespaces</font></b> 
|-
| align="center" style="font-size: 75%" | [[Namespace_1:Main Page|Namespace 1]] | [[Namespace_2:Main Page|Namespace 2]] | [[Namespace_3:Main Page|Namespace 3]] 

Template:Namespace_1 Navigation Bar -- this is text that appears only on the appropriate namespace.

|-
| style="background:#000000" align="center" width="550px"| <b><font color="white">Namespace_1</font></b> 
|-
| align="center" style="font-size: 75%" | [[Namespace_1:Main Page|Main Page]]  | [[Namespace_1:Another Page|Another Page]] | [[Namespace_1:A Third Page|A Third Page]]

Template:Table Footer -- this ends a table.

|-
|}

If you're wondering why I have "Table Header" and "Table Footer," it's so that the end result of this creates one large table instead of two tables joined together, which imho looks ugly. You could prepend the text from Table Header to the Root Navigation Bar and append the text from Table Footer to every namespace's navigation bar, but if you go to three or more levels of organization (which I'm doing), then you'll have to change everything. Similar story about if you want to change the style of your table, et cetera et cetera. Anyone reading this is likely to be more advanced in template-fu than I am, though, so... yeah. If you change a little or a lot, I doubt it will break anything.

Step 2: Edit skins/MonoBook.php

FIND:

<!-- start content -->
<?php $this->html('bodytext') ?>

AFTER THAT, INSERT:

                <?php
                global  $wgParser, $wgUser, $wgTitle;
                $parserOptions = ParserOptions::newFromUser( $wgUser );
                $parser = & new Parser();
                $inputText="<center><br><br>{{Table Header}}{{Root Navigation Bar}}
                {{{{NAMESPACE}} Navigation Bar}}
                {{Table Footer}}";
                $output= & $parser->parse($inputText,$wgTitle,$parserOptions);
                echo $output->getText();
                ?>

That snippet is a revised snippet stolen from the "Extension FAQ." The Parser stuff is needed because if you just put in the {{Table Header}} stuff, then you'll be staring in irritation at a wiki page with curly bracketed text at the bottom. Which doesn't help much. This calls the Parser (properly, I hope) which will wikify any stuff put in the $inputText variable.

Again, I should clarify that I have absolutely zero knowledge of php or any other programming language. I just hacked this together to solve a problem I had and then realized that other people might have the same problem. There might be a much cleaner way to do this -- there might be a lot of code here that is completely unneeded.

Step 3: Test

Go to any page on your wiki, and you should see the wiki at least trying to insert the template. If it b0rks your wiki, my name is George and I live on Pennsylvania Avenue in DC. Come visit, I dare you.

I really hope this helps someone.

Notes

There are other places to put this, of course. The location I have given is right beneath the article's text, in the right segment of the wiki (at least with MonoBook). I also tried putting it at the very bottom with the copyright notices and such, but it looked like hell. I'd imagine most people would rather arrive at an article and read text instead of a navigation menu, which is why I didn't provide interesting locations at the top of the article text. Of course, if that's your thing, I suppose that moving the code up one line when you insert it would accomplish that goal.

Another neat idea I pondered briefly would be using this to create intelligent menus in the left section (ie, with the Toolbox and Navigation things). However, since my menus are very large, this was never an option. It also seems a bit unfriendly to me.

I think that covers it.


原文参见: Footer Navigation Bar

Personal tools
工具
金银币拍卖 金币拍卖预展  金银币网店 熊猫金银币 生肖金银币