Benutzer:Herzi Pinki/Vorlagentutorial
Überblick: Hilfe:Bausteine
Diese Hilfeseite gibt einen Überblick, wie vorgefertigte Textstücke in einer Seite angezeigt werden können.
Vorlagen – Technische Realisierung
Enzyklopädische Anwendungen (Auswahl)
Weitere Informationen
Einleitung
Vorteile
- einheitliche Formatierung (auf Kosten der individuellen Vielfalt), mit zentraler Änderungs- / Anpassungsmöglichkeit
- strukturierte Datenerfassung (z.B. Denkmallisten)
- Syntax- und Plausibilitätsprüfungen
- Zentrale Stellen um externe Urls zu verwalten (Hilfe:Datenbanklinks) (und einheitlich zu formatieren)
- Vorlagen sind Abstraktionen
Nachteile
- Syntax grauslich (alles was nicht als Vorlagenteil geparst werden kann, bleibt als Ergebnis der Vorlageneinbindung übrig)
- rudimentäre Syntaxprüfung
- Umbrüche tricky
- Parameterfehler sind nicht isoliert (Code Injection, unpaarige Klammern in Parametern stören die Vorlage)
- keine benutzerdefinierten Variablen
- limitierte Zeichenkettenbearbeitung
- nur sehr limitierte Schleifenkonstrukte
- Änderbarkeit und Wartbarkeit
Hallo Welt
Abspeichern unter Hallo Welt
Hallo Welt
Einbindung
{{Hallo Welt}} <!-- Vorlage im Vorlagennamensraum Vorlage: --> {{Benutzer:Herzi Pinki/Vorlage:Hallo Welt}} <!-- Vorlage im BNR -->
ergibt: Hallo Welt
Vorlagen - syntaktische Elemente
Typ | Hilfe | Beispiel |
---|---|---|
Mediawiki Funktionen | Hilfe:Variablen#Funktionen | {{PAGENAME}}, {{uc:text}}, {{#invoke:Modul|Funktion|Parameterliste}} |
ParserFunctions (mit Erweiterung ParserFunctions) | Hilfe:Vorlagenprogrammierung#Grundfunktionen | {{#if: …}} |
andere Erweiterung | siehe Beschreibung der Erweiterung (extension) | jede Erweiterung kann ev. weitere Funktionen definieren |
Vorlagenaufruf | {{<Vorlage>|par|…}} | |
Parameter | {{{1|}}}, {{{name|}}} | |
Wiki & html-code |
Vorlagenparameter
- Positionsparameter (unbenannte Parameter)
- benannte Parameter
- vordefinierte Variable
beim Aufruf
{{Hallo Welt|meine kleine|2=meine ganz ganz kleine|grund=die Welt ist fraktal|leer=}}
in der Vorlage
{{{1}}} <!-- meine kleine --> {{{2}}} <!-- meine ganz ganz kleine --> {{{grund}}} <!-- die Welt ist fraktal --> {{{grundlos}}} <!-- undefiniert --> {{{grundlos|}}} <!-- leer --> {{{leer}}} <!-- leer --> {{{leer|}}} <!-- leer --> {{PAGENAME}}
D.h. im Vorlagencode sollte immer
{{{1|}}} {{{Parameter|}}}
geschrieben werden. Zu lesen als Wert von Parameter 1 oder ('|') nix.
Prüfung auf Existenz
Ein Parameter kann 3 Werte haben:
- undefiniert: {{{grundlos}}}
- leer (=leere Zeichenkette): {{{leer}}}
- nicht leere Zeichenkette: {{{grund}}}
{{#if: {{{1|}}}| … }} {{#ifeq: {{{leer|}}}x|x| … }} <!-- Trick -->
Parameterauswertung
- ist Makro-Mechanismus (Zeichenkettenersetzung)
- auch identische Code-Segmente tragen zur Länge der Vorlage bei (es gibt Limits)
- bei komplizierten Vorlagen kann man das über ein Interface-Implementierungs-Pattern trennen
- dabei macht das Interface die mehrfach notwendige Parameterauswertung einmal und gibt Zwischenergebnisse an die Implementierung weiter.
Standardvorlagengerüst
(für umfangreiche Vorlagen)
<onlyinclude> … </onlyinclude> {{Dokumentation}}
Ein erstes reales Beispiel: Datenbankvorlage
siehe Hilfe:Datenbanklinks. z.B. {{Architektur-noe}}
<includeonly>[http://www.architektur-noe.at/be/detailansicht.php?architekturobjekt_id={{{1}}} Eintrag zu „{{#if:{{{2|}}}|{{{2}}}|{{PAGENAME}} }}“] auf der Seite von ''architekturlandschaft.niederösterreich''</includeonly><noinclude> {{Dokumentation}} [[Kategorie:Vorlage:Datenbanklink|Architektur-noe]] [[Kategorie:Vorlage:Österreich|Architektur-noe]] </noinclude>
verwendet in z.B. Rollettmuseum:
* {{architektur-noe|447|Rollettmuseum}}
- Eintrag zu „Rollettmuseum“ auf der Seite von architekturlandschaft.niederösterreich
Umbrüche in Vorlagen
- meta:Help:Newlines and spaces
- kein Umbruch vor und nach Tabellenzelltrennern, erzeugt sonst Leerzeilen
|style="…" | <zelleninhalt>
- innerhalb von wikilinks dürfen keine Umbrüche stehen (auch Bildeinbindungen)
- unbenannte Positionsparameter werden nicht getrim(), benannte schon
- vor
}}{{
scheint ein Umbruch folgenlos (d.h. schließende Vorlagenklammer in der nächsten Zeile, nächste Vorlage direkt anschließend) - vor und nach einem Parametertrenner
|
scheint ein Umbruch folgenlos (dies gilt nicht für die ganz ähnliche Verwendung bei Bildern!) - alles was nicht Vorlagencode ist, bleibt expandierter Code. So führen Leerzeichen am Beginn einer von einer Vorlage generierten Zeile zu Formatierung als pre-formatierter Text, * zu Bullets, : zu Einrückungen und ; zu dd-Definitionen.
- Umbrüche vor und nach dem Vorlagencode müssen unbedingt vermieden werden, da sie Leerzeilen im Artikel erzeugen. Besonders unhübsch am Artikelanfang.
<onlyinclude> Hallo Welt</onlyinclude>
- und nicht
<onlyinclude> Hallo Welt </onlyinclude>
ENs aus Vorlagen
<ref>
geht in Vorlagen nicht. Stattdessen ist {{#tag:ref|…
zu verwenden:
{{#tag:ref|{{BDA DenkmallisteRef| {{{Region-ISO|}}} | Jahr ={{padleft:|4|{{{denkmalgeschützt bis|}}}}} }} |name="BDAref{{padleft:|4|{{{denkmalgeschützt bis|}}}}}"}}
Identische Mehrfacheinträge werden vermieden, wenn alle identischen ENs den gleichen Namen bekommen.
Aufruf von Lua
(um Lua geht es hier nicht)
Aufruf der Funktion getPlain() aus dem Modul Modul:WLink:
{{#invoke: WLink |getPlain |1={{{Name|}}}{{#if: {{{Adresse|}}} |, {{{Adresse}}} |{{#if: {{{Katastralgemeinde|}}} |, {{{Katastralgemeinde}}} }} }} }}
z.B.:
{{#invoke: WLink |getPlain |In [[Pottenstein (Niederösterreich)|Pottenstein]] }}
ergibt: "In Pottenstein"
und
{{#invoke:AdressenSort|convert|1=Bergstraße 5}}
ergibt: "Bergstrasse 00005" (für Sortierung der Adressen)
Einbindung von Wikidata
(um Wikidata geht es hier nicht)
{{wikidata|P36}} von {{wikidata|Q40}}: {{#property:P36|from=Q40}}
Hauptstadt (P36) von Österreich (Q40): Wien
Metadaten(spalte)
|class="nomobile" class="metadata" style="background:#ddd;"
für versteckte Metadaten, muss über die Einstellungen aktiviert werden, ist sonst nicht sichtbar.
Die beiden class-Angaben sollten getrennt geschrieben werden, da der mobile Parser mit class="nomobile metadata"
nicht zurechtgekommen ist.
Automatismen in Infoboxen
- Defaultwerte, einheitliche Formatierungen
{{#if: {{{name|}}}|{{{name}}}|{{PAGENAME}}}} <!--{{{name|{{PAGENAME}}}}} funzt nicht! falls mit name= aufgerufen. --> {{FormatBevölkerungsdichte|400.6}} • {{FormatBevölkerungsdichte|40.6}} • {{FormatBevölkerungsdichte|4.6}} • {{FormatBevölkerungsdichte|0.4}} • {{FormatBevölkerungsdichte|0.04}} • {{FormatBevölkerungsdichte|0.004}} • {{FormatBevölkerungsdichte|0.0004}} • {{FormatBevölkerungsdichte|0.00004}}
401 • 41 • 4,6 • 0,4 • 0,04 • 0,004 • 0,0004 • <0,0001
- Automatische (bedingte) Kategorisierung, z.B. {{Infobox Berg}}
{{ISO Kat|Region-ISO={{{REGION-ISO|}}}|Kat-Root=Berg|Kat-Schema=in|Kat-Kontinent=ja}} {{#switch: {{#expr: floor ({{#if:{{{HÖHE|}}}|{{{HÖHE}}}| 1000000}} /1000)}} |8=[[Kategorie:Achttausender]] |7=[[Kategorie:Siebentausender]] |6=[[Kategorie:Sechstausender]] |5=[[Kategorie:Fünftausender]] |4=[[Kategorie:Viertausender]] |3=[[Kategorie:Dreitausender]] |2=[[Kategorie:Zweitausender]] |1=[[Kategorie:Eintausender]] |0=[[Kategorie:Berg unter 1000 Meter]] }}
- siehe {{ISO Kat}}
- Prüfung auf fehlende / fehlerhafte Parameter
- Wartungsrotlink: Vorlage:Höhe/Wartung, Vorlage:Infobox Berg/Wartung (Wartungsrotlink kann nicht gelöscht werden!)
{{#if:{{{BILD|}}}||<span style="display:none">[[Vorlage:Infobox Berg/Wartung/Bild fehlt|f1]]</span>}}}}
-
- Wartungskategorie: Kategorie:Wikipedia:Lagewunsch
- Wartungsweblink: in der Vorlage einen Weblink ins beliebige Nirwana zusammenstellen, dabei können interessante Parameter eingebunden werden. Diese Weblinks können mittels Spezial:Weblinksuche gefunden und bearbeitet werden.
- Direkt-Fehlermeldung:
- Koordinaten fehlen! Hilf mit.,
- 48° 0′ 0″ N, 16° 0′ 0″ Ounbenannte Parameter 1:666
<span class="error">OMG</span>
- OMG
Ein zweites reales Beispiel: (Meta)Datenvorlage
(könnte gesammelt nach WD migriert werden)
- {{Info ISO-3166-2:AT-9}}
Aufruf über {{Info ISO-3166-2}}:{{Info ISO-3166-2|code=AT-9|0}}
Österreich
{{#switch: {{lc:{{{1|}}} }} |continent = Europa <!--Administration--> |level = 1 |maxlevel= 1 |acronym = 9 |top = AT |upper = AT |admname = Wien |lemma = Wien |admtype = Bundesland |0 = Österreich |1 = Wien |2 = |map = Österreich Wien |flag = Flag of Wien.svg }}<noinclude>{{Info ISO-3166-2/Info}}</noinclude>
- {{Metadaten Einwohnerzahl AT-9}}
Aufruf über {{EWZ}}:{{EWZ|AT|907}}
31.513
Vorlagen für Tabellen(projekte)
wie sie z.B. in den Denkmallisten verwendet werden.
Komponenten
Funktion | Beispiel | optional? | Bemerkung |
---|---|---|---|
Tabellenkopf | {{Denkmalliste Österreich Tabellenkopf}} | Kopf und Zeile müssen aufeinander abgestimmt sein | |
Tabellenzeile | {{Denkmalliste Österreich Tabellenzeile}} | gemeinsame Doku | |
Tabellenfuß | {{Denkmalliste Österreich Tabellenfuß}} | optional | aus Symmetriegründen |
id | ObjektID | optional, durchgängig | eindeutige id in externer Quelle, kann mehrgliedrig sein |
interne id | optional, durchgängig | eindeutige interne id, z.B. WD id, mapping interne - externe id | |
Externe Referenz | Link auf externen DB-Anbieter; Link auf AleXXws Tool | optional | (Datenbanklink) |
id-Marker auf Commons | Template:Denkmalgeschütztes Objekt Österreich | optional | Rückverweis, externer Verweis, lokalisiert (an unterschiedliche Endusersprachen angepasst) |
Einsprung in Tabelle (Anker) | {{BDA Objekt Ref}}, #anker | optional | generell sollten für jede Tabellenzeile ein Anker wohldefiniert und dokumentiert sein. |
Legende | {{Denkmalliste Österreich Legende}} | optional | |
Dummybilder | Wikipedia image placeholders for cultural heritage monuments | übergreifend nutzbar | |
Direkter Upload | Einbindung UW in Tabellenzeile über url | optional | braucht campaign (=Konfiguration UW) |
Campaign | Campaign:wlm-at | optional | Konfiguration UW |
Kategorien auf de | nicht für einzelne Objekte (Zeilen) | ||
Commonscat | mehrstufig:
konsistente hierarchische Struktur |
notwendig, wenn Bilder eingebunden werden | |
Fehlermeldemechanismus | Fehlerliste | optional | existiert nur rudimentär |
Feedback (zum Datenprovider) | organisatorisch | optional | |
Datenquelle | {{Kulturgüterschutzliste Österreich Tabellenzeile}} (WD) {{Metadaten Einwohnerzahl AT-4}} |
optional | Wikidata, Metadatenvorlagen (EW, Fläche, …) |
Status | Wikipedia:WikiProjekt Österreichische Denkmallisten/Status | optional, botgepflegt | vorlagenbasiert |
Statusmaps | WLM Statusmaps Austria, z.B. Bearbeitungsstand Denkmale Österreichs nach Gemeinden Bilder.svg | optional, botgepflegt, bei Strukturänderungen manuell zu pflegen | vorlagenbasiert |
automatischer Objektzähler | {{Metadaten Denkmalliste Österreich}} | optional, botgepflegt | |
halbautomatisches Einfügen Bilder / Commonscat | Konfiguration in AddCommonsCatLinks/SupportedRegisters.js ♥ Dudemanfellabra |
optional | nur mit id (aktuell nur mit einer id) |
Komponentenbasierte Vorlagen
- Bei komplizierten Vorlagen lohnt sich eine Aufteilung in getrennt testbare und (mehrfach) verwendbare Untervorlagen.
- Alternativ kann eine eierlegende Wollmilchvorlage erstellt werden, von der dann die konkreten Ausprägungen heruntergestanzt werden.
- patternbasierte Vorlagenerstellung
- c/p als gelebte Praxis
- Komponenten müssen untereinander lose gekoppelt sein (Abhängigkeiten sind nur über zusätzliche Parameter in den Griff zu bekommen)
- Komponenteninterface sollte schmal sein und Komponentenfunktionalität in sich sinnvoll abgeschlossen (Kohäsion).
- Eine übergeordnete Vorlage beinhaltet das Parametermapping, Parameterprüfungen und die Assemblierung der Subkomponenten.
- Dieses Prinzip ist hierarchisch
Beispiele für gute Kapselung / stabile Vorlagen
- {{Höhe}}
- {{!-}}, {{!!}}
- {{Coordinate}} bis auf die Geschichte mit simple, {{Positionskarte}}
- {{ISO Kat}}, {{ISO Code zu Region}}
- {{IstZahl}}, {{Max}}
Vorlagenpattern
- weitgehende Trennung von Erzeugung Wiki-Code, Parameterprüfung, bedingte Kategorisierung, …
- verwende unformatierte Zahlen an der Schnittstelle, Vorlage übernimmt die einheitliche Formatierung
- erzeuge keinen Code, der verwendungsabhängig ist (z.B. können Datenbanklinks mit fix einprogrammiertem Bullet (*) nicht mehr als ENs verwendet werden
- Angabe von Breiten für Bilder und Boxen am Interface sind unschön, da sie die einheitliche Formatierung stören.
- Standardisierter Infoboxheader
- Internationalisierte Vorlagen auf Commons trennen in Interface, Layout und n sprachspezifische Ausprägungen.
<!-- Default --> {{#if: {{{name|}}}|{{{name}}}|{{PAGENAME}}}} <!-- Tabellenzeilenanker --> |- {{#if:{{{ObjektID|}}}|id="objektid-{{{ObjektID}}}"}} <!-- Performanceoptimierung bei Coordinate --> {{Coordinate|simple={{#if: {{#titleparts:{{{Breitengrad|}}}|1|2}} | n | y }}| … <!-- nur im ANR --> {{#ifeq: {{NAMESPACE}} | {{ns:0}} | … {{#if: {{NAMESPACE}} | | … <!-- Parameterwertprüfung mit Fehlermeldung --> {{#switch:{{{Status|}}} |Bescheid=Bescheid |§2a|§ 2a|§ 2a=§ 2a |#default=<span class="error">{{{Status|}}}</span>}} <!-- bedingte Tabellenzeile --> |- {{#if: {{{TYP|}}}| {{!}} Typ {{!}} {{{TYP}}} }} <!-- Bildgröße in beiden Dimensionen beschränken, Chile--> |300x300px| |x300px| <!-- Mehrfachverwendung von Infoboxen erlauben --> {{{NEBENBOX|}}} <!-- obenbündige Zellen in Tabellen, --> {| class="toptextcells" <!-- und nicht --> |- valign="top" |- valign="top"
Good Practice
- Immer erst schauen, was es schon gibt (Vermeidung von ähnlichen aber inkompatiblen Vorlagen)
- Dokumentiere die Vorlage (so wie du sie gerne dokumentiert haben möchtest, wenn du sie verwendest)
- Beschreibe komplizierte Implementierung auch für die, die die Vorlage später pflegen müssen
- Erstelle und pflege reproduzierbare Testdaten auf eigenen Testseiten
- Erstelle Wartungsseiten mit den in die Vorlage designten Prüfungen und warte gelegentlich
Ein drittes reales Beispiel: Umgebrochene Tabellenzeile
Mein Versuch, Umbrüche in die Denkmallistentabellenzeile einzufügen:
Weitere Komponenten aus der Tabellenzeile extrahieren
(auch Vereinfachungen)
- hack mit simple wegkapseln
- Die Anzeige-Parameter durch WLink::getPlain() ersetzen, soweit möglich
- go Lua!
eure Vorschläge?
Prozessverbesserungen
- Fehlermeldewesen deutlich vereinfachen
- mehrere und beliebige IDs zu einer Tabellenzeile angeben und am Bild annotieren, detto beim Hochladen über den Commonsmarker (ObjektID, Public Art ID (inkl. Region), Naturdenkmal ID, TKK, …)
- automatisches Einfügen in die Tabelle beim Hochladen über UW und Tabelle
eure Vorschläge?
UploadWizard & Campaigns
- mw:Extension:UploadWizard/Campaigns
- mw:Extension:UploadWizard#URL_arguments
- Interface wurde erweitert in Richtung mehrere zusätzliche, benutzerdefinierte Parameter und automatischem Einfügen in die Listen (falls ich das richtig verstanden habe - need to test)
- en:Template:UploadCampaignLink
- Beispiel Einbindung
[[Datei:Camera-photo_Upload.svg|x16px|alt=Datei hochladen|eigenes Werk hochladen|link={{fullurl:commons:special:uploadWizard|campaign=wlm-at&id={{{ObjektID|}}}&descriptionlang=de&description={{urlencode:{{{Name}}}}}{{#if:{{{Commonscat|}}}|&categories={{urlencode:{{{Commonscat|}}}}}|{{#if:{{#property:P373}}|&categories={{urlencode:{{#property:P373}}}}}}}}}}]]
- Beispiel campaign (json)
{
"enabled": true,
"display": {
"headerLabel": "{{WLM-is-running|at|{{Upload campaign header wlm-at}}|before={{Upload campaign header Wiki Loves Monuments August}}|after={{Upload campaign header Wiki Loves Monuments finished}}|no=yes}}",
"thanksLabel": "{{Upload campaign use Wiki Loves Monuments}}"
},
"defaults": {
"categories": [
"Cultural heritage monuments in Austria"
]
},
"autoAdd": {
"wikitext": "{{subst:WLM-is-running|at|{{Wiki Loves Monuments 2015|at}}}}",
"categories": [
"Cultural heritage monuments in Austria needing check"
]
},
"licensing": {
"ownWorkDefault": "own",
"ownWork": {
"licenses": [
"cc-by-sa-4.0"
]
}
},
"fields": [
{
"wikitext": "{{Denkmalgeschütztes Objekt Österreich|$1}}",
"label": "Objekt ID"
}
],
"tutorial": {
"skip": true
}
}
Commons-Marker Vorlagen
(am Rande für Plani)
- Template:Naturdenkmal Österreich
- Template:Naturdenkmal Österreich/layout
- Template:Naturdenkmal Österreich/de
- Template:Naturdenkmal Österreich/en
Weiterleitung
Tools für die Vorlagenentwicklung
- c/p
- Hilfe:Vorlagenprogrammierung#Testen
- Hallo Welt auf der Vorlagenspielwiese
- Vorlagenbeschränkungen prüfen, speziell wichtig, bei Vorlagen, die vielmals in Artikeln vorkommen können (etwa Tabellenzeilen). Beispiel
Anleitung & Hilfe für die Vorlagenentwicklung
Vorlagen-Auswertungen
- Wikipedia:WikiProjekt Vorlagenauswertung (Templatetiger):
- Generierung aus DB-Dump, d.h. nicht tagesaktuell
- Bsp: Alle Denkmaleinträge mit Anmerkung