Hilfe:MediaWiki Transcludes

Aus LaborWiki
Version vom 9. Oktober 2008, 22:33 Uhr von Thomas (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

Transkludieren bedeutet, den Inhalt einer Seite in eine andere Seite einzubinden. Die einbindende Seite wird dann so angezeigt, als würde der Inhalt der eingebundenen Seite die Einbindung zur Abrufzeit ersetzen.

Eine Seite, die zur Einbindung gedacht ist, heisst Transclude.

Transcludes werden gelegentlich auch Vorlagen oder Templates genannt. Dieser Begriff ist jedoch irreführend, da er leicht mit Vorlagen zum Erstellen neuer Seiten verwechselt werden kann. Leider heisst der Standard-Namespace für Transcludes auch Vorlage bzw. Template.

Use cases für Transcludes

Die offensichtlichsten use cases, sortiert von einfach nach kompliziert:

  • Banner: ein Transclude kann ein vollständiges Banner darstellen, dass durch Transklusion auf einer Seite erscheint
  • Kategorisierung: ein Transclude kann genutzt werden, um alle transkludierenden Seiten zu kategorisieren (meist in Kombination, etwa mit einem Banner)
  • Tabellen: mittels Transcludes einzelne Zellen oder ganze Zeilen in eine Tabelle einfügen

Der Anwendungsfälle gibt es noch viel viel mehr. Das geht weiter mit kleinen "Makros" und endet mit Quoting der MediaWiki-Syntax.

Grundsyntax für das Transkludieren

Steht etwa

{{Namespace:Seite}}

auf einer Seite, so erscheint auf ihr an Stelle dieses Konstrukts der Inhalt von Namespace:Seite. Bei Seiten aus dem Namespace Vorlage (bzw. Template) muss kein Namespace angegeben werden:

{{Vorlage1}}

Seiten aus dem Haupt-Namespace werden mit {{:Termine} transkludiert.

Vermeidung der Interpretation

Will man erreichen, dass {{ oder }} direkt angezeigt werden, geht dies mit dem nowiki-Konstrukt

<nowiki>{{</nowiki>

oder mit den HTML-Entitäten &#123; für { und &#125; für }.

gesteuerte Transklusion

Ein Transclude ist seine eigene Seite im Wiki (die wie oben gesehen auch nicht unbedingt im Vorlage Namespace liegen muss), und man muss unterscheiden zwischen dieser Seite und dem Ergebnis einer Transklusion.

Mit den folgenden beiden Tags kann man steuern, welche Inhalte in welcher Situation aktiv bzw. sichtbar werden:

  • Mit <noinclude>...</noinclude> kann man Passagen auszeichnen, die nur beim Anschauen der Seite direkt erscheinen.
  • Mit <includeonly>...</includeonly> zeichnet man Dinge aus, die nur unter Transklusion wirksam sind.
  • In <onlyinclude>...</onlyinclude> eingeschlossene Dinge sind, so vorhanden, die einzigen Inhalte, die eine Transklusion überleben.

Mit diesen Konstrukten lassen sich etwa Seiten, die ein Transclude benutzen, sowie das Transclude seiber unterschiedlichen Kategorien hinzufügen.

Parameter

Transcludes können Parameter haben, sowohl benannte wie auch anonyme (durchnummerierte). Die Grundsyntax für eine Transklusion mit Parametern ist

{{Grundkasten|param=Inhalt}}

für benannte Parameter und

{{Vorlage2|Inhalt}}

für unbenannte Parameter.

Das Transclude verwendet die "übergebenen" Parameter mit {{{param}}} bzw. {{{1}}}.

Laut offizieller Dokumentation unterscheidet sich die Behandlung benannter und unbenannter Parameter nur im Whitespace.

Meine Erfahrungen lauten anders. HTML-Konstrukte in Parametern scheinen besser zu überleben bei benannten Parametern. Nicht näher untersucht... --Thomas 21:42, 6. Aug. 2008 (CEST)

Quoting in übergebenen Inhalten

Manche Zeichen, die für die Transklusions-Syntax selbst verwendet werden, müssen in Parametern geschützt werden. Hierfür gibt es mehrere Möglichkeiten.

Handelt es sich bei dem Zeichen um eines, dass nicht mehr vom MediaWiki-Parser interpretiert werden soll und beim Besucher der Seite angezeigt werden soll, kann man das Zeichen durch eine entsprechende HTML-Entität ersetzen, wie etwa &#x3D; für "=". Befrage deine Ascii-Tabelle (die reicht meistens)!

Wird ein "=" in einem unbenannten Parameter benötigt, behandelt man ihn einfach wie einen benannten Parameter mit der Nummer als Namen:

{{Vorlage2|1=<a href="...">Linktext</a>}}

In allen anderen Fällen sollte es mit einem Quoting-Transclude funktionieren, als Beispiel sei hier [1] genannt.

Nutzung übergebener Inhalte in Parameter

Ein Transclude enthält einfach an der gewünschten Stelle

{{{param}}}

(für benannte Parameter) bzw.

{{{1}}}

(für unbenannte). In beiden Fällen ist die Angabe eines Default-Wertes möglich:

{{{param|default}}}

Mit Default-Werten ist es leicht möglich bereits vorhandene Vorlagen, die schon benutzt werden, nachträglich "aufzubohren".

Wer transkludiert hier wen?

Über den Spezial-Link Links auf diese Seite links in der Side Bar gelangt man zu einer Liste nicht nur aller Verlinkungen, sondern auch Transkludierungen der aktuellen Seite. Diese sind mit dem Stichwort Vorlageneinbindung versehen.

Um zu erfahren, welche Seiten von einer Seite transkludiert werden, bearbeitet man diese bzw. lässt sich deren Quelltext anzeigen. Darunter findet sich eine solche Liste aller direkt oder indirekt transkludierten Seiten.

mit Transcludes Tabellen basteln

Sollte man mal eine Tabellenfamilie mit gleichem Stil (CSS) aber variabler Struktur benötigen, kann man sich dies durch Nutzung von Transcludes für Zellen oder Zeilen sowie den gesamten Tabellenstil zusammenbasteln.

Mit einem einzelnen Transclude ist dies auch möglich (siehe [2]), benötigt aber die Extension ParserFunctions.

Weitere Infos dazu findet man hier.

best practises

Ziele, die man mit Transcludes erreichen will, können sein: Konsistenzmaximierung, Redundanzminimierung, Workflowoptimierung und Codeoptimierung ([3]). Transcludes sollten nur mit diesen Zielen und im Allgemeinen sehr sparsam verwendet werden. Es sollte geprüft werden, ob sich die versprochenen Gewinne auch im täglichen Gebrauch einstellen und frühzeitig nachkorrigiert werden. Ist die Gruppe der Wiki-Nutzer in der Lage und Willens, sich über die zu nutzende Infrastruktur zu informieren? Ein Zoo an Transcludes kann schnell zu einer Nutzerhürde werden.

Ein Transclude, dass auf vielen Seiten verwendet wird, kann kaum noch ohne Weiteres in seiner Funktion verändert werden. Das Ergebnis sind verwaiste Parallelstrukturen und verwirrte Bearbeiter, die etwa nicht wissen welcher Banner aktuell ist. Technisches Ausprobieren und Nutzerevaluation in der Gruppe geschehen am Besten zunächst auf Unterseiten von Benutzerseiten; ist man mit dem Ergebnis zufrieden, migriert man das Transclude in den Vorlage Namespace.

Transcludes lösen und stellen sehr oft technische Probleme, und ihre Bearbeitung kann SEHR komplex werden (wer heute gut gefrühstückt hat, darf mal hier schauen). Daher hier zwei Tipps um Übersicht zu bewahren:

  • meist will man die Dokumentation eines Transcludes (ohne Doku sind sie fast wertlos!) in der Nähe des Transcludes selbst "aufbewahren". Mit einem Transclude-Trick (siehe etwa hier) kann man geschickt Implementierung und Dokumentation voneinander trennen, ohne dass man sich verloren fühlt.
    In unserem Wiki erfüllt Vorlage:Transclude-Doku diesen Zweck.
  • Nutze HTML-Kommentare, um Einrückungen zu simulieren und Zeilenumbrüche im Code zu ermöglichen, die vom MediaWiki ignoriert werden! Etwa so:
<!-- (erlaubt eine gleiche Basis-Einrückung)
 -->{{{param1|Extrem langer Default-Inhalt für einen Parameter,<!--
    -->der der Lesbarkeit im Quelltext halber umbrochen wird}}}<!--
 -->{{{param2|Zweiter Parameter, der direkt anschließt ohne newline dazwischen}}}

Variablen

Mit der gleichen Syntax wie beim Transcluden kann man auch eingebaute Funktionen des MediaWiki aufrufen und deren Ausgabe einbinden. So ist es z.B. möglich, eine Seite auf ihre eigene Diskussionsseite linken zu lassen, ohne den Namen der Seite benutzen zu müssen.

Scheinbar bestehen diese Variablen stets aus Grossbuchstaben und dem Unterstrich, woran man sie von "echten" Transcludes unterscheiden können sollte.

Das ist nicht mehr richtig, siehe z.B. {{fullurl:Seitenname}}. Vermutlich kann man dies aber dennoch gut auseinanderhalten anhand der Verwendung von : statt | als Trennzeichen für Parameter.

Wenn nun Seite A eine Variable benutzt. und von einer Seite B transkludiert wird, wird die Variable im Kontext der Seite B ausgewertet. Seite B würde also im obigen Beispiel die eigene Diskussionsseite (und nicht die von Seite A) verlinken.

externe Links


[?]Hilfe-Themen (Übersicht)

MediaWiki EinführungKategorienNamespacesTranscludes

UnterseitenBenutzerDiskussionsseiten

LaborWiki Helferlein und Banner