DPL-Handbuch | |
---|---|
Primäre DPL-Dokumentation | Allgemeine Verwendung • Kriterien für die Seitenauswahl • Steuerung des Ausgabeformats • Steuerung der Ausgabereihenfolge • Steuerung der Ausgangsmenge • Andere Parameter |
Andere DPL-Module | dplchapter • dplvar • dplreplace • dplnum • dplmatrix |
Praktische Zeichen | ²{ • }² • « • » • ¦ • ¶
|
DPL-Handbuch | |
---|---|
Primäre DPL-Dokumentation | |
Allgemeine Verwendung • Kriterien für die Seitenauswahl • Steuerung des Ausgabeformats • Steuerung der Ausgabereihenfolge • Steuerung der Ausgangsmenge • Andere Parameter | |
Andere DPL-Module | |
dplchapter • dplvar • dplreplace • dplnum • dplmatrix | |
Praktische Zeichen | |
²{ • }² • « • » • ¦ • ¶
|
updaterules
[]
- Syntax
updaterules = Regel; ... Regel;
Wenn die Regel eine der folgenden ist | |
---|---|
Regel | Syntax |
Regeln für die Massenaktualisierung von Artikeln | replace Muster; by Ersetzung; before Muster; insert Text; after Muster; insert Text; |
Regeln für die interaktive Aktualisierung von Artikeln | template Vorlagenname; legend legend Artikelname; table table Format; editform form Parameter; action form Aktion; hidden Wert; submit Absenden-Schaltfläche; commit Bestätigungs-Schaltfläche; parameter Parametername; value Wert; format Format anzeigen; tooltip Text; optional Wert; afterparm Parametername; |
Allgemeine Regeln | summary Bearbeitungszusammenfassung; exec Wert; |
Die erste Gruppe von Regeln ist für die Massenaktualisierung von Artikeln gedacht. Eine DPL-Abfrage kann eine Gruppe von Artikeln auswählen und Aktualisierungen vornehmen, wie z. B. das Einfügen eines Textstücks an einer bestimmten Stelle oder das Ändern von Textteilen auf der Grundlage von regulären Ausdrücken.
Die zweite Gruppe von Regeln ist für die interaktive, formularbasierte Bearbeitung von Vorlagenwerten gedacht.
Die dritte Gruppe von Regeln ist den beiden anderen Gruppen gemeinsam und steuert den Aktualisierungsprozess.
Die Funktion updaterules
ist nur für Wiki-Experten gedacht. Es wird empfohlen, dass Artikel, die diese Anweisung verwenden, geschützt sind.
Regeln für die Massenaktualisierung im Detail[]
replace Muster;
[]
Definiert einen regulären Ausdruck, der auf Textteile passt, die ersetzt werden sollen. Es liegt in der Verantwortung des Benutzers, umschließende Zeichen für den regulären Ausdruck bereitzustellen; Modifikatoren wie 'U' oder 'm' können verwendet werden.
by Ersetzung;
[]
Definiert den Ersatz für das obige Muster; Rückverweise wie \1
können verwendet werden.
before Muster;
[]
Definiert die Stellen, an denen Text eingefügt werden soll. Die Stelle(n) befindet/befinden sich unmittelbar vor der/den Übereinstimmung(en) des Musters. Wenn ein Muster mehrfach übereinstimmt, werden mehrere Einfügungen vorgenommen.
Die Regexp wird implizit in Schrägstriche eingeschlossen. Daher müssen buchstäbliche Schrägstriche (/
) durch Backslashes (\
) ersetzt werden.
after Muster;
[]
Legt die Stellen fest, an denen Text eingefügt werden soll. Die Stelle(n) befinden sich unmittelbar nach der/den Übereinstimmung(en) des Musters. Wenn ein Muster mehrfach übereinstimmt, werden mehrere Einfügungen vorgenommen.
Die Regexp wird implizit in Schrägstriche eingeschlossen. Daher müssen buchstäbliche Schrägstriche (/
) durch Backslashes (\
) ersetzt werden.
insert Text;
[]
Definiert den einzufügenden Text.
Eine DPL-Anweisung kann gleichzeitig Ersetzung, Einfügung vor und nach enthalten.
replace /([a-z]+])-Katze/; by \1-Hund; before foo; insert bar; after foo; insert bar2;
Es kann nur eine 'replace
'-'by
'-Sequenz, eine Einfügung 'before
' und eine Einfügung 'after
' angegeben werden. 'replace
' wird immer zuerst ausgeführt, gefolgt von 'insert before
' und 'insert after
', unabhängig von der Reihenfolge, in der die Regeln in der DPL-Quelle 'text
' erscheinen.
Regeln für die interaktive Aktualisierung im Detail[]
template Vorlagenname;
[]
Der Name der Vorlage; das Präfix „Vorlage:“ muss angegeben werden.
Die Position(en) werden unmittelbar vor der/den Übereinstimmung(en) des Musters eingefügt. Wenn ein Muster mehrfach übereinstimmt, werden mehrere Einfügungen vorgenommen.
Die Regexp wird implizit in Schrägstriche eingeschlossen. Daher müssen buchstäbliche Schrägstriche (/
) durch Backslashes (\
) ersetzt werden.
after Muster; insert Text; replace Muster; by Ersetzung;
Aus Sicherheitsgründen werden die Aktualisierungsanweisungen nur ausgeführt, wenn exec true
angegeben ist. Wenn du dies weglässt, kannst du also überprüfen, was passieren würde, wenn die Aktualisierung ausgeführt würde.
Beachte, dass bei exec true
die Aktualisierung jedes Mal durchgeführt wird, wenn die Seite generiert wird, die die DPL-Anweisung mit den updaterules
enthält. Es ist daher ratsam, exec true
nur über ein Kommandozeilenargument und nicht als Teil des statischen Artikeltextes zu setzen. So behältst du die Kontrolle darüber, wann die Aktualisierung erfolgt. Normalerweise würde man zu diesem Zweck einen URL-Parameter wie DPL_arg1
verwenden.
Die Größe der Formularfelder wird an die Größe des angezeigten Inhalts angepasst.
text
ist reiner Text; replacement
ist Text, der Verweise (wie \1
) auf das übereinstimmende Muster enthalten kann (vorausgesetzt, dass dieses Muster Übereinstimmungsgruppen enthält).
deleterules
[]
- Syntax
deleterules = reason Text; exec true;
Löscht die ausgewählten Seiten; wenn exec true
fehlt, passiert nichts.
goal
[]
- Syntax
goal = pages / categories
Erläuterung[]
Die Voreinstellung ist „Seiten“, was bedeutet, dass DPL eine Liste von Seiten erzeugt. Und das ist genau das, was der Name DPL verspricht.
Wenn du den Zielparameter auf categories
setzt, wird die Liste der Seiten immer noch erzeugt, aber du wirst sie nicht sehen. Stattdessen wird sie verwendet, um eine eindeutige geordnete Liste aller Kategorien zu berechnen, zu denen diese Seiten gehören.
Dies ermöglicht es, eine Frage zu stellen wie: Angenommen, alle Seiten, die zur Kategorie X gehören, haben einen Titel, der mit „y%“ übereinstimmt, und verwenden die Vorlage „Z“: Zu welchen Kategorien gehören diese Seiten?
Eine der nützlicheren Anwendungen wäre eine Frage wie: „Zu welchen Kategorien gehören die Seiten, die einen Verweis auf die aktuelle Seite enthalten?“
Die Ausgabe von goal = categories
ist technisch gesehen eine Liste von Seiten des Typs category. Das bedeutet, dass du alle DPL-Formatierungsoptionen (mode = userformat
, Listentrennzeichen, Spalten usw.) und Pseudovariablen (%TITLE%
, %PAGE%
) verwenden kannst, um das Layout deines Berichts individuell zu gestalten.
Technischer Hinweis[]
Aufgrund einiger Einschränkungen in MySQL ist es derzeit nicht möglich, die Zwischenergebnismenge von Seiten auf ein bestimmtes Maximum zu beschränken (unter Verwendung der LIMIT-Klausel). Darüber hinaus ist der generierte SQL-Code nicht in allen Fällen optimal (da seine Struktur komplexe Auswahlkriterien vorsieht und daher in einfachen Fällen unnötig komplex ist). Sei also vorsichtig und wende präzise Auswahlkriterien an.
allowcachedresults
[]
- Syntax
allowcachedresults = true / false
Erklärung[]
Standardwert ist true
. Alle Abfragen werden standardmäßig zwischengespeichert, um die Serverlast zu verringern, da sich Artikel im Allgemeinen nicht so häufig ändern, sodass sie bei jedem Laden der Seite aktualisiert werden müssen. Wenn sofortige Aktualisierungen bei jedem Seitenaufruf erforderlich sind, setze diesen Parameter auf false
. Die Cache-Zeit wird über den Parameter cacheperiod
gesteuert.
Dieser Parameter hat keine Auswirkungen auf Fandom-Projekte, da zwischengespeicherte Ergebnisse immer auf true
gesetzt werden, um die Serverlast zu reduzieren. Die voreingestellte Cache-Zeit ist allerdings recht kurz: Eine Stunde anstelle von 14 Tagen für eine Seite ohne DPL. In den allermeisten Fällen kann dieser Standardwert um eine oder sogar zwei Größenordnungen erhöht werden.
reset
[]
- Syntax
reset = Schlüsselwort,...
, wobei Schlüsselwort einer von diesen Werten ist:- categories
- templates
- images
- links
- all – ein Synonym für alle darüber
Die Ausgabe einer DPL-Anweisung erzeugt normalerweise Links zu allen Seiten, die Teil der Ergebnismenge sind. Die Einbindung von Inhalten anderer Seiten über DPL (mit include
) hat normalerweise zur Folge:
- dass die Seite, die die DPL-Abfrage enthält, Teil der Kategorien der transkludierten Seite wird
- dass sie deren Verwendung von Vorlagen teilt („übernimmt“)
- dass sie ihre Verweise auf Bilder teilt
- dass sie ihre Verweise auf andere Artikel teilt.
In einigen Fällen kann dies nützlich sein. Aber in vielen Fällen ist dies nicht erwünscht. Insbesondere wenn du DPL verwendest, um ein lesbares Dokument zu erstellen, das den vollständigen Text anderer Artikel enthält, wirst du wahrscheinlich nicht alle Links, Vorlagen usw. dieser Artikel duplizieren wollen.
Der Parameter reset unterdrückt alle oder einige der oben beschriebenen Effekte.
Je nachdem, in welchem mode
du DPL verwendest, gibt es hier einige subtile Unterschiede. Diese Unterschiede betreffen die Frage, wie Links, Kategorien usw. behandelt werden, die direkt Teil des Dokuments sind, das die DPL-Abfrage enthält. Beispiel:
[[Kategorie:Q Cat]], die auf [[Q Link]] verlinkt und [[Bild:Q Image]] zeigt und die {{Q Template}} verwendet ... DPL-Abfrage, die Inhalte aus anderen Artikeln enthält. unter der Annahme, dass dieser Inhalt Links und Bilder enthält, dass dieser Vorlagen verwendet und dass die Artikel Teil einer oder mehrerer Kategorien sind RESET-Anweisung am Ende der DPL-Abfrage mit einer oder mehreren von 'categories,templates,images,links' ...
Im Parsererweiterungs-Modus; DPL-Tag wie <DPL>
| |
---|---|
Wert | Zweck |
categories |
Ignoriert die Kategorien der enthaltenen Inhalte, behält aber „eigene“ Kategorien wie „Q Cat“ bei. |
images |
Verwirft Verweise auf Bilder, die in enthaltenen Inhalten enthalten sind, behält aber „eigene“ Bilder wie „Q Image“. |
templates |
Ignoriert Vorlagen, die in eingebundenen Inhalten verwendet werden, behält aber die „eigene“ Vorlagenverwendung („Q Template“) bei. |
links |
Verwirft alle Verweise auf andere Seiten, d. h. Links, die in eingebundenen Inhalten enthalten sind, und Links wie „Q Link“ werden ignoriert. Das bedeutet, dass alle Links auf die normale Weise „VORWÄRTS“ verwendet werden können, aber kein „ZURÜCKVERWEISEN“ für sie verfügbar sind. |
Wenn du den oben beschriebenen Effekt von reset
auf deine „eigenen“ Links vermeiden willst, kannst du eliminate
verwenden. Du solltest aber wissen, dass eliminate
ziemlich aufwendig in Bezug auf die Rechenleistung ist, da es eine zweite Verarbeitung für alle enthaltenen Inhalte durchführt.
Im Parserfunktions-Modus; DPL-Tag wie {{#DPL:....}}
| |
---|---|
Wert | Zweck |
categories |
Ignoriert alle Kategorien. |
images |
Verwirft alle Verweise auf Bilder. |
templates |
Ignoriert alle Vorlagenaufrufe. |
links |
Verwirft alle Verweise auf andere Seiten. |
Wie du siehst, wird bei der Verwendung von reset im Parserfunktions-Modus alles gelöscht, unabhängig davon, ob es aus eingeschlossenen Inhalten stammt oder ob es direkt Teil des Dokuments ist, das die DPL-Abfrage enthält.
Wenn du den oben beschriebenen Effekt von reset vermeiden willst, kannst du eliminate
verwenden. Du solltest aber wissen, dass eliminate
ziemlich rechenintensiv ist, da es eine zweite Verarbeitung für alle enthaltenen Inhalte durchführt. Der zusätzliche Verarbeitungsschritt wird durchgeführt, sobald du eliminate angibst. In Bezug auf den zusätzlichen Verarbeitungsaufwand macht es keinen Unterschied, ob du ein oder mehrere Argumente für den Befehl eliminate
angibst.
Wenn du mehr als eine DPL-Abfrage in einem Dokument hast, hängen die Auswirkungen vom genauen Modus (Parsererweiterung- oder Parserfunktions-Modus), von der Reihenfolge der Anweisungen und vom Vorhandensein von reset
- oder eliminate
-Anweisungen in jeder der Abfragen und von deren einzelnen Argumenten ab. Da dies ein sehr seltener Fall ist, geben wir hier nur eine einfache Faustregel an: Sobald du reset
im Parserfunktions-Modus oder reset = links
im Parsererweiterungs-Modus verwendet hast, dominiert die Wirkung dieser Anweisungen den Rest.
fixcategory
[]
- Syntax
fixcategory = Kategoriename
Verwende mehrere Befehle, um den Artikel mehr als einer Kategorie zuzuordnen.
Wenn du reset = all
oder reset = categories
verwendest, wird der Artikel, der deine DPL-Anweisung enthält, nicht in die MediaWiki-Linksdatenbank aufgenommen. Dies kann sehr nützlich sein, wenn dein Artikel Inhalte von anderen Seiten einschließt. Ohne den reset
-Befehl würde dein Artikel in einer Kategorie erscheinen, wenn du einen Textteil einfügst, der eine Zuordnung zu dieser Kategorie enthält.
Ein Nebeneffekt der Verwendung von reset = all
ist, dass dein Artikel nicht in einer Kategorie erscheint, auch wenn du ihn tatsächlich einer Kategorie zuweist. Mit fixcategory kannst du eine Kategoriezuweisung vornehmen, die nicht durch den Befehl reset
blockiert wird.
eliminate
[]
- Syntax
eliminate = Schlüsselwort,...
, wobei Schlüsselwort einer von diesen Werten ist:- categories
- templates
- images
- links
- all – ein Synonym für alle darüber
Die Ausgabe einer DPL-Anweisung erzeugt normalerweise Links zu allen Seiten, die Teil der Ergebnismenge sind. Die Einbindung von Inhalten anderer Seiten über DPL (mit include
) hat normalerweise zur Folge:
- dass die Seite, die die DPL-Abfrage enthält, Teil der Kategorien der transkludierten Seite wird
- dass sie deren Verwendung von Vorlagen teilt („übernimmt“)
- dass sie ihre Verweise auf Bilder teilt
- dass sie ihre Verweise auf andere Artikel teilt.
In einigen Fällen kann dies nützlich sein. Aber in vielen Fällen ist dies nicht erwünscht. Insbesondere wenn du DPL verwendest, um ein lesbares Dokument zu erstellen, das den vollständigen Text anderer Artikel enthält, wirst du wahrscheinlich nicht alle Links, Vorlagen usw. dieser Artikel duplizieren wollen.
Der Parameter eliminate
unterdrückt alle oder einige der oben beschriebenen Effekte.
Für weitere Erläuterungen siehe reset
.
Beachte bitte, dass die Verwendung von eliminate eine beträchtliche Menge an zusätzlicher Rechenleistung benötigt, da es einen zweiten Verarbeitungsschritt für jedes eingebundene Dokument durchführt.
debug
[]
- Syntax
debug = n
, wobei n einer von diesen ist:- 0 — Stummer Modus, zeigt nichts
- 1 — Leiser Modus, zeigt (fatale) Fehler
- 2 — Standardmodus, wie 1 + zeigen von Warnungen; — (default)
- 3 — Ausführlicher Modus, wie 2
- 4 — Roh-SQL-Abfrage ausgeben; nur wenn
$wgDebugDumpSql
auftrue
gesetzt ist. - 5 — Zeigt die Wikitext-Ausgabe von DPL anstelle des geparsten Wikitextes.
Wenn du den debug
-Parameter verwendest, aber nicht an der ersten Position im DPL-Element, werden die neuen Debug-Einstellungen nicht angewendet, bevor alle vorherigen Parameter verarbeitet und überprüft worden sind. Dies erzeugt eine Warnung für debug = 2
und höher.
Beispiel:
{{#dpl:
| namespace = Media
| debug = 0
| namespace = Spezial
}}
Diese Liste gibt den Fehler für den ersten Namensraum aus: Media ist kein gültiger Namensraumwert (Pseudo-Namensraum). Angenommen, du hast den Standard-Debug-Wert (2) nicht geändert, erhältst du auch eine Warnung: debug = 1
wird nicht zuerst eingegeben (vor namespace = Media
). Es gilt also nicht für namespace = Media
, sondern nur für das, was danach kommt. Für den zweiten Namensraum (Spezial) erhältst du in der Tat keine Warnung, da debug = 0
die Debug-Einstellungen in den stillen Modus versetzt.
debug = 1
unterdrückt Warnmeldungen (z.B. wenn die Ergebnismenge einer DPL-Abfrage leer ist). Als Alternative kannst du die Anweisung suppresserrors
verwenden.
execandexit
[]
- Syntax
execandexit = Wikitext / geturlargs
Wenn kein Wikitext angegeben ist, wird der Befehl ignoriert. Andernfalls gibt DPL den Wikitext aus und beendet sich sofort. Beachte, dass der Wikitext ein Parserfunktionsaufruf sein kann, der zu einer leeren Zeichenkette ausgewertet wird.
Das spezielle Wort geturlargs
kann als Wikitext verwendet werden, um URL-Argumente, die mit DPL_
beginnen, in Variablen umzuwandeln, auf die dann über #var
(wenn die Erweiterung Variables installiert ist) oder über #dplvar
zugegriffen werden kann.
Zweck[]
Mit diesem Befehl kannst du DPL daran hindern, eine Datenbankabfrage auszuführen; dies kann nützlich sein, wenn ein notwendiger Parameter vom Benutzer nicht angegeben wurde. Beachte, dass ein #if
-Funktionsaufruf in diesem Fall NICHT helfen würde, da #if seinen kompletten Inhalt auswertet, bevor es den „if"- oder „else“-Pfad nimmt. Ein DPL-Aufruf innerhalb eines #if
ist also weit weniger effizient als die Verwendung der execandexit
-Funktion.
Eine typische Anwendung sieht so aus (beachte die doppelten Pipe-Symbole innerhalb des #if
. Der Aufruf der folgenden Seite mit &DPL_cat=Land
würde die Länder auflisten, das Weglassen des Parameters &cat
würde die Fehlermeldung auslösen (ohne dass DPL die Datenbank ansteuert):
{{#dpl:execandexit=geturlargs}}
{{#dpl:
| execandexit = {{#if:{{#dplvar:DPL_cat}}||Gib bitte eine Kategorie über &DPL_cat= in der URL an!}}
| resultsheader = Seiten in der Kategorie {{#dplvar:DPL_cat}}:\n
| noresultsheader = Es gibt keine Seiten in der Kategorie {{#dplvar:DPL_cat}}.\n
| count = 5
| category = {{#dplvar:DPL_cat}}
}}
Siehe auch Scrollen.
Beachte, dass execandexit
wie eine Kurzschlussauswertung wirkt. Das bedeutet zum Beispiel, dass aufeinanderfolgende Anweisungen zur Beeinflussung des Zwischenspeicherverhaltens (wie allowcachedresults
) nicht interpretiert werden.
cacheperiod
[]
- Syntax
cacheperiod = Anzahl der Sekunden
Der Standardwert ist 3600 Sekunden, was einer Stunde entspricht. Im Vergleich dazu beträgt die standardmäßige Verfallszeit ohne DPL bei Fandom 1.209.600 Sekunden, also 14 Tage. Der Zwischenspeicher von DPL wird ungültig (und die Seite wird neu erstellt, bevor die Zwischenspeicherzeit endet), wenn die Seite, die die DPL-Abfrage beherbergt, bearbeitet wird oder wenn eine Seite bereits in den Ergebnissen enthalten ist. Wenn hingegen eine Seite, die nicht zu den Ergebnissen gehört, bearbeitet wird und mit der DPL-Abfrage übereinstimmt, wird sie erst wieder aufgenommen, wenn der Zwischenspeicherzeitraum endet oder der DPL-Zwischenspeicher durch etwas anderes ungültig wird.
Es ist also völlig in Ordnung, den Zwischenspeicher für DPL-Abfragen, bei denen nicht zu erwarten ist, dass die Anzahl der Ergebnisse schnell wächst, auf 14 Tage einzustellen. In den meisten anderen Fällen ist ein Zwischenspeicher von 1 Tag (86.400 Sekunden) wahrscheinlich ausreichend.
DPL ist ein ressourcenintensives Werkzeug. Das bedeutet, dass nur die erste(n) Person(en), die eine Seite mit einer DPL-Abfrage lädt/laden, deren Zwischenspeicher abgelaufen oder ungültig geworden ist, darauf warten muss/müssen, dass die Fandom-Server die Seite neu aufbauen.
Mehr Hilfe[]
- Ein Stichwortverzeichnis zu verschiedensten Hilfeseiten findest du auf Hilfe:Index.
- Einen geordneten Einstieg zur Hilfe gibt es auf der Seite Hilfe:Übersicht.
- Fragen an andere Benutzer kannst du in den Diskussionen des Community-Wikis stellen.
- Anmerkungen zu dieser Hilfeseite kannst du auf der dazugehörigen Diskussionsseite hinterlassen.
- Um Fehler zu melden, kontaktiere bitte einen Ansprechpartner oder nutze das entsprechende Kontaktformular.