Diese Seite beschreibt die Skinvorlagendateien (.tmpl), die benutzt werden, um PmWikis Skins (Oberflächen) zu erstellen und wie PmWiki sie benutzt. Wie in der Skins-Seite beschrieben, ist ein Skin eine Sammlung von Dateien, die das Layout von PmWiki-Seiten beschreiben. Jedes Skin muss eine Vorlagendatei enthalten, die das Skelett für die Anzeige einer PmWiki-Seite liefert. (→ Layout anpassen)
Wenn man den Wert von $Skin
in einer Konfigurationsdatei wie local/config.php wie hier setzt,
## Benutze das 'Foo'-Skin. $Skin = 'foo';
dann weist man PmWiki an, nach einem Skin mit diesem Namen zu suchen und es zu benutzen. Das Ergebnis der Suche mündet gewöhnlich darin, dass PmWiki eine Vorlagendatei aus dem zugehörigen Skin-Verzeichnis dieses Namens lädt. In diesem Beispiel würde es wahrscheinlich die Datei pub/skins/foo/foo.tmpl
sein.
Der wirkliche Weg, den PmWiki beschreitet, wenn es eine Vorlage sucht, ist wichtig für jene, die ein komplexes Skin entwickeln, deshalb beschreiben wir hier, welche Schritte das sind:
Der Standardwert für $SkinLibDirs
lässt server-seitig und client-seitig Dateien in dem gleichen öffentlich zugänglichen Verzeichnis speichern. Das heißt, $SkinDir
und $SkinDirUrl
weisen auf das gleiche Verzeichnis. Das ist so gemacht für die Bequemlichkeit sowohl der Entwickler der Skins als auch die der Nutzer der Skins, aber das muss nicht so sein.
Es hat den Seiteneffekt, dass es möglich ist, einen URL zu konstruieren (wie diesen hier), der jemandem gestattet, den Inhalt der .tmpl
- oder der .php
-Datei anzusehen, die ein Skin benutzt. Das ist gewöhnlich kein Problem, da Skin-Dateien eigentlich keine sensitiven Daten enthalten.
Doch ein Purist möchte vielleicht seine .tmpl
- und seine .php
-Dateien aus den Verzeichnissen verschieben, die als URL erreichbar sind, und ändert sein $SkinLibDirs
-Array, um das zu berücksichtigen.
$PageTemplateFmt
leer ist (was es sein sollte), sammelt PmWiki die Namen aller Kandidaten für den Skin. Es startet mit den aktions-spezifischen Skins, die in $ActionSkin[$action]
festgelegt sind. Dadurch wird PmWiki nach einem Skin namens 'Bar' sehen, wenn die aktuelle Aktion 'login' ist und $ActionSkin
['login']
= 'Bar'
ist.
$Skins
-Variablen genannt sind ($Skins
darf ein Array sein). Wenn das Ende der Liste erreicht ist, ohne dass ein Skin gefunden wird, meldet es einen Fehler.
$SkinLibDirs
-Variable, wo es suchen muss. Skins bestehen aus server-seitigen Dateien (wie .php- und .tmpl-Dateien), die von PmWiki geladen werden und client-seitigen Dateien (wie .css-Dateien und Bildern), die vom Browser der Benutzer angefragt werden, wenn die die angehübschten PmWiki-Seiten ansehen.
$SkinLibDirs
ist ein Array aus Schlüssel/Wert-Paaren. Der Schlüssel ist ein Verzeichnis, in dem nach server-seitigen Dateien gesehen wird, der zugehörige Wert ist ein URL, der auf die öffentlichen, client-seitigen Recourcen weist, die vom Skin benutzt werden. Der Standardwert von $SkinLibDirs
ist:
$SkinLibDirs = array( "./pub/skins/\$Skin" => "$PubDirUrl/skins/\$Skin", "$FarmD/pub/skins/\$Skin" => "$FarmPubDirUrl/skins/\$Skin");
./pub/skins/foo
und dann nach $FarmD
/pub/skins/foo
sieht (wobei der Server $FarmD
durch das Root-Server-Verzeichnis für die Farm-Dateien ersetzt). Von dem ersten dieser Verzeichnisse, das gefunden wird, wird angenommen, dass es das gesuchte Skin enthält. Dann wird $SkinDir
auf den Namen des Verzeichnisses gesetzt und $SkinDirUrl
auf den zugehörigen URL.
LoadPageTemplate()
innerhalb der skin.php-Datei mit dem Namen der .tmpl-Datei auf, die man laden will.
Ein Skin möchte zum Beispiel eine spezielle Vorlage benutzt sehen, wenn die Aktion 'print' ausgeführt wird:
if ($GLOBALS['action'] == 'print') LoadPageTemplate($pagename, "$SkinDir/print.tmpl");
Eine Vorlagendatei ist im Grunde genommen eine HTML-Datei, die auch Variablenersetzungen enthält (erkennbar am '$') und spezielle Direktiven, eingebettet in HTML-Kommentare. Die folgenden Direktiven sind notwendig in der Vorlagendatei:
<!--PageText-->
gehört zum <body>-Abschnitt des HTML-Dokuments und weist PmWiki an, wohin der Hauptinhalt der Wikiseiten gehört.
<!--HTMLHeader-->
, die in den <head>-Abschnitt des HTML-Dokuments gehört.
<!--HTMLFooter-->
, die typischerweise kurz vor dem schließenden </body-Tag steht und von einigen Rezepten benutzt wird, um Dinge am Ende des HTML-Dokuments einzufügen. Vor PmWiki 2.2.0 war die <!--HTMLFooter-->
-Direktive optional.
Wenn PmWiki eine Seite anzeigt, ersetzt es die Direktiven und Variablenersetzungen mit den zu dieser aktuellen Seite gehörenden Werten. Zum Beispiel wird die <"--PageText-->
-Direktive durch den Seiteninhalt ersetzt, während alle Vorkommen von $PageUrl durch den URL (die Adresse) der aktuellen Seite ersetzt werden.
Anmerkung: Ihre Skinvorlage sollte kein <meta />-Tag enthalten, das den Zeichensatz (encoding) festlegt, da PmWiki dieses Tag hinzufügt, wenn es nötig ist.
Es gibt eine lange Liste von Variablen, die für die Ersetzungen in Seiten zur Verfügung stehen, zu den gebräuchlichsten gehören:
$PageUrl der URL der aktuellen Seite $ScriptUrl der Basis-Url zum PHP-Skript $Title den Seitentitel (z. B. "SkinTemplates") $Titlespaced den Seitentitel mit Leerzeichen (e.g., "Skin Templates") $Group den Namen der aktuellen Gruppe (e.g., "PmWiki") $FullName der volle Name der Seite (e.g., "PmWiki.SkinTemplates") $LastModified die letzte Änderungszeit der Seite $PageLogoUrl der URL vom Logo er Site $WikiTitle der Titel der Site $SkinDirUrl der URL des Skin-Verzeichnisses
Diese letzte Variable, $SkinDirUrl
, ist in Vorlagen besonders nützlich, da sie den Skindesignern erlaubt, auf andere Dateien (wie Bilder oder Stylesheets) im Skinverzeichnis zu verweisen, ohne den genauen URL zu kennen.
Die Vorlage ist nicht auf die Variablen beschränkt, die hier aufgelistet sind, nahezu jede globale PHP-Variable, die mit einem Großbuchstaben beginnt, kann in einer Skin-Vorlage eingesetzt werden. Auch Seitenspezifische Variablen können in einer Vorlage benutzt werden.
Neben den notwendigen <!--PageText-->
- und <!--HTMLHeader-->
-Direktiven stellt PmWiki andere eingebaute Direktiven zum Erzeugen der Ausgabe zur Verfügung. Es ist nicht notwendig, auch nur eine davon einzusetzen, aber sie können oft die Möglichkeiten der Skins erweitern.
<!--wiki:Main.EineSeite-->
<!--page:Main.EineSeite-->
<!--wiki:Main.EineSeite-->
-Direktive gibt den Inhalt der Seite Main.EineSeite aus. $-Ersetzungen sind in Direktiven erlaubt, also wird eine Direktive wie <!--wiki:$Gruppe.EineSeite-->
"EineSeite" aus der aktuellen Gruppe einfügen.
<!--wiki:$Gruppe.EineSeite Site.EineSeite-->
EineSeite aus der aktuellen Gruppe ausgeben, wenn die Seite existiert, andernfalls Site.EineSeite. Wenn Site.EineSeite immer ausgegeben werden soll, sogar, wenn $Gruppe.EineSeite existiert, muss man zwei aufeinanderfolgende <!--wiki:...-->
-Direktive, für jede Seite eine, einsetzen.
<!--wiki:...-->
-Direktive zeigt nur Seiten an, für die der Browser Leserechte hat, Die <!--page:...-->
-Direktive zeigt die Seite auch dann an, wenn der Browser kein Leserecht für diese Seite hat.
<!--file:einedatei.txt-->
<!--file:einedatei.txt-->
-Direktive gibt den Inhalt einer anderen Datei aus (aus dem lokalen Dateisystem des Servers) an der Stelle, an der die Direktive steht. Wenn die einzufügende Datei ein .php-Skript ist, wird das PHP-Skript ausgeführt und seine Ausgabe an den Browser geschickt.
Wie in der <!--wiki:...-->
-Direktive oben werden $-Ersetzungen auf Basis der aktuellen Gruppe und des Namens der aktuellen Datei durchgeführt.
<!--markup:...-->
<!--function:EineFunktion args-->
<!--function:EineFunktion arg1 arg2 arg3-->
ruft EineFunktion($pagename, "arg1 arg2 arg3")
auf, wenn die Vorlage abgearbeitet wird. Indes können dabei auch Variablen (wie $LastModifiedBy) eingesetzt werden.
Eine Vorlagendatei kann "Abschnitte" enthalten, die in die Ausgabe eingeschlossen oder von ihr ausgeschlossen werden auf der Basis von Seitendirektiven oder anderen Kriterien. Ein Abschnitt beginnt immer mit <!--Page...Fmt-->
und geht bis zum nächsten Abschnitt, dem Ende der Vorlagendatei oder <!--/Page...Fmt-->
. Eine Vorlage kann zum Beispiel einen <!--PageLeftFmt-->
-Abschnitt angeben, der immer dann von der Ausgabe ausgeschlossen wird, wenn die (:noleft:)
-Direktive in dem Seiteninhalt auftaucht.
PmWikis vordefinierte Abschnitte (und ihre zugehörigen Seitendirektiven) sind:
<!--PageHeaderFmt--> (:noheader:) <!--PageFooterFmt--> (:nofooter:) <!--PageTitleFmt--> (:notitle:) <!--PageLeftFmt--> (:noleft:) <!--PageRightFmt--> (:noright:) <!--PageActionFmt--> (:noaction:)
Skindesigner können eigene Abschnitte und Markups definieren, aber zur Zeit müssen alle Abschnittnamen mit 'Page' beginnen und auf 'Fmt' enden. Wie erwähnt muss dazu auch ein entsprechendes Markup (zum Beispiel in der config.php) definiert werden:
Markup('noxyz', 'directives', '/\\(:noxyz:\\)/ei', "SetTmplDisplay('PageXYZFmt',0)");
Und, besser, kompatibel mit PHP Version 5.5, für PmWiki 2.2.58+ :
Markup('noxyz', 'directives', '/\\(:noxyz:\\)/i', "HideXYZ"); function HideXYZ() { SetTmplDisplay('PageXYZFmt',0); }
Hinweis: Das Rezept Skins:TestPageDirectives kann Ihnen helfen, Ihre Skins mit einer Kombination der obigen Direktiven zu testen.
Skins können auch internationalisiert werden, indem man $[...]
-Stellvertreter benutzt. Jeder String, der innerhalb von $[...]
geschrieben wird, wird als übersetzbare Wendung behandelt. Die Wendung wird in der aktuellen Übersetzungstabelle nachgesehen und ggf. durch den passenden Ausgabetext ersetzt. Gibt es keine Übersetzung, wird der Originalstring unverändert übernommen.
Der Stellvertreter $[Edit]
wird durch die vorhandene Übersetzung von "Edit" ersetzt, wenn eine bekannt ist, sonst wird "Edit" ausgegeben. So kann die gleiche Vorlage für verschiedene Sprachen benutzt werden, weil z. B. an der Stelle "Editer" angezeigt wird, wenn eine französische Übersetzungstabelle vorliegt, "Bearbeiten" bei einer deutschen und "Edit", wenn es keine Übersetzung gibt.
Wie passe ich die CSS-Stile für mein PmWiki-Layout an.
Siehe unter Skins, wie man das Standardwikiskin verändert. Siehe auch unter Skins, wo weitere vorgefertigte Skins zu finden sind, die man benutzen kann, um das Aussehen der eigenen Site seinem eigenen Geschmack anzupassen. Man kann auch eine Datei local.css im pub/css-Verzeichnis erstellt, um die CSS-Selektoren dort hinzuzufügen (diese Datei wird automatisch eingebunden, wenn sie existiert). Dann kann man schließlich Stile direkt in die lokale Anpassungsdatei schreiben, etwa so:
$HTMLStylesFmt[] = '.foo { color:blue; }';
Wo findet man die erwähnte Übersetzungstabelle, so dass man Übersetzungswendungen hinzufügen kann?
Siehe unter Internationalisierungen.
Ist es möglich, ein Bearbeiten-Formular über die ganze Fensterbreite zu bekommen ohne die SideBar?
Wenn die SideBar mit <!--PageLeftFmt-->
markiert ist, fügt man (:noleft:)
in die Seite Site.EditForm ein. Das versteckt die SideBar beim Bearbeiten.
Kann man den Titel der Startseite ("HomePage") einfach von der Startseite entfernen/verbergen?
Ja, man kann in der Wikiseite den Titel auf (:title Ein besserer Titel:)
ändern oder mit (:notitle:)
unterdrücken.
Ist es möglich, die Search-Bar in dem Standardskin von PmWiki zu verbergen?
Ja, siehe bitte unter Cookbook:HideSearchBar.
Übersetzung von PmWiki.SkinTemplates, Originalseite auf PmWikiDe.SkinTemplates — Backlinks
Zuletzt geändert: | PmWikiDe.SkinTemplates | am 15.06.2017 |
PmWiki.SkinTemplates | am 30.08.2019 |