Difference between revisions of "MediaWikiDoc:Code"

From HypertWiki
Jump to navigation Jump to search
(moved to htyp)
 
(2 intermediate revisions by the same user not shown)
Line 1: Line 1:
[[Techniques]]: [[MediaWiki]]: [[MediaWikiDoc:Code|Code]]
{{to htyp}}
==Where the Nav Links Come From==
In [[MediaWikiDoc:SkinTemplate.php|SkinTemplate.php]], function outputPage seems to be building a massive hierarchical array ($tpl) of all the various components needed to display a wiki page, which is then converted to HTML (etc.) by the code in the applicable (skin name).php file.
 
Significant lines for generating the navigation links would appear to be these:
<pre>
$tpl->set( 'navigation_urls', $this->buildNavigationUrls() );
$tpl->set( 'nav_urls', $this->buildNavUrls() );
</pre>
Both of these return arrays which are added to the $tpl array. Function buildNavigationUrls() uses $wgNavigationLinks as a source for its list of links. Function buildNavUrls(), however, has a hard-coded list; it's not clear what the relationship is between those two.
 
$wgNavigationLinks is defined in [[MediaWikiDoc:DefaultSettings.php|DefaultSettings.php]], and presumably can be redefined in [[MediaWikiDoc:LocalSettings.php|LocalSettings.php]] (if, say, you wanted to add more lines to the "navigation" linkbox):
<pre>
$wgNavigationLinks = array (
array( 'text'=>'mainpage', 'href'=>'mainpage' ),
array( 'text'=>'portal', 'href'=>'portal-url' ),
array( 'text'=>'currentevents', 'href'=>'currentevents-url' ),
array( 'text'=>'recentchanges', 'href'=>'recentchanges-url' ),
array( 'text'=>'randompage', 'href'=>'randompage-url' ),
array( 'text'=>'help', 'href'=>'helppage' ),
array( 'text'=>'sitesupport', 'href'=>'sitesupport-url' ),
);
</pre>
Each of the strings (except "text" and "href") refers to a value which is settable via the wiki, e.g. the value of "mainpage" can be set by editing the contents of [[MediaWiki:mainpage]].
 
==To Add a New Nav Link Box==
Unfortunately, it looks like this has to be done separately for each skin (I guess the thinking is that a given skin might want to give each box special treatment, though it would be nice if there were a way to set up default handling for all boxes). Looking just at MonoBook.php, this code produces the box normally labeled "navigation":
<pre>
  <h5><?php $this->msg('navigation') ?></h5>
  <div class="pBody">
    <ul>
      <?php foreach($this->data['navigation_urls'] as $navlink) { ?>
      <li id="<?php echo htmlspecialchars($navlink['id'])
        ?>"><a href="<?php echo htmlspecialchars($navlink['href']) ?>"><?php
        echo htmlspecialchars($navlink['text']) ?></a></li><?php } ?>
    </ul>
  </div>
</pre>
Immediately after that, I added the following:
<pre>
<!-- 2005-06-16 Woozle customizations -->
  <h5><?php $this->msg('backlinks') ?></h5>
  <div class="pBody">
    <ul>
      <?php foreach($this->data['backlink_urls'] as $navlink) { ?>
      <li id="<?php echo htmlspecialchars($navlink['id'])
        ?>"><a href="<?php echo htmlspecialchars($navlink['href']) ?>"><?php
        echo htmlspecialchars($navlink['text']) ?></a></li><?php } ?>
    </ul>
  </div>
<!-- end custom code -->
</pre>
Reloading the page after this change produced no immediate results, but some time later a cache must have expired and some error messages appeared under the "navigation" box. After that, I defined [[MediaWiki:backlinks]] to contain "vbz links", and a box labeled "vbz links" faithfully appeared (with an error message in it).
 
Next, I added the following code to LocalSettings.php (near the end, just before the "?>"):
<pre>
## 2005-06-16 Woozle customizations: define "backlinks" and "backlink_urls" for custom skin code:
$wgMainsiteLinks = array (
array( 'text'=>'sitelink1','href'=>'sitelink1-url' ),
array( 'text'=>'sitelink2','href'=>'sitelink2-url' ),
array( 'text'=>'sitelink3','href'=>'sitelink3-url' ),
array( 'text'=>'sitelink4','href'=>'sitelink4-url' ),
array( 'text'=>'sitelink5','href'=>'sitelink5-url' ),
array( 'text'=>'sitelink6','href'=>'sitelink6-url' ),
array( 'text'=>'sitelink7','href'=>'sitelink7-url' ),
array( 'text'=>'sitelink8','href'=>'sitelink8-url' ),
array( 'text'=>'sitelink9','href'=>'sitelink9-url' ),
);
## end Woozle customization
</pre>
(Note: I discovered by accident that either "_url" or "-url" will work as a prefix, but they're not equivalent; if you change the value and the control bar doesn't appear to change, make sure you're not confusing them with each other.)
 
Then I modified SkinTemplate.php (the top and bottom lines were there already):
<pre>
$tpl->set( 'navigation_urls', $this->buildNavigationUrls() );
$tpl->set( 'mainsite_urls', $this->buildMainsiteUrls() ); // 2005-06-16 Woozle customization
$tpl->set( 'nav_urls', $this->buildNavUrls() );
</pre>
...and finally MonoBook.php (inserted area as indicated by comments):
<pre>
  <h5><?php $this->msg('navigation') ?></h5>
  <div class="pBody">
    <ul>
      <?php foreach($this->data['navigation_urls'] as $navlink) { ?>
      <li id="<?php echo htmlspecialchars($navlink['id'])
        ?>"><a href="<?php echo htmlspecialchars($navlink['href']) ?>"><?php
        echo htmlspecialchars($navlink['text']) ?></a></li><?php } ?>
    </ul>
  </div>
<!-- 2005-06-16 Woozle customizations -->
  <h5><?php $this->msg('backlinks') ?></h5>
  <div class="pBody">
    <ul>
      <?php foreach($this->data['mainsite_urls'] as $navlink) { ?>
      <li id="<?php echo htmlspecialchars($navlink['id'])
        ?>"><a href="<?php echo htmlspecialchars($navlink['href']) ?>"><?php
        echo htmlspecialchars($navlink['text']) ?></a></li><?php } ?>
    </ul>
  </div>
<!-- end custom code -->
</pre>
I think that's all the code mods I made. Once those are done, all that's left is to modify [[MediaWiki:Sitelink1]], [[MediaWiki:Sitelink1-url]], and so on. The Catch: I haven't figured out how to make a line disappear without removing it from the custom code. There were comments in the original code which made me think that setting the value to "=" would work, but it doesn't seem to; further experimentation is currently underway.
 
==How A Page is Built==
''(From [[User:Woozle|Woozle]] 21:59, 15 Jun 2005 (EDT).)''
*Everything obviously starts with [[MediaWikiDoc:index.php|index.php]]
*For the purpose of displaying a page (not saving changes or doing anything else), this calls $wgArticle->view(), in [[MediaWikiDoc:Article.php|Article.php]] (line 699)
*$wgArticle->view() appears to be able to provide a few other formats besides the regular view (including difference engine and displaying redirections as subtitles), but I'm ignoring that for now
*$wgOut seems to be the object which accumulates text to be output. It is created in [[MediaWikiDoc:Setup.php|Setup.php]]:
**$wgOut = new OutputPage();
*OutputPage() is defined in [[MediaWikiDoc:OutputPage.php|OutputPage.php]]
*After being created, $wgOut accumulates output via various class methods:
**$wgOut->[[MediaWikiDoc:OutputPage.php#function addWikiText|addWikiText]](...)
**$wgOut->[[MediaWikiDoc:OutputPage.php#function addHTML|addHTML]](...)
**$wgOut->[[MediaWikiDoc:OutputPage.php#function addPrimaryWikiText|addPrimaryWikiText]]() # Display content and save to parser cache
**$wgOut->[[MediaWikiDoc:OutputPage.php#function addWikiText|addWikiText]]() # Display content, don't attempt to save to parser cache
**$wgOut->[[MediaWikiDoc:OutputPage.php#function setPageTitle|setPageTitle]]()
**$wgOut->[[MediaWikiDoc:OutputPage.php#function transformBuffer|transformBuffer]](); # Put link titles into the link cache
**$wgOut->[[MediaWikiDoc:OutputPage.php#function addMetaTags|addMetaTags]](); # Add link titles as META keywords
*...and then it does these two lines:
**$this->viewUpdates(); ''(found at line 1926 -- doesn't do much)''
**wfProfileOut( $fname );
*It's not clear whether the navbar has already been pulled in by the time we hit viewUpdates -- possibly transformBuffer does it? The comment makes it sound like that, but the name "transformBuffer" in that case is not very descriptive. The code in there should probably be examined.

Latest revision as of 16:11, 7 December 2005

VYPLGO2.64pxh.png This page has been moved to HTYP, the HyperTwin Yellow Pages.