Community-Wiki

Achtung: Fandom stellt ab dem 31.12.2023 bis auf Weiteres den Support für die deutsche Sprache ein. Nach diesem Datum müssen alle Anfragen im englischen Community Central oder über das Kontaktformular gestellt werden.

MEHR ERFAHREN

Community-Wiki
Advertisement
Community-Wiki

Hilfe:DPL3Handbuch → Andere Parameter

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 auf true 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 MediaWiki-2020-small-icon 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[]

Advertisement