Formatierungsanweisungen im Ausdruck

für die Liste aller Seiten

Autoren (Fortgeschrittene)

Der {(...)}-"Formatierungsausdruck" erlaubt es, eine Reihe von String- und Formatierungsanweisungen innnerhalb eines Markups auszuführen. Die Anweisungen, die laut diesem Rezept definiert werden, schließen substr, ftime, strlen, rand, mod, toupper / tolower, ucfirst, ucwords, pagename und asspaced ein. Markups können verschachtelt werden, indem man das Markup {(...(...)...)} benutzt.

substr

Der substr-Ausdruck schneidet Teile aus einem String heraus. Die Argumente werden durch Leerzeichen getrennt. Es sind

  1. der zu bearbeitende String – setzen Sie den String immer in Anführungszeichen,
  2. die Startposition des Teilstrings im String – beachten Sie, dass diese Startposition auf null basiert (d. h. das erste Zeichen im String hat die Nummer "0"),
  3. die Zahl der herauszuziehenden Zeichen.

Beispiele:

 {(substr "PmWiki" 2 3)}
 {(substr "PmWiki" 2)}
 {(substr "{*$Group}" 2)}
 {(substr "PmWiki" 0 1)}
 {(substr "PmWiki" 0 -3)}
 {(substr "PmWiki" -3)}
 {$:title}
 {(substr "{$:title}" 7 11)}
 Wik
 Wiki
 WikiDe
 P
 PmW
 iki
 Formatierungsanweisungen im Ausdruck
 erungsanwei

Um die letzten n Zeichen aus einem String herauszuschneiden, verwenden Sie {(substr "string" -n)}
Um die letzten n Zeichen vom String abzuschneiden, verwenden Sie {(substr "string" 0 -n)}
Um alle Zeichen ab dem n. Zeichen zu erhalten, lassen Sie den dritten Parameter weg: {(substr "string" n)}

ftime

ftime-Ausdrücke dienen der Formatierung von Datum und Zeit. Das allgemeine Format ist

{(ftime "fmt" "when")}
{(ftime fmt="fmt" when="when" tz="tz" locale="locale")}

worin "fmt" ein Formatstring und "when" die zu formatierende Zeit ist. Die Argumente können in beiden Reihenfolgen geschrieben werden und können die optionalen Labels "fmt=" und "when=" nutzen.

Das "tz"-Argument (time zone, Zeitzone) erlaubt das Setzen einer anderen Zeitzone, wenn auch nur in Installationen, die PHP 5.1 oder neuer nutzen. Siehe die Liste der unterstützten Zeitzonen, Argumente, die dort nicht zu finden sind, werden stillschweigend ignoriert.

Das "locale"-Argument (language locale, lokale Sprache) erlaubt, das Zeitformat mit Wochentagen und Monaten in einer anderen Sprache auszugeben, sofern diese lokale Sprache auf dem Server verfügbar ist. Sie können mehrere "locale" zum Durchprobieren angeben, getrennt durch Kommata oder Leerzeichen, z. B. "fr_FR.utf8,fr_FR,fr". Wenn keine der gelisteten "locale" verfügbar ist, wird das Argument stillschweigend ignoriert.

Wenn Sie bei internationalen "locale"-Einstellungen seltsame Zeichen sehen, versuchen Sie den ".uft8"- oder "UTF-8"-Teil hinzuzufügen oder wegzulassen, d. h. versuchen sie Beides – "fr_FR.utf8" und "fr_FR" – um zu sehen, welches bei Ihnen funktioniert. Wikis mit aktiviertem UTF-8 werden eher den ".utf8"-Teil brauchen.

Beispiele:

 {(ftime)}
 {(ftime fmt="%F %H:%M")}
 {(ftime %Y)}
 {(ftime fmt=%T)}
 {(ftime when=tomorrow)}
 {(ftime fmt="%Y-%m-%d" yesterday)}
 {(ftime "+1 week" %F)}
 {(ftime fmt=%D "-4 month")}
 {(ftime fmt="%a%e %b" "next week")}
 {$LastModifiedTime}
 {(ftime "%F" "@{$LastModifiedTime}")}
 {(ftime fmt="%A, %d %B %Y, %Hh%M" locale=fr_FR.utf8 tz=Europe/Paris)}
 {(ftime fmt="%A, %d. %B %Y, %H Uhr %M" locale=de_DE.utf8 tz=Europe/Berlin)}
 {(ftime locale=de_DE.utf8 tz=Europe/Berlin)}

 May 22, 2024
 2024-05-22 23:10
 2024
 23:10:59
 May 23, 2024
 2024-05-21
 2024-05-29
 01/22/24
 Mon27 May
 1708777106
 2024-02-24
 jeudi, 23 mai 2024, 01h10
 Donnerstag, 23. Mai 2024, 01 Uhr 10
 Mai 23, 2024

Der "fmt"-Parameter ist das, was auf fmt= folgt, oder ein String, dessen erstes Zeichen ein '%' ist oder sonst der Standard der Site (z. B. festgelegt in config.php). Die Formatkodes sind beschrieben in https://www.php.net/manual/de/function.strftime.php. In Ergänzung dazu ergibt '%o' die Endung einer Ordnungszahl ("st" für 1st), '%F' ein ISO-8601-Datum wie 2022-10-30, '%s' einen UNIX-Zeitstempel (Sekunden seit 1.1.1970) und '%L' erzeugt ein Format wie @2022-10-30T01:27:34Z, welches in der Zeitzone des Besuchers per Cookbook:LocalTimes angezeigt werden kann.

Einige gebräuchliche Formatstrings sind:

     %F                  # ISO-8601-Datum         "2024-05-22"
     %s                  # Unix-Zeitstempel       "1716419459"
     %H:%M:%S            # Zeit als hh:mm:ss      "23:10:59"
     %m/%d/%Y            # Datum als mm/dd/yyyy   "05/22/2024"
     "%A, %B %e%o, %Y"   # in Worten              "Wednesday, May 22nd, 2024"
     "%A, %d. %B %Y"     # in Worten (alternativ) "Wednesday, 22. May 2024"
Alle Formate, klick zum Umschalten
KategorieFormatBeschreibungBeispiel
Tag%aEine abgekürzte Schreibweise des TagesSo bis Sa
Tag%AEine volle Schreibweise des TagesSonntag bis Samstag
Tag%dzweiziffriger Tag des Monats (mit führender Null)01 bis 31
Tag%eTag des Monats mit führendem Leerzeichen bei einzelner Ziffer" 1" bis "31"
Tag%jTag des Jahres, 3 Ziffern mit führenden Nullen001 bis 366
Tag%unumerische Repräsentation des Wochentages nach ISO-86011 (für Montag) bis 7 (für Sonntag)
Tag%wnumerische Repräsentation des Wochentages0 (für Sonntag) bis 6 (für Samstag)
Tag%oOrdinalanhang für den Tag des Monats (PmWiki-spezifisch)st in January 1st
Woche%UWochennummer des gegebenen Jahres, beginnend mit dem ersten Sonntag als erste Woche13 (für die 13te volle Woche des Jahres)
Woche%VISO-8601:1988-Wochennummer des gegebenen Jahres, beginnend mit der ersten Woche im Jahr mit wenigstens 4 Wochentagen, mit dem Montag als ersten Wochentag01 bis 53 (wobei 53 eine überlappende Woche ausweist)
Woche%WEine numerische Repräsentation der Woche im Jahr, beginnend mit dem ersten Montag als erste Woche46 (für die 46te Woche des Jahres, die mit einem Montag beginnt)
Monat%bAbgekürzter Monatsname, basierend auf der lokalen EinstellungJan bis Dez
Monat%BVoller Monatsname, basierend auf der lokalen EinstellungJanuar bis Dezember
Monat%hAbgekürzter Monatsname, basierend auf der lokalen Einstellung (ein Alias von %b)Jan bis Dez
Monat%mzweiziffrige Repräsentation des Monats01 (für Januar) bis 12 (für Dezember)
Jahr%Czweiziffrige Repräsentation des Jahrhunderts (Jahr geteilt durch 100, gekürzt auf eine Ganzzahl)19 für das 20ste Jahrhundert
Jahr%gzweiziffrige Repräsentation des Jahres nach dem ISO-8601:1988-Standard (siehe %V)09 für die Woche des 6. Januar 2009
Jahr%GDie volle vierziffrige Repräsentation von %g2008 für die Woche des 3. Januar 2009
Jahr%yzweiziffrige Repräsentation des Jahres09 für 2009, 79 für 1979
Jahr%Yvierziffrige Repräsentation des Jahres2038
Zeit%Hzweiziffrige Repräsentation der Stunde im 24-Stunden-Format00 bis 23
Zeit%kStunde im 24-Stunden-Format, mit führendem Leerzeichen für einzelne Ziffern" 0" bis "23"
Zeit%I(Großbuchstabe 'i') zweiziffrige Repräsentation der Stunde im 12-Stunden-Format01 bis 12
Zeit%l(Kleinbuchstabe 'L') Stunde im 12-Stunden-Format, mit führendem Leerzeichen für einzelne Ziffern" 1" through "12"
Zeit%Mzweiziffrige Repräsentation der Minute00 bis 59
Zeit%pGroßbuchstaben 'AM' oder 'PM' basierend auf der gegebenen ZeitAM für 00:31, PM für 22:23
Zeit%PKleinbuchstaben 'am' oder 'pm' basierend auf der gegebenen Zeitam für 00:31, pm für 22:23
Zeit%rwie "%I:%M:%S %p"09:34:17 PM für 21:34:17
Zeit%Rwie "%H:%M"00:35 für 12:35 AM, 16:44 für 4:44 PM
Zeit%Szweiziffrige Repräsentation der Sekunde00 bis 59
Zeit%Twie "%H:%M:%S"21:34:17 für 09:34:17 PM
Zeit%Xbevorzugte Zeitrepräsentation ohne das Datum, basierend auf der lokalen Einstellung03:59:16 oder 15:59:16
Zeit%zder Zeitzonenoffset-0500 für US Eastern Time
Zeit%Zdie ZeitzonenabkürzungEST für Eastern Time
Datum-Zeit%cbevorzugter Datum-Zeit-Stempel, basierend auf der lokalen EinstellungTue Feb 5 00:45:10 2009 für February 5, 2009 at 12:45:10 AM
Datum-Zeit%Dwie "%m/%d/%y"02/05/09 für den 5. Februar 2009
Datum-Zeit%Fwie "%Y-%m-%d"2009-02-05 für den 5. Februar 2009
Datum-Zeit%sUnix-Epoche-Zeitstempel305815200 für den 10. September 1979 20:40:00
Datum-Zeit%xbevorzugte Datums-Repräsentation ohne die Zeit, basierend auf der lokalen Einstellung02/05/09 für den 5. Februar 2009
Datum-Zeit%Lvisuell lesbarer UTC-Zeitstempel, der entweder als $TimeFmt oder in der lokalen Zeitzone des Besuchers per $EnableLocalTimes (PmWiki-spezifisch) dargestellt wird@2022-09-25T11:49:08Z
Verschiedenes%nein Zeilenvorschubzeichen ("\n")--
Verschiedenes%tein Tabulatorzeichen ("\t")--
Verschiedenes%%ein buchstäbliches Prozentzeichen ("%")--

Die "bevorzugten" Kürzelformate könnten verschiedene Werte ergeben, abhängig davon, ob die IntlDateFormatter-PHP-Funktionen verfügbar sind oder nicht – für konsistente Ergebnisse können Sie das volle Format benutzen. Die Namen der Tage und Monate könnten durch das locale=-Argument übersetzt werden, wenn diese lokale Einstellung auf dem Server installiert ist.

Beachten Sie, dass, wenn Sie einen undefinierten Formatstring wie %q oder %E verwenden, dieser von ftime unverändert gelassen bleibt, später aber von PmWiki als Wikistil verarbeitet werden könnte, was womöglich unerwartet kommt.

Der "when"-Parameter versteht viele verschiedene Datumsformate. Der "when"-Parameter ist das, was auf when= folgt oder was nach dem Erkennen des Formatparameters übrigbleibt. Einige Beispiele:

    2007-04-11            # ISO-8601-Datum
    20070411              # Datum ohne Bindestriche, Schrägstriche oder Punkte
    2007-03               # Monat
    @1176304315           # Unix-Zeitstempel (Sekunden seit 1-Jan-1970 00:00 UTC)
    now                   # Die aktuelle Zeit
    today                 # heute um 00:00:00 Uhr
    yesterday             # gestern um 00:00:00 Uhr
    "next Monday"         # relatives Datum
    "last Thursday"       # relatives Datum
    "-3 days"             # vor drei Tagen
    "+2 weeks"            # in zwei Wochen ab jetzt

Anmerkung: Wenn Sie einen Unix-Zeitstempel umwandeln wollen, müssen Sie ein '@' voranstellen, also

{(ftime "%A, %B %d, %Y" @1231116927)},

auch wenn die Zeit aus einer Variablen stammt, wie hier:

{(ftime "%F" "@{$LastModifiedTime}")}.

Der "when"-Parameter nutzt PHPs strtotime-Funktion, um Datumstrings gemäß des GNU- Datum-Eingabe-Formats umzuwandeln; diese Funktion versteht nur englische Phrasen in Datumsangaben.

Die Variable $FTimeFmt kann eingesetzt werden, um das Standarddatumformat, das von "ftime" benutzt wird, zu überschreiben. Der Standard für $FTimeFmt ist $TimeFmt.

Ein ungültiger "when"-Parameter evaluiert zu @000000, also 01.01.1970 00:00Uhr.

strlen

Der strlen-Ausdruck gibt die Länge des Strings zurück. Das Argument ist der nachzumessende String. Das Argument muss in Anführungszeichen gesetzt sein, auch wenn es kein literaler String ist.

 {$:title}
 {(strlen "{$:title}")}
 Formatierungsanweisungen im Ausdruck
 36

rand

Der rand-Ausdruck liefert eine Zufallszahl aus dem Bereich der ganzen Zahlen. Das erste Argument bezeichnet die kleinste Zahl, die zurückgegeben werden soll, das zweite Argument bezeichnet die größte Zahl, die zurückgegeben werden soll. Ohne Argumente erhält man eine Zahl zwischen 0 und RAND_MAX (Es heißt, die sei 2147483647, die Hälfte der größten Integerzahl. Es ist aber vom Betriebssystem abhängig, wie groß diese Zahl letztendlich ist).
Wenn man z. B. eine Zufallszahl zwischen -5 und 15 (einschließlich) erhalten möchte, schreibt man (rand -5 15)

 {(rand)}
 {(rand -5 0)}
 1061464666
 -2

mod

Der erweiterte "mod"-Ausdruck gibt den Modulo (Divisionsrest) einer Division zweier Zahlen zurück. Es kann in erweiterten Seitenlistenvorlagen zusammen mit {$$PageCount} genutzt werden, um Markups in jedem (modulo) Eintrag einzufügen, z. B. um alternierende (Zebra-)Tabellenzeilen zu erzeugen oder um einen Zeilenumbruch einzufügen. (Siehe auch PageLists, WikiStyles and ConditionalMarkup.)

>>comment<<
%define=bg1 item bgcolor=#f88%
%define=bg2 item bgcolor=#ff8%
%define=bg0 item bgcolor=#8f8%[=
[[#altrows]]
* %bg{(mod {$$PageCount} 3)}% {=$Name} ({$$PageCount})
[[#altrowsend]]=]
>><<
(:pagelist fmt=#altrows group=PmWiki count=10:)

[[#altrows]] * %bg{(mod {$$PageCount} 3)}% {=$Name} ({$$PageCount}) [[#altrowsend]]

toupper / tolower

Der toupper- und der tolower-Ausdruck wandeln einen String in Groß- bzw. Kleinbuchstaben um. Das Argument ist der umzuwandelnde String.

 {(toupper "{$:title}")}
 {(tolower "{$:title}")}
 FORMATIERUNGSANWEISUNGEN IM AUSDRUCK
 formatierungsanweisungen im ausdruck

ucfirst

Der ucfirst-Ausdruck wandelt das erste Zeichen des Strings in einen Großbuchstaben um, wenn es ein Buchstabe ist. Das Argument ist der umzuwandelnde String.

 {(ucfirst "hund, katze, maus")}
 {(ucfirst "123hundert")}
 Hund, katze, maus
 123hundert

ucwords

Der ucwords-Ausdruck wandelt den ersten Buchstaben jeden Wortes in dem String in einen Großbuchstaben um (eigentlich des erste Zeichen und jedes Zeichen nach einem Leerzeichen, wenn es denn ein Buchstabe ist). Das Argument ist der umzuwandelnde String.

 {(ucwords "hunde und katzen")}
 {(ucwords "hund, katze, maus")}
 Hunde Und Katzen
 Hund, Katze, Maus

pagename

Der pagename-Ausdruck bildet einen Seitennamen aus einem String. Der Seitenname eignet sich als Name zum Speichern, ist in WikiWordSchreibweise geschrieben und enthält keine für Dateisysteme verbotenen Zeichen und keine Leerzeichen mehr. Das Argument ist der umzuwandelnde String.

 {(pagename "ein \ Back-slash, ein Forward-slash /")}
 {(pagename "{$:title}")}
 EinBack-slashEinForward-slash.EinBack-slashEinForward-slash
 PmWikiDe.FormatierungsanweisungenImAusdruck

asspaced

Der asspaced-Ausdruck zerlegt WikiWörter, indem es Leerzeichen vor Großbuchstaben einfügt. Das Argument ist der umzuwandelnde String.

 {$FullName}
 {(asspaced "{$FullName}")}
 PmWikiDe.MarkupExpressions
 Pm Wiki De.Markup Expressions

Verschachteln von Ausdrücken

Die hier beschriebenen Ausdrücke können verschachtelt werden.

 {(tolower (substr "Hello World" 2))}
 llo world

Der innere Ausdruck darf nicht mehr von geschweiften Klammern umgeben sein. Das Setzen von Anführungszeichen ist eine diffizile Angelegenheit.

Anmerkungen

  • In PmWikis der Version 2.2.33 oder älter funktionieren womöglich einige der stringbearbeitenden Ausdrücke nicht sauber mit Multibyte-UTF-8-Zeichen. Neuere Versionen sollten gut funktionieren.
  • Der "ftime"-Ausdruck funktioniert nicht mit einigen ISO 8601-Daten (weil die Zeit 24:00 ungültig ist).
 {(ftime fmt="%m/%d/%Y @ %H:%M:%S" when="20070626T2400")}
 {(ftime fmt="%H:%M:%S" when="20070626T2400")}
 06/27/2007 @ 00:00:00
 00:00:00
  • Es ist möglich, die Zeit in einer anderen Zeitzone anzuzeigen.
 1 {(ftime when='Europe/Berlin')}
 2 {(ftime when='Europe/London')}
 3 {(ftime when='Europe/London +2 days')}
 4 {(ftime when="Europe/London 20041031T0820")}
 5 {(ftime "%F %H:%M" 'Pacific/Auckland now')}
 1 May 22, 2024
 2 May 22, 2024
 3 May 24, 2024
 4 October 31, 2004
 5 2024-05-22 11:11

Siehe auch

für die Liste aller Seiten


Übersetzung von PmWiki.MarkupExpressions,   Originalseite auf PmWikiDe.MarkupExpressions   —   Backlinks

Zuletzt geändert:   PmWikiDe.MarkupExpressionsam 24.02.2024
 PmWiki.MarkupExpressionsam 24.02.2024