Benutzer:Kameloid/dpl
Nützliche Links
- dpl-Manual
- #if, #switch #time (Hilfe:Vorlagenprogrammierung)
- Variabeln und ihre Benützung
- Eine Sammlung aller %xxxyyy% Variablen
dpl in 20 Minuten
dpl kann so aufgerufen werden (grosser Nachteil {{{xy}}} kann nicht benutzt werden):
<dpl> namespace = Kamel titlematch = Kameloid/Vorlagen/% replaceintitle=/Kameloid\/Vorlagen\//, format = ,**[[%PAGE%|%TITLE%]]\n, noresultsheader = Des is nix gut! </dpl>
Oder so:
{{#dpl: |namespace = Kamel |titlematch = Kameloid/Vorlagen/% |replaceintitle=/Kameloid\/Vorlagen\//, |format = ,**[[%PAGE%|%TITLE%]]\n, |noresultsheader = Des is nix gut! }}
Ersatz-Zeichen
Da die Verarbeitung auf gewisse Zeichen angewiesen ist, um zu merken wo welcher Parameter anfängt und aufhört, und diese identisch mit den Wikisyntax sind muss man manchmal Ersatz-Zeichen benützen Bsp:
{{#dpl: |namespace = |addpagecounter = true |userdateformat=j. M Y |addeditdate=true |ordermethod=firstedit |createdby= Kameloid |uses= Vorlage:hw |resultsheader = {¦²{prettytable}² class=sortable width=100% \n!width=300px¦Meine Kamelitos (%PAGES%) |format = ¦¦width=100px¦Erschaffen¦¦width=100px¦Gesichtet¦¦Linksto ,\n¦-\n¦align=left¦[[Bild:Kartenhäufigkeit2.png|float|14px]] '''[[%PAGE%|%TITLE%]]''', ¦¦align=center¦<span style="display:none">²{#time:Ymd¦%DATE%}²</span>%DATE% ¦¦align=center¦%COUNT%¦¦²{Kamel:Kameloid/Kamelproductions/SubList¦%TITLE%}²\n,\n¦} |noresultsheader = Des is nix gut! }}
Erzeugt dieses hier:
Des is nix gut!
Hier wird:
- {{...}} mit ²{...}²
- {|...|} mit {¦...¦}
- | mit ¦
- Newline mit \n
ersetzt. Weiterführende Literatur: [1]
Namespace
- Nicht in der Abfrage enthalten = Alle
- Leer lassen = Artikelnamensraum (namespace = (sieht halt unfertig aus, aber so ises))
- 2 oder mehr Namespaces angeben: namespace = ¦Bild¦Forum oder namespace = {{!}}Bild{{!}}Forum (ist eine Vorlage:!) die einfach einen | ausgibt. (wobei das "Leer" vor dem ¦Bild¦Forum eben den "leeren" darstellt, den Artikelnamensraum )
- Namespaces auf diesem Server:
Archiv | Archiv_Diskussion | Bild | Bild_Diskussion | Diskussion | Forum | Hilfe | Hilfe_Diskussion | Kamel | Kamel_Diskussion | Kamelopedia | Kamelopedia_Diskussion | Kategorie | Kategorie_Diskussion | MediaWiki | MediaWiki_Diskussion | Projekt | Projekt_Diskussion | Vorlage | Vorlage_Diskussion.
addpagecounter
Jedes zusätzliche Feature (was mehr als den Artikelnamen erzeugen soll) muss auch deklariert werden. addpagecounter=true sagt dem deppl, dass es die Besucherzahlen der Seiten mitsammeln soll. Kann dann bei der Ausgabe (fromat=...) als %COUNT% beliebig verwurstet werden.
userdateformat
Enthält die Abfrage ein Datum, kann diese präformatiert werden. Für nähere Formatangaben siehe:[2]
Zb.: userdateformat=j. M Y erzeugt ein Datum wie: 1. Dec 2008
addeditdate
addeditdate=true ist ein Feature und muss eingeschaltet werden.
Kann dann bei der Ausgabe (fromat=...) als %DATE% beliebig verwurstet werden.
Bei sortierten Tabellen, muss mit einen Trick ein 2tes Datum mit ausgegeben werden, sonst wirds falsch sortiert:
<span style="display:none">²{#time:Ymd¦%DATE%}²</span>%DATE%
Das erste Datum (<span style="display:none">²{#time:Ymd¦%DATE%}²</span> ) ist unsichtbar, aber da und zwar als 20081201, das sichtbare ist dann 1. Dec 2008.
ordermethod
Muss angegeben werden sobald Kamel mit dem Datum spielt. Es gibt viel Möglichkeiten wonach sortiert werden soll. Im Bsp ist ordermethod=firstedit verwendet, da es um das Datum der Neuanlegung des Artikels geht.
PS: In diesem Zusammenhang ist auch order=descending (vom Neuseten zum Ältesten) oder order=ascending (standard vom Ältesten zum Jüngsten) interessant.
createdby
Gibt das Kamel wieder, dass den Blödsinn auf den Server geklatscht hat. Kann dann bei der Ausgabe (fromat=...) als %USER% beliebig verwurstet werden.
uses
Schränkt die Ausgabe ein auf, die Artikel, die die Vorlage:XXXXYYYY braucht:
uses=Vorlage:Hw¦Vorlage:Was die Verknüpfung ist "und/oder".
notuses=..... ist das Gegenteil. Es ist nicht nur auf Vorlagen eingeschränkt, es kann auch ein anderer Namespace verwendet werden.
resultsheader
Gibt es zumindest ein Resultat, dann wird resultsheader = {¦²{prettytable}² class=sortable width=100% \n!width=300px¦Meine Kamelitos (%PAGES%) Ausgegeben, bzw. ausgeführt (hier könnte man auch eine Subroutine schachteln). Im Bsp ist das der Anfang der Tabelle. Der Tabellenanfang könnte auch im "format=" stehen, dann ist aber die Variabel %PAGES% (Gesamtzahl der Gefundenen) nicht verfügbar.
Nahe Verwandte sind:
- oneresultheader= (wenn es genau 1 Resultat gibt)
- noresultsheader= (wenn es kein Resultat gibt. Wenn damit zu rechenen ist, dass es auch kein Ergebnis geben kann, sollte hier was stehen, sonst wird so ne komische Meldung ausgegeben, die dann auch sichtbar ist)
format
Dies ist das schwärzeste Kapitel.
format = ,,, ist die Grundform. Sie teilt sich auf in:
format = XXXX,PPPP,AAAA,YYYY:
XXXX: Da kommt alles hin, was vor der Liste stehen soll
PPPP: Hier kommt alles hin, was mit der Artikeltitel zutun hat
AAAA: Der ganze übrige Schrott
YYYY: Da kommt alles hin, was nach der Liste stehen soll.
format =
Die überschrift der Tabelle
¦¦width=100px¦Erschaffen ¦¦width=100px¦Gesichtet ¦¦Linksto,
Der Inhalt der Tabelle Artikelname
\n¦-\n¦align=left¦[[Bild:Kartenhäufigkeit2.png|float|14px]][[%PAGE%|%TITLE%]],
Und der übrige Schrott
¦¦align=center¦
%DATE%
¦¦align=center¦%COUNT%¦¦²{Kamel:Kameloid/Kamelproductions/SubList¦%TITLE%}²\n,
Und das blutige Ende der Tabelle
\n¦}
PS: Im Teil "übrige Schrott" wir im Bsp mit (²{Kamel:Kameloid/Kamelproductions/SubList¦%TITLE%}²) eine Externe Routine (Vorlage) aufgerufen, weiteres siehe unter #Probleme & Lösungen
Der Inhalt der Subroutine (Vorlage) ²{Kamel:Kameloid/Kamelproductions/SubList¦%TITLE%}²
{{#dpl: |namespace = |noresultsheader = Keine |linksto={{{1|Oberfläche}}} |format =,[[%PAGE%|* ]],, }}
Und so sieht das aus * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
linksto
linksto={{{1|Holzweg}}} sucht nach allen Artikeln (oder sonst was, ja nach Namespace) das auf diese Seite Linkt.
2tes Fallbeilspiel
Artikel können Vorlagen enthalten, die mit Kommentar versehen sind Bsp:
Artikelschmiede benützt im Artikel eine Vorlage: {{Schmiede|gerade erst angefangen|[[Kamel:THE MASTER|THE MASTER]]}}
Auf die Daten in der Vorlage kann so zugegriffen werden:
{{#dpl: |namespace = Kamelopedia |category = Hufschmiede |title=Kamelopedia:Artikelschmiede/Strebergarten |noresultsheader = Artikel fehlt, bitte schreib schnell einen |addfirstcategorydate = true |ordermethod = categoryadd |count=10 |include = {Schmiede}:2:1 |secseparators=<big>(,)</big> |format= '''Preambel''',<br />'''%PAGE%''','''Müll''',<br />'''Postamble''' }}
Und so Scheisse siehts aus:
Artikel fehlt, bitte schreib schnell einen
category
Schränkt die Suche auf eine oder mehrere Kategorien ein
title
Schränkt die Suche auf genau einen Titel ein. Hier könnte man auch titlematch=Artikelschmiede/Strebergarten (nottitlematch= ist das Gegenteil) benützen, damit man den Namespace nicht angeben muss, wenn aber der Titel in mehreren Namespaces vorkommt, gibts auch mehrere Treffer.
PS: Irgend was sollte ich da noch hinschreiben, habs aber vergessen....
addfirstcategorydate
addfirstcategorydate = true ist auch ein Feature. Wann der Artikel in die Kategorie kam.
ordermethod
ordermethod = categoryadd: Die Ausgabe ist nach dem Datum sortiert, wann das Teil in die Kat geschubbst wurde.
count
count=10 sagt, wieviele Treffer insgesamt angezeigt werden sollen. In diesem Bsp völliger Nonsens, da es maximal 1 geben kann.
include
include kann auf viele Arten benützt werden. Hier wird es benützt um den Vorlagetext einzubinden.
include = {Schmiede}:2:1 heisst, zuerst den 2ten Parameter und dann den 1sten holen. Eingefügt wird das ganze automatisch in
format = ,,hier vor dem Müll,
secseparators
secseparators= vor S1, nach S1, vor S2, nach S2.... sagt, welche Zeichen vor und nach jeder Sektion des include hinzuzufügen werden sollen. Da muss ich mich noch was schlauer machen, weil {Schmiede}:2:1 wird als eine Sektion behandel, warum weiss ich auch nicht. Theoretisch sollte man das für jede Sektion einzeln definieren können.
3tes Fallbeilspiel
Man kann den Inhalt eines Artikels auch in der Ausgabe mit einbeziehen, bisher wird das hier aber nicht angewendet, weil auch Bilder und Audio in diesem Ausschnitt drin sind. Eine Denkbare Anwendung wäre zb eine Glossar Auschnitt oder auch der Wochen Artikel könnte so automatisiert werden:
{{#dpl: |namespace = Kamel |titlematch = Kameloid/TestGlossar |include = #{{{1|ACAB!}}}[100] |format = ,,, }}
Und so siehts dann aus:
include
include = #ACAB![100] wobei:
- #{{{1|ACAB!}}}: Include ab ===ACAB!=== bis zum nächsten ===irgedwas===
- [100]: sagt aus, wievile Zeichen übergeben werden sollen, ohne Angabe, wird alles übergeben. Sind mehr Zeichen vorhanden als angegeben, kommt hinter dem Text eine kleiner hässlicher Pfeil, der als Link zum Text fungiert.
4tes Fallbeilspiel
Wird in einer Vorlage mehrmals das selbe dpl-Resultat gebraucht, so kann man es auch in eine Variabel packen:
{{#vardefine: Beispielartikel| {{#dpl: | uses = Vorlage:{{{1|Hw}}} | randomcount = 1 | format = ,• [[%PAGE%|Beispielartikel]],, | noresultsheader = Keine Beispiele vorhanden }}}}
Und so was gibt es aus:
Hier ist er: Keine Beispiele vorhanden
Und da auch: Keine Beispiele vorhanden
randomcount
randomcount = X gibt eine Anzahl X zufällig aus den gefundenen Artikeln (oder was auch immer) aus. Ist X grösser als die Anzahl der gefundenen, ist die Auswahl auch nicht mehr zufällig.
5tes Fallbeilspiel
Ein geniales Konstrukt (neben anderen sonderbaren Dingen) kommt bei der Gaga-Wahl zum Einsatz:
Um die Abgegebenen Stimmen zu Zählen wird folgender Trick verwendet:
{{#vardefine: pro|0}}{{#vardefine: contra|0}} {{Leere Vorlage die garnix macht| {{#dpl: |title={{FULLPAGENAME}} |include={Wahl}:Stimmen |skipthispage=no }} }}
Nebst Kleinkram enthält die Vorlage:Pro (und AnasagtdieWahrheit dazu auch die Vorlage Contra) folgendes:
{{#vardefine: pro|{{#expr: {{#var:pro}} +1 }}
Und was soll daran genital sein?
Zuerst wird mit {{#vardefine: pro|0}}{{#vardefine: contra|0}} die Variable pro und die contra auf 0 gesetzt. Danach sucht dpl-Routine nach dem title={{FULLPAGENAME}} (nur sinnvoll wenn sie auch in einem entsprechenden Artikel bzw. der Disk dazu aufgerufen wird, kann aber auch irgend eine Seite sein, die ein Wahl mit Pro&Contra enthält).
include
Mit include={Wahl}:Stimmen wird nun der Teil der Wahlvorlage, der die {{Pro}} und {{Contra}} enthält aufgerufen, bzw. ausgeführt. Dh. alle Pro&Contra Vorlagen werden aufgerufen und die dort enthaltene Anweisung {{#vardefine: pro|{{#expr: {{#var:pro}} +1 }} (Variable pro=pro+1) ausgeführt. Da der Aufruf auch Text erzeugt, wird die Ausgabe in einen sog. Nulldevice geschrieben Vorlage:Leere Vorlage die garnix macht der diesen sauber entsorgt.
Die entsprechende Seite müsste dann sowas enthalten:
{{Wahl|Stimmen= {{pro|}} {{pro|}} {{contra|}} }}
skipthispage
skipthispage ist normalerweise =yes und bedeutet, dass die Seite, in der der dpl-code steht, bei der Suche nicht eingeschlossen ist. Will man ausdrücklich diese Seite auch berücksichtigt haben, muss =no angegeben werden.
6tes Fallbeilspiel
Variante 1: {{#dpl: |namespace = |category = Baum |format = ,[[%PAGE%|%TITLE%]],, |inlinetext = <nowiki>, </nowiki> }} Variante 2: {{#dpl: |namespace = |category = Baum |mode=inline |inlinetext = <nowiki>, </nowiki> }}
Und so siehts aus:
inlinetext
Probleme & Lösungen
Problem 1
dpl kennt nur ein %DATE% und einen %USER% pro Suche, will Kamel aber zb dass Datum wissen, wann der Artikel in eine bestimmte Kategorie kam und wann der letzte Edit im selbe Artikel war, wirds schwierig:
Folgende Idee geht nicht:
Inerhalb der ersten dpl-Routine eine Variabel "varTitel" definieren, die dann Gültigkeit auch inerhalb der 2ten dpl-Routine hätte, weil %TITLE% nicht in der 2ten Routine verwendet werden kann. Leider wird auch varTitel immer mit dem neusten %TITLE% überschrieben, auch wenn kein direkter Befehl dafür vorhanden ist. Dh: sobald in der 2ten Routine für %TITLE% ein Ergebnis vorhanden ist, hat auch "varTitel" dieses geerbt.
Die erste Routine sucht jeweils das Datum des letzten Edits jedes Artikels in der Kategorie "Entwurf", die geschachtelte sollte jeweils das Datum des Eintrittes in die Kategorie ausgeben.
{{#dpl: |category = {{{1|Entwurf}}} |addeditdate=true |ordermethod=lastedit |format=, {{#vardefine:varTitel|%TITLE%}} {{#dpl: |category = {{{1|Entwurf}}} |title={{#var:varTitel}} |addfirstcategorydate=true |ordermethod=firstedit |format= ,,%DATE%, }},%DATE%, }}
Lösung 1
{{#dpl: |category={{{1|Entwurf}}} |addeditdate=true |ordermethod=lastedit |format=,,²{TESTVorlage¦{{{1|Entwurf}}}¦%TITLE%}² %DATE%, }}
Inerhalb des "format=" wird hier eine SubVorlage mit den Ergebnissen pro Zeile gefüttert. Ausgegeben werden hier 2 Daten 1) Das aus der SubVorlage und 2) das aus der eingenen Routine.
Inhalt von Vorlage TESTVorlage:
{{#dpl: |category={{{1|Entwurf}}} |title={{{2}}} |addfirstcategorydate=true |ordermethod=firstedit |format= ,,%DATE%, }}
übergibt das Datum an die aufrufende Routine bzw. Vorlage