Judo-Wiki des Chemnitzer WSV
PmWikiDe

Sonstige Variablen

für die Liste aller Seiten

Administratoren (FTP)

$FmtV
Diese Variable ist ein assoziatives Array, das benutzt wird für Stringersetzungen am Ende eines Aufrufes von FmtPageName(). Für jedes Element in dem Array wird der "Schlüssel", interpretiert als String, durch seinen zugehörigen "Wert" ersetzt. Diese Variable ist dafür vorgesehen, um Ersetzungsvariablen zu speichern, die häufig wechselnde Werte haben (dadurch vermeidet man einen Neuaufbau des Variablencache und FmtPageName() wird schneller). Siehe auch $FmtP. Werte von $FmtV werden gesetzt von den internen Funktionen FormatTableRow, LinkIMap, HandleBrowse, PreviewPage, HandleEdit, PmWikiAuth, und PasswdVar, augenscheinlich um Werte zu setzen für vom System erzeugte Stringersetzungen wie PageText.
$FmtP
Diese Variable ist ein assoziatives Array, das benutzt wird für Stringersetzungen nahe dem Beginn eines Aufrufs von FmtPageName(). Für jedes Element in dem Array wird der "Schlüssel", interpretiert als String, durch seinen zugehörigen "Wert" ersetzt, der für den Namen der aktuellen Seite ermittelt wurde. Dies wird zum Beispiel benutzt, um $-Ersetzungen zu handhaben, die vom Seitennamen abhängig sind, welcher an FmtPageName() übergeben wurde. Siehe auch $FmtV. zu robots.php: Wenn $EnableRobotCloakActions gesetzt ist, wird ein Muster an $FmtP angefügt, das jeglichen "?action="-URL-Parameter in Seiten-URLs verhindert; PmWiki erzeugt so also keine URLs für Aktionen, auf die Suchmaschinenroboter nicht zugreifen dürfen. Das kann die Last des Server erheblich reduzieren, indem er an die Roboter keine Links ausliefert, die ohnehin nicht im Index auftauchen dürfen.
$FmtPV
Diese Variable ist ein Array, das Seiten-Variablen definiert. Neue Variablen können definiert werden mit $FmtPV['$VarName'] = 'variable definition';, die dann in Markups wie {$VarName} benutzt werden können. Bitte bedenken Sie, dass die Inhalte von $FmtPV['$VarName'] ausgewertet werden, um den endgültigen Text für $VarName zu erzeugen, deshalb muss der Inhalt ein PHP-Ausdruck sein, der zum Zeitpunkt der Auswertung gültig ist. Insbesondere wird dies hier nicht funktionieren:
#Das funktioniert nicht
$FmtPV['$MyText'] = "This is my text."; # WARNUNG: Das funktioniert nicht!
Das Problem ist, dass This is my text. kein gültiger PHP-Ausdruck ist. Damit es funktioniert, müsste das in Anführungszeichen gesetzt werden. Was also tatsächlich in $FmtPV['$MyText'] gespeichert werden müsste, ist "This is my text.", was ein gültiger PHP-Ausdruck für einen String ist. Demnach ist der korrekte Weg, den Textstring einzusetzen, einen weiteren Satz von Anführungszeichen um alles herum zu setzen.
#das wird funktionieren
$FmtPV['$MyText'] = '"This is my text."';
Das ist eine Folge dessen, wie in PHP oder PmWiki auf Variablen zugegriffen wird. Damit die Seiten-Variable $MyVar den Inhalt der internen Variablen $myvar ausgibt, versuchen viele Leute so etwas, was nicht funktioniert:
#Das funktioniert auch nicht!
$myvar = EineKomplexeFunktion();
$FmtPV['$MyVar'] = $myvar; # WARNUNG: geht nicht!
Es gibt mehrere korrekte Wege, je nach dem, ob Sie den Wert von $myvar brauchen wie er zur der Zeit ist, in der der $FmtPV-Eintrag erfolgte, oder zu der Zeit, wo eine jeweilige Instanz von $MyVar in der Seite ausgewertet wird. Für die meisten, einfachen Seiten-Variablen, die sich während des Seitenaufbaus nicht ändern, ist es effektiver, den Wert zu setzen, wenn der Eintrag erzeugt wird:
$myvar = EineKomplexeFunktion();
$FmtPV['$MyVar'] = "'" . $myvar . "'"; #fange den Inhalt von $myvar ein
Hinweis: Wenn $myvar ein einfaches Anführungszeichen enthält, wird das obige nicht funktionieren. Sie müssen die Variable noch bearbeiten um alle einfachen Anführungszeichen abzufangen (zu escapen).
Für komplexere Fälle, in denen $MyVar an verschiedenen Stellen auf der Seite unterschiedliche Werte hat (möglicherweise aufgrund des Effekts anderer Markups), müssen Sie den FmtPV-Eintrag zu einer Referenzvariablen machen, die auf eine globale Variable referenziert (und die Variable sollte besser eine globale Variable sein), wie hier:
global $myvar;
$FmtPV['$MyVar'] = '$GLOBALS["myvar"]';
Schließlich kann Sie nichts davon abhalten, dass die Evaluation des FmtPV-Eintrags einfach zu einer Funktion führt, die den Ersetzungstext erzeugt:
# add page variable {$Today}, formats today's date as yyyy-mm-dd
$FmtPV['$Today'] = 'strftime("%Y-%m-%d", time() )';

Noch einmal: Bitte beachten Sie, dass Werte der Elemente von $FmtPV mit eval() ausgewertet werden. Sie sollte also Benutzereingaben bereinigen. Das Folgende ist sehr unsicher:

$FmtPV['$Var'] = $_REQUEST['Var']; # höchst unsicher, erlaubt PHP-Kode-Injektion
$FmtPV['$Var'] = '"'. addslashes($_REQUEST['Var']).'"'; # höchst unsicher, erlaubt PHP-Kode-Injektion

Siehe im Rezept Cookbook:HttpVariables nach einem besseren Weg, diese Variablen zu nutzen.

Siehe Cookbook:MoreCustomPageVariables für weitere Beispiele, wie man $FmtPV einsetzen kann.
$MaxPageTextVars
Diese Variable verhindert endlose Schleifen durch versehentliche rekursive Seiten-Text-Variablen, die einen Server zum Erliegen bringen können. Der Standardwert ist 500, d. h. jede Seiten-Text-Variable einer Seite kann 500 mal in einer Wikitextseite dargestellt werden. Wenn Sie sie mehr als 500 mal brauchen, setzen Sie in die config.php etwas wie das Folgende hinein:
$MaxPageTextVars = 10000; # zehntausendmal
$PageCacheDir
ermöglicht das Zwischenspeichern von HTML für Seiten ohne Bedingungen. Die Variable enthält den Namen eines beschreibbaren Verzeichnisses, wo PmWiki die HTML-Ausgabe zwischenspeichern kann, um die aufeinanderfolgende Ausgabe der selben Seiten zu beschleunigen. Siehe auch $PageListCacheDir.
# ermögliche das Zwischenspeichern in work.d/
$PageCacheDir = 'work.d/';

für die Liste aller Seiten


Übersetzung von PmWiki.OtherVariables,   Originalseite auf PmWikiDe.OtherVariables   —   Rückverweise

Zuletzt geändert:   PmWikiDe.OtherVariablesam 25.06.2016
 PmWiki.OtherVariablesam 30.01.2020