Benutzer:Kameloid/dpl: Unterschied zwischen den Versionen
(+include template) |
|||
(20 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
{{#vardefine:Hpagedpl|http://semeb.com/dpldemo/index.php?title=DPL:Manual_-_DPL_parameters:}} | {{#vardefine:Hpagedpl|http://semeb.com/dpldemo/index.php?title=DPL:Manual_-_DPL_parameters:}} | ||
− | |||
− | |||
− | |||
==Nützliche Links== | ==Nützliche Links== | ||
− | + | *[http://semeb.com/dpldemo/index.php?title=DPL:Manual dpl-Manual]<br> | |
− | [http://semeb.com/dpldemo/index.php?title=DPL:Manual]<br> | + | *[http://meta.wikimedia.org/wiki/ParserFunctions #if, #switch #time] ([http://de.wikipedia.org/wiki/Hilfe:Vorlagenprogrammierung Hilfe:Vorlagenprogrammierung]) |
− | + | *[http://www.mediawiki.org/wiki/Extension:VariablesExtension Variabeln und ihre Benützung] | |
− | [http://meta.wikimedia.org/wiki/ParserFunctions] ([http://de.wikipedia.org/wiki/Hilfe:Vorlagenprogrammierung]) | + | *[{{#var:Hpagedpl}}_Controlling_output_format#mode_.27Userformat.27 Eine Sammlung aller %xxxyyy% Variablen] |
− | |||
− | [http://www.mediawiki.org/wiki/Extension:VariablesExtension] | ||
− | |||
− | |||
==dpl in 20 Minuten== | ==dpl in 20 Minuten== | ||
− | + | dpl kann so aufgerufen werden (grosser Nachteil <nowiki>{{{xy}}}</nowiki> und <nowiki>{{xy}}</nowiki> kann nicht benutzt werden (ähh, letzten Gerüchten zu Folge scheint die Aussage nicht ganz zu stimmen...)): [http://semeb.com/dpldemo/index.php?title=DPL:Manual_-_General_Usage_and_Invocation_Syntax] | |
− | dpl kann so aufgerufen werden (grosser Nachteil <nowiki>{{{xy}}}</nowiki> kann nicht benutzt werden): | ||
<pre><nowiki> | <pre><nowiki> | ||
<dpl> | <dpl> | ||
Zeile 35: | Zeile 27: | ||
}} | }} | ||
</nowiki></pre> | </nowiki></pre> | ||
+ | <!----------------------------------------------------------------------------> | ||
+ | |||
+ | ==Fallbeilspiel== | ||
+ | Für kleinere Listings bietet sich das Inline-Format an. Die 2 Varianten ergeben genau das selbe Resultat: | ||
+ | |||
+ | <pre><nowiki> | ||
+ | Variante 1: | ||
+ | {{#dpl: | ||
+ | |namespace = | ||
+ | |category = Baum | ||
+ | |format = ,[[%PAGE%|%TITLE%]],, | ||
+ | |inlinetext = <nowiki>, </nowiki> | ||
+ | }} | ||
+ | |||
+ | Variante 2: | ||
+ | {{#dpl: | ||
+ | |namespace = | ||
+ | |category = Baum | ||
+ | |mode = inline | ||
+ | |inlinetext = <nowiki>, </nowiki> | ||
+ | }} | ||
+ | </nowiki></pre> | ||
+ | |||
+ | Eine 3te Variante wäre '''<nowiki>format = ,[[%PAGE%|%TITLE%]],<nowiki>, </nowiki>, </nowiki>''' allerdings würde am Schluss der Liste dann auch ein ", " stehen, was eigentlich unerwünscht ist. | ||
+ | |||
+ | Und so siehts aus: | ||
+ | {{#dpl: | ||
+ | |namespace = | ||
+ | |category = Baum | ||
+ | |mode = inline | ||
+ | |inlinetext = <nowiki>, </nowiki> | ||
+ | }} | ||
---- | ---- | ||
− | ===Ersatz-Zeichen=== | + | ===[{{#var:Hpagedpl}}_Criteria_for_page_selection#namespace 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 = <nowiki>{{!}}</nowiki>Bild<nowiki>{{!}}</nowiki>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:<br /> | ||
+ | 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. | ||
+ | ---- | ||
+ | ===[{{#var:Hpagedpl}}_Criteria_for_page_selection#category category]=== | ||
+ | Schränkt die Suche auf eine oder mehrere Kategorien ein | ||
+ | ---- | ||
+ | ===[{{#var:Hpagedpl}}_Controlling_output_format#inlinetext inlinetext]=== | ||
+ | Inlinetext ist der Text zwischen den ausgegebenen Einträgen. Als einziger mir bekannter Parameter muss er ''nach'' dem ''format='' (falls verwendet) stehen. Werden Leerzeichen vor und/oder nach gewünscht, muss man sie tarnen: Entweder als &nbsp;, mit "nowiki" ausgeklammert oder mit &#32; ersetzen. Der Nachteil bei "nbsp" ist, dass er "no breaking" ist und die Inleinausgaben entsprechend ungebrochen aussieht. | ||
+ | <!----------------------------------------------------------------------------> | ||
+ | |||
+ | ==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: | ||
+ | |||
+ | <pre><nowiki> | ||
+ | {{#dpl: | ||
+ | |namespace = | ||
+ | |titlematch = Oxidation | ||
+ | |include = #{{{1|Geschichte}}}[100] | ||
+ | }} | ||
+ | </nowiki></pre> | ||
+ | Und so siehts dann aus: | ||
+ | {{#dpl: | ||
+ | |namespace = | ||
+ | |titlematch = Oxidation | ||
+ | |include = #{{{1|Geschichte}}}[100] | ||
+ | }} | ||
+ | ---- | ||
+ | ===[{{#var:Hpagedpl}}_Controlling_output_volume#include include]=== | ||
+ | Include kann verschiedene Sachen includen, in diesem Bsp geht es um Sektionen.<br /> | ||
+ | '''include = #{{{1|ACAB!}}}[100]''' wobei: | ||
+ | *'''<nowiki>#{{{1|ACAB!}}}</nowiki>''': Include '''ab''' ===ACAB!=== '''bis''' zum nächsten ===irgedwas=== | ||
+ | *'''<nowiki>[100]</nowiki>''': 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. | ||
+ | ---- | ||
+ | ===[{{#var:Hpagedpl}}_Criteria_for_page_selection#titlematch titlematch]=== | ||
+ | '''titlematch''' ist in deisem Bsp eigentlich missbraucht, wenn nur eine spezivische Seite aufgerufen werden soll, würde sich "'''titel='''" eher anbieten, ausser es gibt ein Problem, den Namespace zu deklarieren. '''titlematch''' wird verwendet um Seiten zu finden, die eine Gemeinsamkeit im Namen haben zB: Für die Suchen nach Unterseiten von Kamelen (ohne sie auf den Rücken zu drehen...) würde man folgendes Verwenden:<br /> | ||
+ | '''titlematch = Kameloid/%''' wobei das % anzeigt, dass es da noch weiter gehen kann. Eine ähnliche Situation wäre die Suche nach Lesezirkelseiten:<br />'''titlematch = %/Lesezirkel''' | ||
+ | |||
+ | <!----------------------------------------------------------------------------> | ||
+ | |||
+ | ==Fallbeilspiel== | ||
+ | Artikel können Vorlagen enthalten, die mit Kommentar versehen sind. Beispielsweise benützt die Artikelschmiede im Artikel eine Vorlage: '''<nowiki>{{Schmiede|gerade erst angefangen|[[Kamel:THE MASTER|THE MASTER]]}}</nowiki>''' | ||
+ | |||
+ | Auf die Daten in der Vorlage kann so zugegriffen werden: | ||
+ | |||
+ | <pre><nowiki> | ||
+ | {{#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''' | ||
+ | }} | ||
+ | </nowiki></pre> | ||
+ | |||
+ | Und so Scheisse siehts aus:<br /> | ||
+ | {{#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''' | ||
+ | }} | ||
+ | ---- | ||
+ | ===[{{#var:Hpagedpl}}_Criteria_for_page_selection#title 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.<br /> | ||
+ | |||
+ | PS: Irgend was sollte ich da noch hinschreiben, habs aber vergessen.... | ||
+ | |||
+ | ---- | ||
+ | |||
+ | ===[{{#var:Hpagedpl}}_Controlling_output_volume#addfirstcategorydate addfirstcategorydate]=== | ||
+ | '''addfirstcategorydate = true''' ist auch ein Feature. Wann der Artikel in die Kategorie kam. | ||
+ | |||
+ | ---- | ||
+ | ===[{{#var:Hpagedpl}}_Controlling_output_order#ordermethod ordermethod]=== | ||
+ | '''ordermethod = categoryadd''': Die Ausgabe ist nach dem Datum sortiert, wann das Teil in die Kat geschubbst wurde. | ||
+ | |||
+ | ---- | ||
+ | ===[{{#var:Hpagedpl}}_Criteria_for_page_selection#count count]=== | ||
+ | '''count=10''' sagt, wieviele Treffer insgesamt angezeigt werden sollen. In diesem Bsp völliger Nonsens, da es maximal 1 geben kann. | ||
+ | |||
+ | ---- | ||
+ | ===[{{#var:Hpagedpl}}_Controlling_output_volume#include 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<br />'''format = ,,hier vor dem Müll,''' | ||
+ | |||
+ | ---- | ||
+ | ===[{{#var:Hpagedpl}}_Controlling_output_format#secseparators secseparators]=== | ||
+ | '''secseparators= vor S1, nach S1, vor S2, nach S2....''' sagt, welche Zeichen vor und nach jeder Sektion des '''include''' hinzuzufügen werden sollen. '''{Schmiede}:2:1''' wird aber als eine Sektion behandel und deshalb können :2 und :1 nicht getrennt werden. Eine Variante wird im nächsten Beilspiel behandelt. | ||
+ | |||
+ | ---- | ||
+ | ===[{{#var:Hpagedpl}}_Controlling_output_format#format format]=== | ||
+ | Dies ist das schwärzeste Kapitel. | ||
+ | '''format = ,,,''' ist die Grundform. Sie teilt sich auf in:<br /> | ||
+ | '''format = XXXX,PPPP,AAAA,YYYY''':<br /> | ||
+ | XXXX: Da kommt alles hin, was vor der Liste stehen soll<br /> | ||
+ | PPPP: Hier kommt alles hin, was mit der Artikeltitel zutun hat<br /> | ||
+ | AAAA: Der ganze übrige Schrott<br /> | ||
+ | YYYY: Da kommt alles hin, was nach der Liste stehen soll.<br /> | ||
+ | <!----------------------------------------------------------------------------> | ||
+ | ==Fallbeilspiel== | ||
+ | Artikel können Vorlagen enthalten, die mit Kommentar versehen sind. Beispielsweise benützt das Patenschaftsprojekt die Vorlagen für Paten und Patenkinder: '''<nowiki>{{Pate|Das Kameloid|Seit=11.11.2011|text=ich bin Pate}}</nowiki>''' (darauf beziehen sich die Erklärungen hier unten) | ||
+ | |||
+ | Die Vorlage selbst benutzt eigentlich nur den Namen (<nowiki>{{{1}}}</nowiki>) der Rest wird benutzt um eine Übersichtssetite zu generieren: | ||
+ | |||
+ | <pre><nowiki> | ||
+ | {{#dpl: | ||
+ | |namespace = Kamel_Diskussion¦Kamel | ||
+ | |uses = Vorlage:Pate | ||
+ | |include = {Pate} dpl | ||
+ | |format = ,Das Kamel ,<small>[[%PAGE%]]</small>, | ||
+ | |allowcachedresults = true | ||
+ | }} | ||
+ | </nowiki></pre> | ||
+ | |||
+ | ===[{{#var:Hpagedpl}}_Controlling_output_volume#include_contents_related_to_templates include template]=== | ||
+ | '''include = {Pate} dpl''' holt, wie im Beilspiel vorher, den Vorlageninhalt, aber statt diesen einfach auszugeben, reicht er diesen weiter an eine "Schattenvorlage" mit dem Namen '''Vorlage:Pate dpl''' (das muss nicht "dpl" sein, kann irgend ein Name sein). In der Schattenvorlage (hier Vorlage:Pate dpl) kommen die einzelnen Teile als ''<nowiki>{{{1}}}, {{{Seit}}} und {{{Text}}}</nowiki>'' an. Zusätzlich werden noch - so als Bonus - ''<nowiki>{{{%TITLE%}}}, {{{%PAGE%}}} und wenn vorhanden {{{%DATE%}}} und {{{%USER%}}}</nowiki>'' übergeben. | ||
+ | |||
+ | *Und so könnte '''Vorlage:Pate dpl''' aussehen: | ||
+ | <pre><nowiki> | ||
+ | [[{{{%PAGE%}}}|{{{1}}}]]] ist seit {{{Seit}}} dabei.<br /> | ||
+ | <span style="color:red">''{{{Text}}}''</span> | ||
+ | </nowiki></pre> | ||
+ | |||
+ | *In Gedanken würde die dpl-Abfrage etwa so aussehen: | ||
+ | ;<nowiki>|format = ,Das Kamel ,{{Pate dpl|Kameloid|Seit=11.11.2011|text=ich bin Pate|%TITLE%=Kameloid|%PAGE%=Kamel:Kameloid}}<br /><small>[[%PAGE%]]</small>,</nowiki> | ||
+ | |||
+ | Wobei der Text jeweils mit der grade gefundenen Vorlage ersetzt wird. | ||
+ | |||
+ | *Und so würd das Resultat aussehen: | ||
+ | Das Kamel [[Kamel:Kameloid|Das Kameloid]] ist seit 11.11.2011 dabei.<br /> | ||
+ | <span style="color:red">''ich bin Pate''</span><br /><small>[[Kamel:Kameloid]]</small> | ||
+ | |||
+ | ===[{{#var:Hpagedpl}}_Other_parameters#allowcachedresults allowcachedresults]=== | ||
+ | '''allowcachedresults=true''': Normalerweise werden alle Abfragen tatsächlich beim Aufruf durchgeführt. mit dieser Angabe wird erlaubt, bereits stattgefundene Abfragen, deren Inhalte noch im Servercache herumliegen, wieder zu verwenden. Dies kann aber bedeuten, dass sich das Ergebnis während einer gewissen Zeit (ne Stunde oder so) nicht verändert, auch wenn ein Mitglied der Sucheanfrage sich geändert haben sollte. Das Neuladen kann mit der Angabe "purge" (auf "bearbeiten" gehen und "edit" mit "purge" in der http-Adresse ersetzten und enter) erzwungen werden. Der Sinn ist, dass die Datenbank nicht jedesmal durchsucht werden muss, was sich in einer deutlich besseren Antwortzeit äussert. | ||
+ | |||
+ | <!----------------------------------------------------------------------------> | ||
+ | ==Fallbeilspiel== | ||
+ | Wird in einer Vorlage mehrmals das selbe dpl-Resultat gebraucht, so kann man es auch in eine Variabel packen: | ||
+ | <pre><nowiki> | ||
+ | {{#vardefine: Beispielartikel| | ||
+ | {{#dpl: | ||
+ | | uses = Vorlage:{{{1|Hw}}} | ||
+ | | randomcount = 1 | ||
+ | | format = ,• [[%PAGE%|Beispielartikel]],, | ||
+ | | noresultsheader = Keine Beispiele vorhanden | ||
+ | }}}} | ||
+ | |||
+ | Und die Ausgabe im Text per: {{#var:Beispielartikel}} | ||
+ | </nowiki></pre> | ||
+ | |||
+ | Und so was gibt es aus: | ||
+ | {{#vardefine: Beispielartikel| | ||
+ | {{#dpl: | ||
+ | | uses = Vorlage:{{{1|Hw}}} | ||
+ | | randomcount = 1 | ||
+ | | format = ,• [[%PAGE%|Beispielartikel]],, | ||
+ | | noresultsheader = Keine Beispiele vorhanden | ||
+ | }}}} | ||
+ | Hier ist er: {{#var:Beispielartikel}}<br /> | ||
+ | Und da auch: {{#var:Beispielartikel}}<br /> | ||
+ | ---- | ||
+ | ===[{{#var:Hpagedpl}}_Criteria_for_page_selection#uses uses]=== | ||
+ | Schränkt die Ausgabe ein auf, die Artikel, die die Vorlage:XXXXYYYY brauchen:<br /> | ||
+ | '''uses=Vorlage:Hw¦Vorlage:Was''' die Verknüpfung ist "und/oder".<br /> | ||
+ | '''notuses=.....''' ist das Gegenteil. Es ist nicht nur auf Vorlagen eingeschränkt, es kann auch ein anderer Namespace verwendet werden. | ||
+ | ---- | ||
+ | |||
+ | ===[{{#var:Hpagedpl}}_Criteria_for_page_selection#randomcount 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. | ||
+ | ---- | ||
+ | ===[{{#var:Hpagedpl}}_Controlling_output_volume#noresultsheader noresultsheader]=== | ||
+ | '''noresultsheader=''' wenn es kein Resultat gibt. Wenn damit zu rechnen ist, dass es auch '''kein''' Ergebnis geben kann, sollte hier was stehen (minimal ein &nbsp;), sonst wird so ne komische Meldung ausgegeben, die dann auch sichtbar ist. | ||
+ | <!----------------------------------------------------------------------------> | ||
+ | |||
+ | ==Fallbeilspiel== | ||
+ | ===[http://semeb.com/dpldemo/index.php?title=DPL:Manual_-_General_Usage_and_Invocation_Syntax#Characters_with_special_meaning 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: | 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: | ||
<pre><nowiki> | <pre><nowiki> | ||
Zeile 79: | Zeile 295: | ||
*<nowiki>|</nowiki> mit <nowiki>¦</nowiki> | *<nowiki>|</nowiki> mit <nowiki>¦</nowiki> | ||
*Newline mit \n<br /> | *Newline mit \n<br /> | ||
− | ersetzt | + | ersetzt. |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
---- | ---- | ||
===[{{#var:Hpagedpl}}_Controlling_output_volume#addpagecounter addpagecounter]=== | ===[{{#var:Hpagedpl}}_Controlling_output_volume#addpagecounter addpagecounter]=== | ||
Zeile 117: | Zeile 325: | ||
===[{{#var:Hpagedpl}}_Criteria_for_page_selection#createdby createdby]=== | ===[{{#var:Hpagedpl}}_Criteria_for_page_selection#createdby 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. | Gibt das Kamel wieder, dass den Blödsinn auf den Server geklatscht hat. Kann dann bei der Ausgabe (fromat=...) als '''%USER%''' beliebig verwurstet werden. | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
---- | ---- | ||
Zeile 130: | Zeile 332: | ||
Nahe Verwandte sind: | Nahe Verwandte sind: | ||
*'''oneresultheader=''' (wenn es genau 1 Resultat gibt) | *'''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) | + | *'''noresultsheader=''' (wenn es kein Resultat gibt. Wenn damit zu rechenen ist, dass es auch '''kein''' Ergebnis geben kann, sollte hier was stehen (minimal ein &nbsp;), sonst wird so ne komische Meldung ausgegeben, die dann auch sichtbar ist) |
---- | ---- | ||
+ | |||
===[{{#var:Hpagedpl}}_Controlling_output_format#format format]=== | ===[{{#var:Hpagedpl}}_Controlling_output_format#format format]=== | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
'''format =''' | '''format =''' | ||
Die überschrift der Tabelle | Die überschrift der Tabelle | ||
Zeile 173: | Zeile 368: | ||
}} | }} | ||
+ | ---- | ||
===[{{#var:Hpagedpl}}_Criteria_for_page_selection#linksto linksto]=== | ===[{{#var:Hpagedpl}}_Criteria_for_page_selection#linksto linksto]=== | ||
− | '''<nowiki>linksto={{{1|Holzweg}}}</nowiki>''' sucht nach allen Artikeln (oder sonst was, ja nach Namespace) das auf | + | '''<nowiki>linksto={{{1|Holzweg}}}</nowiki>''' sucht nach allen Artikeln (oder sonst was, ja nach Namespace) das auf die Seite <nowiki>{{{1|Holzweg}}}</nowiki> linkt. |
+ | <!----------------------------------------------------------------------------> | ||
− | == | + | ==Fallbeilspiel== |
− | + | Ein geniales Konstrukt (neben anderen sonderbaren Dingen) kommt bei der Gaga-Wahl zum Einsatz:<br /> | |
+ | Um die Abgegebenen Stimmen zu Zählen wird folgender Trick verwendet: | ||
+ | <pre><nowiki> | ||
+ | {{#vardefine: pro|0}}{{#vardefine: contra|0}} | ||
− | + | {{devnull| | |
− | + | {{#dpl: | |
− | + | |title={{FULLPAGENAME}} | |
+ | |include={Wahl}:Stimmen | ||
+ | |skipthispage=no | ||
+ | }} | ||
+ | }} | ||
+ | </nowiki></pre> | ||
+ | Nebst Kleinkram enthält die [[Vorlage:Pro]] (und AnasagtdieWahrheit dazu auch die Vorlage Contra) folgendes: | ||
<pre><nowiki> | <pre><nowiki> | ||
− | {{# | + | {{#vardefine: pro|{{#expr: {{#var:pro}} +1 }} |
− | | | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | }} | ||
</nowiki></pre> | </nowiki></pre> | ||
− | Und | + | Und was soll daran genital sein?<br /> |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
+ | Zuerst wird mit '''<nowiki>{{#vardefine: pro|0}}{{#vardefine: contra|0}}</nowiki>''' die Variable '''pro''' und die '''contra''' auf 0 gesetzt. Danach sucht dpl-Routine nach dem '''<nowiki>title={{FULLPAGENAME}}</nowiki>''' (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). | ||
---- | ---- | ||
===[{{#var:Hpagedpl}}_Controlling_output_volume#include include]=== | ===[{{#var:Hpagedpl}}_Controlling_output_volume#include include]=== | ||
− | + | Mit '''<nowiki>include={Wahl}:Stimmen</nowiki>''' wird nun der Teil der Wahlvorlage, der die <nowiki>{{Pro}} und {{Contra}}</nowiki> enthält aufgerufen, bzw. ausgeführt. Dh. alle Pro&Contra Vorlagen werden aufgerufen und die dort enthaltene Anweisung '''<nowiki>{{#vardefine: pro|{{#expr: {{#var:pro}} +1 }}</nowiki>''' (Variable pro=pro+1) ausgeführt. Da der Aufruf auch Text erzeugt, wird die Ausgabe in einen sog. Nulldevice geschrieben '''[http://en.wikipedia.org/wiki//dev/null Vorlage:devnull]''' der diesen sauber entsorgt. | |
− | |||
− | '''include = { | ||
− | |||
− | |||
− | |||
− | ''' | ||
− | |||
− | |||
− | |||
+ | Die entsprechende Seite müsste dann sowas enthalten: | ||
<pre><nowiki> | <pre><nowiki> | ||
− | {{ | + | {{Wahl|Stimmen= |
− | | | + | {{pro|}} |
− | | | + | {{pro|}} |
− | + | {{contra|}} | |
− | | | ||
}} | }} | ||
</nowiki></pre> | </nowiki></pre> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
---- | ---- | ||
− | ===[{{#var:Hpagedpl}} | + | ===[{{#var:Hpagedpl}}_Criteria_for_page_selection#skipthispage 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. |
− | + | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
==Probleme & Lösungen== | ==Probleme & Lösungen== | ||
Zeile 341: | Zeile 462: | ||
}} | }} | ||
</nowiki></pre> | </nowiki></pre> | ||
− | übergibt das Datum an die aufrufende Routine bzw. Vorlage | + | übergibt das Datum an die aufrufende Routine bzw. Vorlage. |
+ | |||
+ | '''Bemerkung:''' Der Unterschied zwischen %TITLE% und %PAGE% ist der %NAMESPACE% wobei %PAGE%=%NAMESPACE%<big>''':'''</big>%TITLE%. Je nachdem, was man in der SubVorlage braucht, ist das entsprechende zu verwenden. Für '''title=''' ''muss'' der Namespace (wenn nicht Artikel) angegeben werden. für '''titlematch=''' ''darf'' er nicht angegeben werden. Als Beispiel, würde die "TESTVorlage" keine Bilder finden. | ||
+ | |||
+ | ==[{{#var:Hpagedpl}}_Controlling_output_format#replaceintitle replaceintitle]== | ||
+ | Diesem wurde ein eigenes Kapitel geopfert, da es das auch braucht...<br /> | ||
+ | Allgemeine Form: '''replaceintitle = /RegExp (der Suchbegriff)/ , Ersatzbegriff''' | ||
+ | |||
+ | Einige Links, die sich mit dem Thema "RegExp" ("Regular Expression" befassen):<br /> | ||
+ | [http://www.tutorials.de/forum/php-tutorials/142738-regul-re-ausdr-cke-regular-expressions-regex.html] | ||
+ | [http://de.selfhtml.org/javascript/objekte/regexp.htm] | ||
+ | [http://de.selfhtml.org/perl/sprache/regexpr.htm] | ||
+ | |||
+ | [http://www.quanetic.com/regex.php Online Tester] | ||
+ | |||
+ | Benützt wird es um die angezeigten Titel automatisch anzupassen. Bsp ausgehend von dem da: | ||
+ | <pre><nowiki> | ||
+ | {{#dpl: | ||
+ | |namespace = Kamelopedia | ||
+ | |titlematch=%BaustellenListe% | ||
+ | |format = ,\n*[[%PAGE%|%TITLE%]],, | ||
+ | }} | ||
+ | </nowiki></pre> | ||
+ | Original (ohne replaceintitle): | ||
+ | {{#dpl: | ||
+ | |namespace = Kamelopedia | ||
+ | |titlematch=%BaustellenListe% | ||
+ | |format = ,\n*[[%PAGE%|%TITLE%]],, | ||
+ | }} | ||
+ | ---- | ||
+ | Mit <big>'''<nowiki>replaceintitle = / . * \ / / ,</nowiki>'''</big> | ||
+ | *'''<big>/..../'''</big> ist die "Einklammerung" des Suchbegriffs (vergleichbar mit <nowiki><span>....</span></nowiki>) | ||
+ | *<big>'''.'''</big> bedeutet „irgend ein Zeichen“ | ||
+ | *<big>'''<nowiki>*</nowiki>'''</big> bedeutet „mehr von dem voranstehenden Zeichen“. Also '''<nowiki>.*</nowiki>''' heisst „mehr von irgend einem Zeichen“ | ||
+ | *<big>'''<nowiki>\</nowiki>'''</big> bedeutet, das darauf folgende Zeichen ist kein Steuerzeichen (Escape) | ||
+ | *<big>'''/'''</big> ist Teil des Suchbegriffs | ||
+ | *<big>''','''</big> dahinter kommt der Begriff der das Gefundene ersetzen soll. Im Bsp ist es "nichts". | ||
+ | Übersetzung: Nimm alle Zeichen die vor einem / (inkl. /) stehen und ersetze es mit nichts. Und das gibt das Folgende: | ||
+ | {{#dpl: | ||
+ | |namespace = Kamelopedia | ||
+ | |titlematch=%BaustellenListe% | ||
+ | |replaceintitle=/.*\//, | ||
+ | |format = ,\n*[[%PAGE%|%TITLE%]],, | ||
+ | }} | ||
+ | ---- | ||
+ | Ein weniger intelligentes Bsp ist dieses:<br /> | ||
+ | <big>'''<nowiki>replaceintitle = / Bau ¦ L / , @</nowiki>'''</big> | ||
+ | *<big>'''Bau'''</big> bedeutet „Bau“ | ||
+ | *<big>'''<nowiki>¦</nowiki>'''</big> ist der Trenner zwischen 2 Suchbegriffen. (normalerweise | aber da in einer dpl-Abfrage muss ¦ genommen werden) | ||
+ | *<big>'''<nowiki>L</nowiki>'''</big> bedeutet „L“ | ||
+ | *<big>''','''</big> dahinter kommt der Begriff der das Gefundene ersetzen soll. Im Bsp ist es ein "@". | ||
+ | bersetzung: Such nach "Bau" und/oder "L" und ersetze es mit "@". Und das gibt das Folgende: | ||
+ | {{#dpl: | ||
+ | |namespace = Kamelopedia | ||
+ | |titlematch=%BaustellenListe% | ||
+ | |replaceintitle=/Bau¦L/,@ | ||
+ | |format = ,\n*[[%PAGE%|%TITLE%]],, | ||
+ | }} | ||
+ | ---- | ||
+ | Ein genauso unbrauchbares Bsp ist dieses:<br /> | ||
+ | <big>'''<nowiki>replaceintitle = / [ abcd ] / i, <small><small>Schrott</small></small></nowiki>'''</big> | ||
+ | *<big>'''[....]'''</big> Klammert eine Auswahl ein und bedeutet „jedes einzelne Zeichen“ | ||
+ | *<big>'''<nowiki>abcd</nowiki>'''</big> sind sie zu suchenden Zeichen | ||
+ | *<big>'''<nowiki>i</nowiki>'''</big> sagt, dass Gross- & Kleinschreibung egal sind | ||
+ | *<big>''','''</big> dahinter kommt der Begriff der das Gefundene ersetzen soll. Im Bsp ist es ein "<nowiki><small><small>Schrott</small></small></nowiki>". | ||
+ | Übersetzung: Suche nach Zeichen, die entweder wie a, b, c oder d aussehen und ersetze jedes mit <nowiki><small><small>Schrott</small></small></nowiki>. Und das gibt das Folgende: | ||
+ | {{#dpl: | ||
+ | |namespace = Kamelopedia | ||
+ | |titlematch=%BaustellenListe% | ||
+ | |replaceintitle = /[abcd]/i,<small><small>Schrott</small></small> | ||
+ | |format = ,\n*[[%PAGE%|%TITLE%]],, | ||
+ | }} | ||
+ | |||
+ | ==Datumsprobleme== | ||
+ | Das Datum birgt einen Haufen an seltsamen Erscheinungen: | ||
+ | *+ 2 Stunden Problem: '''addfirstcategorydate''' zeigt eie Abweichung von 0, 1 oder 2 Stunden (wie in "Letzte Änderungen") (manchmal aber auch nur eine Minute), vermutlich je nach Sommerzeit oder Wetterlage. Wäre weiter nicht schlimm, solange man es nicht so genau wissen will, allerdings ist man bei Sachen wie '''firstrevisionsince''' darauf angewiesen, meistens funktionierts (2 stunden sind nicht viel) allerdings wirds eklig wenn addfirstcategorydate=Lastedit ist, da addfirstcategorydate + 1-2 Stunden ist und somit nichts findet. Ein weiteres Problem gibt es mit einzelnen Artikeln, zB zeigt [[Berlin]] bei addfirstcategorydate ein ca. 1,5 Jahre jüngeres Datum als der "Last edit"? Auch bei diesem Artikel ergibt die Auflistung '''allrevisionssince''' eine seltsame Reihenfolge, da die Revisions-Nummnern irgendwo durcheinander geraten sind (vielleicht durch einen Ausgrabemerge). | ||
− | + | *Sprachendivergenz: '''#time''' wäre eigentlich sehr gut geeignet, um Daten in ein gewünschtes Format zu überführen, leider versteht es nur enkish und so wird 12. Mär. 2008 zu: {{#time: Y m d|12. Mär. 2008}}. Damit limitiert sich der Einsatz ein wenig, bzw. man muss dafür sorgen, dass solche Daten nicht vorkommen. |
Aktuelle Version vom 31. März 2009, 16:44 Uhr
Nützliche Links[<small>bearbeiten</small>]
- dpl-Manual
- #if, #switch #time (Hilfe:Vorlagenprogrammierung)
- Variabeln und ihre Benützung
- Eine Sammlung aller %xxxyyy% Variablen
dpl in 20 Minuten[<small>bearbeiten</small>]
dpl kann so aufgerufen werden (grosser Nachteil {{{xy}}} und {{xy}} kann nicht benutzt werden (ähh, letzten Gerüchten zu Folge scheint die Aussage nicht ganz zu stimmen...)): [1]
<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! }}
Fallbeilspiel[<small>bearbeiten</small>]
Für kleinere Listings bietet sich das Inline-Format an. Die 2 Varianten ergeben genau das selbe Resultat:
Variante 1: {{#dpl: |namespace = |category = Baum |format = ,[[%PAGE%|%TITLE%]],, |inlinetext = <nowiki>, </nowiki> }} Variante 2: {{#dpl: |namespace = |category = Baum |mode = inline |inlinetext = <nowiki>, </nowiki> }}
Eine 3te Variante wäre format = ,[[%PAGE%|%TITLE%]],<nowiki>, </nowiki>, allerdings würde am Schluss der Liste dann auch ein ", " stehen, was eigentlich unerwünscht ist.
Und so siehts aus:
Namespace[<small>bearbeiten</small>]
- 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.
category[<small>bearbeiten</small>]
Schränkt die Suche auf eine oder mehrere Kategorien ein
inlinetext[<small>bearbeiten</small>]
Inlinetext ist der Text zwischen den ausgegebenen Einträgen. Als einziger mir bekannter Parameter muss er nach dem format= (falls verwendet) stehen. Werden Leerzeichen vor und/oder nach gewünscht, muss man sie tarnen: Entweder als , mit "nowiki" ausgeklammert oder mit   ersetzen. Der Nachteil bei "nbsp" ist, dass er "no breaking" ist und die Inleinausgaben entsprechend ungebrochen aussieht.
Fallbeilspiel[<small>bearbeiten</small>]
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 = |titlematch = Oxidation |include = #{{{1|Geschichte}}}[100] }}
Und so siehts dann aus:
- Oxidation Auch die Oxidation fällt in das dunkle Kapitel der staatlichen Geheimhaltung. ..→
include[<small>bearbeiten</small>]
Include kann verschiedene Sachen includen, in diesem Bsp geht es um Sektionen.
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.
titlematch[<small>bearbeiten</small>]
titlematch ist in deisem Bsp eigentlich missbraucht, wenn nur eine spezivische Seite aufgerufen werden soll, würde sich "titel=" eher anbieten, ausser es gibt ein Problem, den Namespace zu deklarieren. titlematch wird verwendet um Seiten zu finden, die eine Gemeinsamkeit im Namen haben zB: Für die Suchen nach Unterseiten von Kamelen (ohne sie auf den Rücken zu drehen...) würde man folgendes Verwenden:
titlematch = Kameloid/% wobei das % anzeigt, dass es da noch weiter gehen kann. Eine ähnliche Situation wäre die Suche nach Lesezirkelseiten:
titlematch = %/Lesezirkel
Fallbeilspiel[<small>bearbeiten</small>]
Artikel können Vorlagen enthalten, die mit Kommentar versehen sind. Beispielsweise benützt die Artikelschmiede 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
title[<small>bearbeiten</small>]
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[<small>bearbeiten</small>]
addfirstcategorydate = true ist auch ein Feature. Wann der Artikel in die Kategorie kam.
ordermethod[<small>bearbeiten</small>]
ordermethod = categoryadd: Die Ausgabe ist nach dem Datum sortiert, wann das Teil in die Kat geschubbst wurde.
count[<small>bearbeiten</small>]
count=10 sagt, wieviele Treffer insgesamt angezeigt werden sollen. In diesem Bsp völliger Nonsens, da es maximal 1 geben kann.
include[<small>bearbeiten</small>]
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[<small>bearbeiten</small>]
secseparators= vor S1, nach S1, vor S2, nach S2.... sagt, welche Zeichen vor und nach jeder Sektion des include hinzuzufügen werden sollen. {Schmiede}:2:1 wird aber als eine Sektion behandel und deshalb können :2 und :1 nicht getrennt werden. Eine Variante wird im nächsten Beilspiel behandelt.
format[<small>bearbeiten</small>]
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.
Fallbeilspiel[<small>bearbeiten</small>]
Artikel können Vorlagen enthalten, die mit Kommentar versehen sind. Beispielsweise benützt das Patenschaftsprojekt die Vorlagen für Paten und Patenkinder: {{Pate|Das Kameloid|Seit=11.11.2011|text=ich bin Pate}} (darauf beziehen sich die Erklärungen hier unten)
Die Vorlage selbst benutzt eigentlich nur den Namen ({{{1}}}) der Rest wird benutzt um eine Übersichtssetite zu generieren:
{{#dpl: |namespace = Kamel_Diskussion¦Kamel |uses = Vorlage:Pate |include = {Pate} dpl |format = ,Das Kamel ,<small>[[%PAGE%]]</small>, |allowcachedresults = true }}
include template[<small>bearbeiten</small>]
include = {Pate} dpl holt, wie im Beilspiel vorher, den Vorlageninhalt, aber statt diesen einfach auszugeben, reicht er diesen weiter an eine "Schattenvorlage" mit dem Namen Vorlage:Pate dpl (das muss nicht "dpl" sein, kann irgend ein Name sein). In der Schattenvorlage (hier Vorlage:Pate dpl) kommen die einzelnen Teile als {{{1}}}, {{{Seit}}} und {{{Text}}} an. Zusätzlich werden noch - so als Bonus - {{{%TITLE%}}}, {{{%PAGE%}}} und wenn vorhanden {{{%DATE%}}} und {{{%USER%}}} übergeben.
- Und so könnte Vorlage:Pate dpl aussehen:
[[{{{%PAGE%}}}|{{{1}}}]]] ist seit {{{Seit}}} dabei.<br /> <span style="color:red">''{{{Text}}}''</span>
- In Gedanken würde die dpl-Abfrage etwa so aussehen:
- |format = ,Das Kamel ,{{Pate dpl|Kameloid|Seit=11.11.2011|text=ich bin Pate|%TITLE%=Kameloid|%PAGE%=Kamel:Kameloid}}<br /><small>[[%PAGE%]]</small>,
Wobei der Text jeweils mit der grade gefundenen Vorlage ersetzt wird.
- Und so würd das Resultat aussehen:
Das Kamel Das Kameloid ist seit 11.11.2011 dabei.
ich bin Pate
Kamel:Kameloid
allowcachedresults[<small>bearbeiten</small>]
allowcachedresults=true: Normalerweise werden alle Abfragen tatsächlich beim Aufruf durchgeführt. mit dieser Angabe wird erlaubt, bereits stattgefundene Abfragen, deren Inhalte noch im Servercache herumliegen, wieder zu verwenden. Dies kann aber bedeuten, dass sich das Ergebnis während einer gewissen Zeit (ne Stunde oder so) nicht verändert, auch wenn ein Mitglied der Sucheanfrage sich geändert haben sollte. Das Neuladen kann mit der Angabe "purge" (auf "bearbeiten" gehen und "edit" mit "purge" in der http-Adresse ersetzten und enter) erzwungen werden. Der Sinn ist, dass die Datenbank nicht jedesmal durchsucht werden muss, was sich in einer deutlich besseren Antwortzeit äussert.
Fallbeilspiel[<small>bearbeiten</small>]
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 die Ausgabe im Text per: {{#var:Beispielartikel}}
Und so was gibt es aus:
Hier ist er: Keine Beispiele vorhanden
Und da auch: Keine Beispiele vorhanden
uses[<small>bearbeiten</small>]
Schränkt die Ausgabe ein auf, die Artikel, die die Vorlage:XXXXYYYY brauchen:
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.
randomcount[<small>bearbeiten</small>]
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.
noresultsheader[<small>bearbeiten</small>]
noresultsheader= wenn es kein Resultat gibt. Wenn damit zu rechnen ist, dass es auch kein Ergebnis geben kann, sollte hier was stehen (minimal ein ), sonst wird so ne komische Meldung ausgegeben, die dann auch sichtbar ist.
Fallbeilspiel[<small>bearbeiten</small>]
Ersatz-Zeichen[<small>bearbeiten</small>]
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.
addpagecounter[<small>bearbeiten</small>]
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[<small>bearbeiten</small>]
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[<small>bearbeiten</small>]
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[<small>bearbeiten</small>]
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[<small>bearbeiten</small>]
Gibt das Kamel wieder, dass den Blödsinn auf den Server geklatscht hat. Kann dann bei der Ausgabe (fromat=...) als %USER% beliebig verwurstet werden.
resultsheader[<small>bearbeiten</small>]
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 (minimal ein ), sonst wird so ne komische Meldung ausgegeben, die dann auch sichtbar ist)
format[<small>bearbeiten</small>]
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[<small>bearbeiten</small>]
linksto={{{1|Holzweg}}} sucht nach allen Artikeln (oder sonst was, ja nach Namespace) das auf die Seite {{{1|Holzweg}}} linkt.
Fallbeilspiel[<small>bearbeiten</small>]
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}} {{devnull| {{#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[<small>bearbeiten</small>]
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:devnull der diesen sauber entsorgt.
Die entsprechende Seite müsste dann sowas enthalten:
{{Wahl|Stimmen= {{pro|}} {{pro|}} {{contra|}} }}
skipthispage[<small>bearbeiten</small>]
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.
Probleme & Lösungen[<small>bearbeiten</small>]
Problem 1[<small>bearbeiten</small>]
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[<small>bearbeiten</small>]
{{#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.
Bemerkung: Der Unterschied zwischen %TITLE% und %PAGE% ist der %NAMESPACE% wobei %PAGE%=%NAMESPACE%:%TITLE%. Je nachdem, was man in der SubVorlage braucht, ist das entsprechende zu verwenden. Für title= muss der Namespace (wenn nicht Artikel) angegeben werden. für titlematch= darf er nicht angegeben werden. Als Beispiel, würde die "TESTVorlage" keine Bilder finden.
replaceintitle[<small>bearbeiten</small>]
Diesem wurde ein eigenes Kapitel geopfert, da es das auch braucht...
Allgemeine Form: replaceintitle = /RegExp (der Suchbegriff)/ , Ersatzbegriff
Einige Links, die sich mit dem Thema "RegExp" ("Regular Expression" befassen):
[3]
[4]
[5]
Benützt wird es um die angezeigten Titel automatisch anzupassen. Bsp ausgehend von dem da:
{{#dpl: |namespace = Kamelopedia |titlematch=%BaustellenListe% |format = ,\n*[[%PAGE%|%TITLE%]],, }}
Original (ohne replaceintitle):
- BaustellenListe/Stub
- BaustellenListe/Text fehlt
- BaustellenListe/Überarbeiten
- BaustellenListe/Magere Artikel
- BaustellenListe/Humorlose Artikel
- BaustellenListe/Alle
- BaustellenListe/Hufschmiede
- BaustellenListe/Aus 2 mach 1
- BaustellenListe/Zur Beerdigung vorgeschlagener Artikel
Mit replaceintitle = / . * \ / / ,
- /..../ ist die "Einklammerung" des Suchbegriffs (vergleichbar mit <span>....</span>)
- . bedeutet „irgend ein Zeichen“
- * bedeutet „mehr von dem voranstehenden Zeichen“. Also .* heisst „mehr von irgend einem Zeichen“
- \ bedeutet, das darauf folgende Zeichen ist kein Steuerzeichen (Escape)
- / ist Teil des Suchbegriffs
- , dahinter kommt der Begriff der das Gefundene ersetzen soll. Im Bsp ist es "nichts".
Übersetzung: Nimm alle Zeichen die vor einem / (inkl. /) stehen und ersetze es mit nichts. Und das gibt das Folgende:
- Stub
- Text fehlt
- Überarbeiten
- Magere Artikel
- Humorlose Artikel
- Alle
- Hufschmiede
- Aus 2 mach 1
- Zur Beerdigung vorgeschlagener Artikel
Ein weniger intelligentes Bsp ist dieses:
replaceintitle = / Bau ¦ L / , @
- Bau bedeutet „Bau“
- ¦ ist der Trenner zwischen 2 Suchbegriffen. (normalerweise | aber da in einer dpl-Abfrage muss ¦ genommen werden)
- L bedeutet „L“
- , dahinter kommt der Begriff der das Gefundene ersetzen soll. Im Bsp ist es ein "@".
bersetzung: Such nach "Bau" und/oder "L" und ersetze es mit "@". Und das gibt das Folgende:
- @stellen@iste/Stub
- @stellen@iste/Text fehlt
- @stellen@iste/Überarbeiten
- @stellen@iste/Magere Artikel
- @stellen@iste/Humorlose Artikel
- @stellen@iste/Alle
- @stellen@iste/Hufschmiede
- @stellen@iste/Aus 2 mach 1
- @stellen@iste/Zur Beerdigung vorgeschlagener Artikel
Ein genauso unbrauchbares Bsp ist dieses:
replaceintitle = / [ abcd ] / i, <small><small>Schrott</small></small>
- [....] Klammert eine Auswahl ein und bedeutet „jedes einzelne Zeichen“
- abcd sind sie zu suchenden Zeichen
- i sagt, dass Gross- & Kleinschreibung egal sind
- , dahinter kommt der Begriff der das Gefundene ersetzen soll. Im Bsp ist es ein "<small><small>Schrott</small></small>".
Übersetzung: Suche nach Zeichen, die entweder wie a, b, c oder d aussehen und ersetze jedes mit <small><small>Schrott</small></small>. Und das gibt das Folgende:
- SchrottSchrottustellenListe/StuSchrott
- SchrottSchrottustellenListe/Text fehlt
- SchrottSchrottustellenListe/ÜSchrotterSchrottrSchrotteiten
- SchrottSchrottustellenListe/MSchrottgere Schrottrtikel
- SchrottSchrottustellenListe/Humorlose Schrottrtikel
- SchrottSchrottustellenListe/Schrottlle
- SchrottSchrottustellenListe/HufsSchrotthmieSchrotte
- SchrottSchrottustellenListe/Schrottus 2 mSchrottSchrotth 1
- SchrottSchrottustellenListe/Zur SchrotteerSchrottigung vorgesSchrotthlSchrottgener Schrottrtikel
Datumsprobleme[<small>bearbeiten</small>]
Das Datum birgt einen Haufen an seltsamen Erscheinungen:
- + 2 Stunden Problem: addfirstcategorydate zeigt eie Abweichung von 0, 1 oder 2 Stunden (wie in "Letzte Änderungen") (manchmal aber auch nur eine Minute), vermutlich je nach Sommerzeit oder Wetterlage. Wäre weiter nicht schlimm, solange man es nicht so genau wissen will, allerdings ist man bei Sachen wie firstrevisionsince darauf angewiesen, meistens funktionierts (2 stunden sind nicht viel) allerdings wirds eklig wenn addfirstcategorydate=Lastedit ist, da addfirstcategorydate + 1-2 Stunden ist und somit nichts findet. Ein weiteres Problem gibt es mit einzelnen Artikeln, zB zeigt Berlin bei addfirstcategorydate ein ca. 1,5 Jahre jüngeres Datum als der "Last edit"? Auch bei diesem Artikel ergibt die Auflistung allrevisionssince eine seltsame Reihenfolge, da die Revisions-Nummnern irgendwo durcheinander geraten sind (vielleicht durch einen Ausgrabemerge).
- Sprachendivergenz: #time wäre eigentlich sehr gut geeignet, um Daten in ein gewünschtes Format zu überführen, leider versteht es nur enkish und so wird 12. Mär. 2008 zu: Fehler: Ungültige Zeitangabe. Damit limitiert sich der Einsatz ein wenig, bzw. man muss dafür sorgen, dass solche Daten nicht vorkommen.