2017-07-18 2 views
0

Ich versuche, eine Vorlage zu erstellen, die die Uhrzeit anzeigt, zu der sie platziert wurde. Ich versuchte dies:Wie kann ich ein magisches Wort nur beim Übernehmen einer Vorlage ohne #invoke ersetzen?

This is a template ({{<includeonly>subst:</includeonly>CURRENTTIMESTAMP}}) 

aber wenn transkludiert würde es zeigen sich als This is a template ({{subst:CURRENTTIMESTAMP}}) stattdessen den Zeitstempel zu ersetzen. Ich versuchte dann

This is a template ({{{{{|safesubst:}}}CURRENTTIMESTAMP}}) 

aber das hat es nicht ersetzt; Der Zeitstempel würde sich ständig aktualisieren. Als nächstes versuchte ich

This is a template ({{<includeonly>{{{|safesubst:}}}</includeonly>CURRENTTIMESTAMP}}) 

aber keine Würfel.

Ich weiß, dass es mit {{#invoke:}} möglich ist, aber ich habe diese Option nicht. Könnte mir jemand helfen?

+0

Wie würde die Vorlage wissen, wenn eine Seite, die sie abschließt, bearbeitet wurde? Sie können die Vorlage substrieren, dann wird Ihr erstes Beispiel funktionieren. Wo sonst würden Sie erwarten, dass der Zeitstempel gespeichert wird? – Tgr

+0

@Tgr Das Ziel ist es, dass die Vorlage die Zeit speichert, wenn sie zuerst platziert wird (transcluded _or_ substituted), da das Wiki, an dem ich arbeite, nicht viel über Substitution weiß. –

+0

Nun, Sie werden das nicht mit einfacher Transklusion tun können. – Tgr

Antwort

0

Überlegen Sie, wie Vorlagen gespeichert werden. Wenn Sie die Vorlage rekursiv überschreiben, wird der Inhalt der Vorlage im Wikitext der einschließenden Seite gespeichert, wobei CURRENTTIMESTAMP durch den tatsächlichen Zeitstempel ersetzt wird. Wenn Sie die Vorlage nicht ersetzen, enthält der Wikitext nur {{MyTemplate}} und der Zeitstempel der Bearbeitung wird nirgendwo gespeichert. Wenn der Parser den Artikel rendert und auf CURRENTTIMESTAMP stößt, wird nur der aktuelle Zeitstempel verwendet. Es gibt keinen Weg, #invoke oder nicht.

Was Sie tun können, ist, den Zeitstempel zu einem Parameter zu machen, so dass Sie auf der entsprechenden Seite {{MyTemplate|{{subst:CURRENTTIMESTAMP}}}} schreiben und dann der Zeitstempel auf der Seite gespeichert wird. Sie können eine Wrapper-Vorlage mit genau diesem Inhalt erstellen, sodass Benutzer nur {{subst:MyTemplateWrapper}} eingeben müssen, was etwas einfacher ist. Sie können die Vorlage sogar dazu bringen, einen Fehler anzuzeigen/eine Fehlerkategorie hinzufügen, wenn sie ohne Subs verwendet wird, obwohl that's a bit more involved.

+0

Danke! Ich denke, ich gehe mit der zweiten Methode, die du erwähnt hast ('{{subst: TemplateWrapper}}') und füge eine Fehlermeldung hinzu, wenn du sie überspringst. Da dies meine Frage beantwortet hat, werde ich es als akzeptiert markieren :) –

+0

Tatsächlich fand ich heraus, dass '{{{{{safesubst:}}} CURRENTIMESTAMP}}' besser funktionierte (bearbeitet, um das zu zeigen). –

Verwandte Themen