2010-08-12 9 views
6

Eine der interessanteren "Programmiersprachen", mit denen ich mich in letzter Zeit beschäftigt habe, sind MediaWiki-Vorlagen. Sie können erstaunlich viel mit der begrenzten Syntax tun, die sie Ihnen geben, aber in letzter Zeit bin ich auf ein Problem gestoßen, das mich stört: die Verwendung von String-Funktionen für Template-Argumente. Was ich möchte, (etwas vereinfacht) zu tun ist:String-Funktionen in MediaWiki-Vorlage?

{{myTemp|a=1,2,3,4}} 

dann eine Vorlage schreiben, die eine Art von Magie wie

You told me _a_ starts with {{#split:{{{a}}}, ",", 0}} 

Derzeit tun kann, kann ich dies tun, mit eingebetteten JavaScript aktivieren, Capture Regexp Matching und document.write, aber a) es ist riesig, b) es ist hacky, und c) es wird schrecklich brechen, wenn jemand javascript ausschaltet. (Beachten Sie, dass „Split“ ist nur ein Beispiel; verketten, Capturing-regexp Matching usw., wäre noch besser)

erkenne ich die rechts Lösung der Anrufer rufen Sie die Vorlage mit getrennten Argumente haben, aber Aus verschiedenen Gründen wäre das in meinem speziellen Fall schwierig. Wenn es einfach nicht möglich ist, denke ich, das ist die Antwort, aber wenn ist ein Weg, um Vorlagen tun String-Manipulation am Back-End, das wäre toll.

+0

möchten Sie eine der Antworten akzeptieren und einige Up-Voting durchführen? – Wikis

+0

Beide gute Antworten, aber ich wählte Retel speziell, weil ich nach Regexp-Unterstützung gesucht hatte – Coderer

Antwort

6

Verketten ist einfach. Um x = y concat z zuweisen

{{#vardefine:x|{{{y}}}{{{z}}}}} 

Und Mark Antwort hinzuzufügen, gibt es auch RegexParserFunctions

Ceterum censeo: MediaWiki wird nie nicht Hacky sein.

+0

Welche Erweiterung brauche ich für #vardef? Scheint, an My MediaWiki Installation nicht zu arbeiten. –

+0

Weder auf http://en.wikipedia.org. –

+1

Sorry, das war ein Tippfehler. Die Vorlage heißt #vardefine. – relet