DokuWiki unterstützt die Verwendung von “Seitengerüsten” (freie Übersetzung scaffolding) Dies erlaubt es uns, je Namensraum ein “Grundgerüst” zu definieren, auf dessen Grundlage alle neuen Seiten im betreffendem Namensraum erstellt werden. Man könnte auch von namensraumspezifischen Seitenvorlagen sprechen.
Um dies mit einem Beispiel zu verdeutlichen, stellen wir uns vor, wir wollen auf einfache & schnelle Weise in DokuWiki Adressen erfassen. Wir erstellen den Namensraum adressen
, welcher uns als Adressordner dient. Nun wollen wir beim Anlegen neuer Seiten in diesem Namensraum eine vordefinierte Tabelle haben, welche nur noch mit Daten gefüllt werden muss.
Das Konzept der Namensraumvorlagen (namespace templates) erlaubt es uns in einem solchen Fall, eine Wikiseite mit entsprechender Tabelle anzulegen & als Vorlage für alle neuen Wikiseiten im Namensraum adressen
zu definieren.
Dies basiert auf DokuWikis integrierter Prüfung auf das Vorhandensein von Namensraumvorlagen (namespace templates) bei jeder Seitenerstellung. Hierbei wird im angegebenen Zielnamensraum der neuen Seite stadardmäßig nach folgenden Dateien gesucht:
_template
: die Standardvorlage für den Namensraum__template
(zwei einleitende Unterstriche): entspricht der ersten Variante, gilt darüber hinaus jedoch auch in allen Unternamensräumen, wobei man auch von Vererbung sprichtWenn eine neue Seite angelegt wird, schaut DokuWiki, ob eine Template-Datei existiert, und zeigt dieses im Editor an. Die Template-Dateien sind in Wiki-Sprache verfasst und als .txt Datei gespeichert.
Zwei Arten von Template-Dateien können benutzt werden:
_template.txt
, Standardvorlage explizit für den Namensraum, in welchem sie vorzufinden ist__template.txt
entspricht der ersten Variante, gilt darüber hinaus jedoch auch in allen Unternamensräumen, wobei man auch von Vererbung sprichtEin Weg um eine Template-Datei zu erstellen:
data
. In diesem befindet sich ein Ordner pages
, der die Wiki-Seiten als txt-Dateien und ggf. Namensräume als weitere Unterordner enthält. Kopiere die im ersten Schritt erstellte Seite und benenne sie und wie oben beschrieben (also _template.txt
oder __template.txt
). Der Inhalt der Datei ist normale Wiki Sprache.
Innerhalb der Datei können auch einige Ersetzungsmuster benutzt werden, die das Template dynamischer gestalten.
@ID@ | vollständige ID der Seite |
---|---|
@NS@ | Namensraum der Seite |
@CURNS@ | letztes Teilstück vom Namensraum der Seite |
@PAGE@ | Seitenname (ID ohne Namensraum; Unterstriche werden durch Leerzeichen ersetzt) |
@!PAGE@ | Das gleiche wie oben, der erste Buchstabe des ersten Wortes ist großgeschrieben |
@!!PAGE@ | Das gleiche wie oben, der erste Buchstabe von jedem Wort ist großgeschrieben |
@!PAGE!@ | Das gleiche wie oben, alle Buchstabe sind großgeschrieben |
@FILE@ | Seiten Name (ID ohne Namensraum, Unterstriche bleiben erhalten) |
@!FILE@ | Das gleiche wie oben, der erste Buchstabe des ersten Wortes ist großgeschrieben |
@!FILE!@ | Das gleiche wie oben, der erste Buchstabe von jedem Wort ist großgeschrieben |
@USER@ | Die ID des Benutzers der die Seite erstellt |
@NAME@ | Der Name des Benutzers, welcher die Seite erstellt |
@MAIL@ | Die E-Mail Adresse des Benutzers, welcher die Seite erstellt |
@DATE@ | Datum und Uhrzeit der Erstellung der neuen Seite |
Es ist auch möglich strftime als Platzhalter zu verwenden, um die Zeit der Seitenerstellung in einem anderen Format einzufügen. Um das Zeichen %
im Template zu benutzen, muss es doppelt notiert werden.
Die Datei _template.txt
kann nicht aus DokuWiki heraus editiert werden – nur jemand mit Schreibrechten innerhalb der DokuWiki Ordnern (für gewöhnlich ein Administrator mit FTP oder WebDAV zugriff) kann die Templates ändern.
Es gibt zwei Tricks um dies zu umgehen. Für einen muss ein symlink gesetzt werden, für den anderen ist es nötig den Code zu ändern.
Auf diese Weise können die Templates in einem speziellen Namensraum gespeichert werden.
Mit einem Symlink zu diesem Namensraum können diese Seiten als Template benutzt werden. Um das Template schreibgeschützt anzulegen ist die andere Variante besser geeignet.
Ich habe eine andere Methode benutzt: Erstelle einetemplate.txt
welche ein symlink zu_template.txt
, im eigenen Namensraum ist.
(cd /var/www/html/dokuwiki/data/pages/namespace/something ; ln -s _template.txt template.txt
).
Auf diese Art kann ich Templates editieren, in dem ich auf eine Seite in einem Namensraum gehe und den Seitennamen in der URL durch “template” ersetze.
(z. B.http://www.mywiki.somewhere/dokuwiki/doku.php?id=namespace:something:template
)
So können softlinks benutzt werden, nur ein wenig anders :)
Um Softlinks zu benutzen, ist es manchmal nötig die Option “FollowSymLinks” auf den Verzeichnisbaum zu setzen.
Bei dieser Methode sind alle Templates für jeden mit Schreibrechten editierbar.
Öffne die Datei inc/common.php
und ändere den Standard-Template-Namen in der Nähe von Zeile 1056 + 1057 1) auf “template.txt” (oder aaa_template.txt).
Beispiel:
/* Modifikation, damit man ein Template pro Namensraum definieren kann; siehe https://www.dokuwiki.org/de:namespace_templates#frei_editierbare_templates_fuer_alle_benutzer if(file_exists($path.'/_template.txt')) { $data['tplfile'] = $path.'/_template.txt'; wurde ersetzt durch: */ if(file_exists($path.'/template.txt')) { $data['tplfile'] = $path.'/template.txt'; /* Ende der Modifikation */
Jetzt kann jeder Benutzer mit Schreibrechten in einem Namensraum eine Seite “template” anlegen, die als Template benutzt wird.
Es mag interessant sein Unterstützung für das @GROUPS@
Keyword zu haben um die Gruppe des Benutzers, welcher die Seite erstellt zu berücksichtigen. Der folgende Patch impementiert dies.
Index: dokuwiki-2009-02-14/inc/common.php =================================================================== --- dokuwiki-2009-02-14.orig/inc/common.php 2009-11-19 11:58:41.000000000 +0100 +++ dokuwiki-2009-02-14/inc/common.php 2010-01-05 10:17:35.000000000 +0100 @@ -840,6 +840,7 @@ '@USER@', '@NAME@', '@MAIL@', + '@GROUPS@', '@DATE@', ), array( @@ -855,6 +856,7 @@ $_SERVER['REMOTE_USER'], $INFO['userinfo']['name'], $INFO['userinfo']['mail'], + implode(" ", $INFO['userinfo']['grps']), $conf['dformat'], ), $tpl);
— Olivier Mehani 2010/01/05 10:19