Mediawiki/Skin

Aus Mikiwiki
Wechseln zu: Navigation, Suche

Die Skin (engl.; dt. "Haut") bestimmt das Layout von Mediawiki zum grössten teil, wobei als Standardskin die Monobook-Skin eingestellt ist.

Eine Skin ist eine PHP-Klasse, die alle nötigen Funktionen zum Erzeugen von HTML-Code für jede Wikiseite enthält. Jede verfügbare Skin ist eine verschiedene Klasse, welche die "Skin"-Klasse erbt und jede notwendige Funktion zum Erstellen der Seite enthält. Die Skin-Hauptklasse und andere damit zusammenhängende Klassen finden sich im "includes"-Verzeichnis. Die Namen dieser Klassen sind:

  • Skin.php
  • SkinTemplate.php, welche die Skin-Klasse erbt.

Zum Ändern des Monobook-Layouts muss die Datei "monobook.php" im Verzeichnis "skin" geändert werden. Um den Seiteninhalt zu ändern, muss die Datei "Skin.php" geändert werden.

skins/MonoBook.php

Der erste Teil der Datei enthält den PHP-Code, der die "MonoBook"-Skin-Klasse durch Erweiterung der bestehenden Klassen "SkinTemplate" und "QuickTemplate" erzeugt wird. Die Funktion "execute" unter der "MonoBookTemplate"-Klasse beschreibt dabei das Layout und die Inhalte der Skin.

class MonoBookTemplate extends QuickTemplate {
        /**
         * Template filter callback for MonoBook skin.
         * Takes an associative array of data set from a SkinTemplate-based
         * class, and a wrapper for MediaWiki's localization database, and
         * outputs a formatted page.
         *
         * @access private
         */
        function execute() {
                global $wgUser;
                $skin = $wgUser->getSkin();

                // Suppress warnings to prevent notices about missing indexes in $this->data
                wfSuppressWarnings();

Anschliessend an diesen Codeblock bis zum Dateiende folgt ein XHTML-Codeabschnitt. Die XHTML-Seitenvorlage besteht aus einer Anzahl von div-Abschnitten, die jeder entweder durch das "id"- oder "class"-Attribut im "<div>"-Tag oder durch beide identifiziert werden. Das Stylesheet bestimmt danach, wie jeder div-Block angezeigt wird und an welcher Stelle auf der Seite er erscheint.

<div class="portlet" id="p-personal">
  <h5><?php $this->msg('personaltools') ?></h5>
  <div class="pBody">
    <ul>
    <?php foreach($this->data['personal_urls'] as $key => $item) {
      ?><li id="pt-<?php echo Sanitizer::escapeId($key) ?>"<?php
        if ($item['active']) { ?> class="active" <?php } ?>><a href="<?php 
          echo htmlspecialchars($item['href']) ?>"<?php
          echo $skin->tooltipAndAccesskey('pt-'.$key) ?><?php
          if(!empty($item['class'])) { ?> class="<?php
            echo htmlspecialchars($item['class']) ?>"<?php } ?>><?php
            echo htmlspecialchars($item['text']) ?></a></li>
    <?php } ?>
    </ul>
  </div>
</div>
<div class="portlet" id="p-logo">
  <a style="background-image: url(<?php $this->text('logopath') ?>);" <?php
    ?>href="<?php echo htmlspecialchars($this->data['nav_urls']['mainpage']['href'])?>"
    <?php echo $skin->tooltipAndAccesskey('n-mainpage') ?>></a>
</div>

In obigem Codeausschnitt gibt es einen Abschnitt mit der ID "p-personal" und der Klasse "portlet". Diese "<div>"-Tags arbeiten als individuelle Blöcke und bilden zusammen das Layout der Seite. Im zur Skin "MonoBook" gehörenden Verzeichnis "skins/monobook" findet sich die CSS-Datei "main.css", welche die Stilregeln für die Seite bestimmt. Die Klasse "portlet" bestimmt darin den Grundstil der div-Blöcke, die nicht Teile des Hauptbereichs sind.

Der Hauptseitenabschnitt ist ein Block mit der ID "column-content", der den Block mit der ID "content" enthält. Letzterer enthält die Hauptinhaltsüberschrift mit der Klasse "firstHeading" und dem Block "bodyContent", der folgendes enthält:

  • eine Unterüberschrift mit dem Namen der Wikiseite
  • der Block "contentSub"
  • der aktuelle Seiteninhalt
  • der Block "visualClear"

Einige wichtige Identifier in der Darei "skins/monobook/main.css" sind die folgenden.

  • column-content bestimmt den alles enthaltenden Raum innerhalb des Rahemens, in dem der Inhalt erscheint.
  • content ist der Kasten mit weissem Hintergrund und dünnem Rand, der den Inhalt der Hauptseite enthält.
  • firstHeading ist die Klasse des "heading"-Tags am Kopf jeder Seite,
  • bodyContent enthält den tatsächlichen Inhalt der Hauptseite innerhalb des "content"-Kastens.
  • contentSub bestimmt den Textstil, der den Namen des Wikis unterhalb der Hauptüberschrift aber über dem body-Tect angibt.

Der Abschnitt "portlets" ist ein Block innerhalb der ID "column-one", der Portlets mit folgenden IDs enthält.

  • p-cactions ist die ID für die Liste von Reitern über dem Hauptinhalt (article, discussion, edit, history, protect, delete, move, watch).
  • p-personal ist die ID für die Liste von Links, welche die Login- oder Logoutseite am oberen Rand der Seite enthält (Admin, my talk, my preferences, my watchlist, my contributions, log out).
  • p-logo is die ID für den Block, der das Logo auf der linken oberen Seite enthält.
  • p-nav ist die ID für den Block, der die Navigationslinks auf der linken Seite enthält (navigation: Main Page, Community portal, Current evenbts, Recent changes, Random page, Help, Donations).
  • p-search ist der Block, der die Schaltflächen für die Suche enthält (search: Go, Search).
  • p-tb ist der Block, der die Werkzeuglinks enthält (toolbox: What links here, Related changes, Upload file, Special pages, Printable version, Permanent link).

Am unteren Rand der Seite gibt es einen Block mit der ID "footer" der folgende beiden Blöcke enthält.

  • f-poweredbyico
  • f-list ist die Liste für alle zusätzlichen Links ausser dem Copyright un dem "powered-by"-Symbol.

Die Klasse "portlet.css" ist der von allen div-Blöcken um den Hauptinhalt verwendete Stil.