TYPO3-Testaccount
Testen Sie die aktuellste TYPO3-Version kostenlos und unverbindlich für einen Monat!

Jetzt testen!

Schulungen

jetzt buchen

stdWrap

Diese Funktion wird häufig als Eigenschaft zu Werten in TypoScript hinzugefügt.

Ein Beispiel am Inhaltsobjekt »HTML:

TYPOSCRIPT
10 = HTML
10.value = Irgendein Text
10.value.case = upper

In diesem Beispiel wird der Inhalt des Objekts "10" in Großbuchstaben umgewandelt, bevor er zurückgeliefert wird.

Die stdWrap-Eigenschaften werden in der Reihenfolge ausgeführt, in der sie in der untenstehenden Tabelle aufgeführt sind. Wollen Sie dieses Thema vertiefen, schauen Sie sich die tslib/content.php, Funktion stdWrap() an.

Inhaltsbereitstellende Eigenschaften von stdWrap

Die Eigenschaften in dieser Tabelle werden in der Reihenfolge, in der sie aufgeführt sind, geparst. Die Eigenschaften data, field, current, cObject (in dieser Reihenfolge!) haben eine besondere Bedeutung, da sie benutzt werden, um Daten aus Variablen oder Arrays zu importieren. Das Beispiel von oben könnte so umgeschrieben werden:

TYPOSCRIPT
10 = HTML
10.value = Irgendein Text
10.value.case = upper
10.value.field = header

Die Zeile 10.value = Irgendein Text ist jetzt völlig überflüssig, da der gesamte Wert aus dem Feld namens header aus dem $cObj->data-Array importiert wird.

Eigenschaft

Datentyp

Beschreibung

Standard

Daten einholen:

setContent
ToCurrent

boolean

Setzt den aktuellen Wert auf den eingehenden Inhalt dieser Funktion.

setCurrent

string / stdWrap

Setzt den current-Wert. Diese Eigenschaft wird normalerweise von einer externen Methode gesetzt, also seien Sie vorsichtig hiermit. Es könnte aber nützlich sein, diese Funktion zur Verfügung zu haben.

lang

Array von Sprachschlüsseln

Diese Eigenschaft wird benutzt, um optionale sprachspezifische Werte zu definieren.
Wenn der globale Sprachschlüssel, der von der config-Eigenschaft »language beschrieben wird, in diesem Array gefunden wird, wird anstelle des Standard-Eingabewertes von stdWrap dieser Wert benutzt.

Beispiel:
config.language = de
page.10 = TEXT
page.10.value = I am a Berliner!
page.10.lang.de = Ich bin ein Berliner!

Dieser Code wird "Ich bin..." anstelle von "I am..." ausgeben.

data

getText

field

Feldname

 

Setzt den Inhalt auf $cObj->data[field].

Beispiel:
Setze den Inhalt auf den Wert des Feldes title:
.field = title

$cObj->data verändert sich. Siehe die Beschreibung für den Datentyp getText.

current

boolean

Setzt den Inhalt auf den current-Wert (siehe »split).

cObject

cObject

Lädt den Inhalt aus einem Inhaltsobjekt.

numRows

»numRows

Liefert die Anzahl der von der Abfrage zurückgelieferten Zeilen.

filelist

dir / stdWrap

Liest ein Verzeichnis aus und liefert eine Dateiliste zurück.
Der Wert wird nach "|" in Parameter zerlegt:
1. Der Pfad
2. Kommaliste mit erlaubten Dateiendungen (ohne Leerzeichen); Falls leer, werden alle Endungen zugelassen.
3. Sortierung: name, size, ext, date
4. Umgekehrt: Auf r setzen, wenn Sie eine umgekehrte Sortierung wollen.
5. fullpath_flag: Wenn gesetzt, wird die Dateiliste mit kompletten Pfaden zurückgeliefert, und nicht nur mit den Dateinamen.

preUserFunc

Funktionsname

Ruft eine PHP-Methode in einer Klasse auf, wobei der aktuelle Inhalt als erster Parameter, und alle Eigenschaften als zweiter Parameter übergeben werden.

Siehe ».postUserFunc.

Überschreiben / Bedingungen

override

string / stdWrap

Wenn override etwas anderes als "" oder null zurückliefert, wird dieser Wert zum Inhalt.

preIfEmpty
ListNum

(wie »listNum)

(wie »listNum)

ifEmpty

string / stdWrap

Wenn der Inhalt zu diesem Zeitpunkt leer ist (ohne Leerzeichen), bekommt er den Wert von ifEmpty. Nullen zählen auch als leerer Wert.

listNum

int + calc + last

Zerlegt den Inhalt nach "," (Komma) und der Inhalt wird auf das Element [Wert] gesetzt.

Sonder-Schlüsselwort:
last wird auf das letzte Element des Arrays gesetzt.

Eigenschaften:
.splitChar = string; Gibt den String an, nach dem der Wert zerlegt wird. Wenn splitChar eine Zahl ist, wird das Zeichen mit dieser Nummer benutzt (so trennt z.B. "10" Zeilen).
.stdWrap = stdWrap-Eigenschaften von listNum...

Standardwert = , (Komma)

Beispiele:
Wir haben einen Wert von "Wert 1,Wert 2,Wert 3,Wert 4". Dies hier würde "Wert 3" zurückliefern:
.listNum=last-1

trim

PHP-Funktion trim(); Entfernt Leerzeichen vor und nach dem Wert.

required

boolean

Wenn diese Eigenschaft gesetzt ist, muss der Inhalt nach allem Importieren von Inhalten und Prozeduren, die bis jetzt stattgefunden haben (»data, »field, »current, »listNum, »trim) einen Wert haben. Nullen werden NICHT als leerer Wert angesehen. Benutzen Sie stattdessen »if.
Wenn der Inhalt leer ist, wird sofort "" zurückgeliefert.

if

»if

Wenn das if-Objekt falsch zurückliefert, liefert stdWrap sofort "" zurück.

fieldRequired

Feldname

Der Wert in diesem Feld MUSS gesetzt sein.

Parsing-Daten

csConv

string

Konvertiert die Zeichenkodierung des Inhaltes von der durch csConv angegebenen Kodierung zu der des Frontends (durch »renderCharset angegeben).

parseFunc

Objektpfad-
Referenz / »parseFunc

Verarbeitungsanweisungen für den Inhalt.
Anmerkung: Wenn Sie einen String als Wert angeben, wird dieser String als Referenz zu einem globalen Objektpfad im TypoScript-Objektbaum gewertet. Das ist dann die Basis für parseFunc zusammen mit allen Eigenschaften, die Sie hier angeben. Das funktioniert genauso wie Referenzen es für Inhaltselemente tun.

Beispiel:
parseFunc = < lib.parseFunc_RTE
parseFunc.tags.myTag = TEXT
parseFunc.tags.myTag.value = Dieser Text wird eingefügt, wenn &lt;myTag&gt; gefunden wird.

HTMLparser

boolean / »HTMLparser

Dieses Objekt ermöglicht es Ihnen, den HTML-Inhalt zu parsen und alle Arten von weitergehender Bearbeitung daran vorzunehmen.
Der Wert muss gesetzt sein und die Eigenschaften sind die von »HTMLparser.

split

»split

prioriCalc

boolean

Die Berechnung von Werten mit den Operatoren +-*/%^ berücksichtigt außerdem die Priorität von + und - sowie Klammerebenen (). Der Punkt (.) dient als Trennzeichen in Dezimalzahlen.
Liefert einen double-Wert zurück.
Wenn .prioriCalc auf intval gesetzt ist, wird ein integer-Wert zurückgeliefert.

Es gibt keine Fehlerkontrolle und z.B. eine Division durch 0 oder andere ungültige Ausdrücke könnten zu seltsamen Ergebnissen führen. Stellen Sie auch sicher, dass Sie eine angemessene Syntax benutzen, da zukünfige Modifikationen für diese Funktion mehr Operatoren und Features zulassen könnten.

Beispiele:
100%7 = 2
-5*-4 = 20
+6^2 = 36
6 ^(1+1) = 36
-5*-4+6^2-100%7 = 54
-5 * (-4+6) ^ 2 - 100%7 = 98
-5 * ((-4+6) ^ 2) - 100%7 = -22

char

int

Der Inhalt wird auf den chr(Wert) gesetzt.

PHP: $content = chr(intval($conf["char"]));

intval

boolean

PHP-Funktion intval(). Liefert einen Integer-Wert zurück.

PHP: $content = intval($content);

date

date-Konf.

Der Inhalt sollte vom Datentyp UNIX-Zeit sein. Liefert den Inhalt als Datum formatiert zurück.
$content = date($conf["date"],$content);

Beispiel, in dem ein Zeitstempel importiert wird:
.value.field = tstamp
.value.date =

strftime

strftime-Konf.

Genau wie »date. Siehe das PHP-Handbuch (»strftime) für die Codes.
Diese Formatierung ist nützlich, wenn im weiteren Verlauf im »CONFIG-Objekt die Lokalisierung gesetzt wird.

age

boolean oder String

Wenn diese Eigenschaft mit 1 (Zahl, Integer) aktiviert wird, wird der Inhalt als Datum (in UNIX-Zeit) betrachtet und die Differenz zwischen dieser und der aktuellen Zeit wird als eine dieser vier Variationen zurückgeliefert:
xx min oder xx hrs oder xx days oder xx yrs.
Die Begrenzungen, in denen ein Layout benutzt wird sind 60 Minuten, 24 Stunden, 356 Tage.

ANMERKUNG:
Wenn Sie diese Eigenschaft auf einen nicht-Integer-Wert setzen, wird der Wert benutzt, um die vier Einheiten zu formatieren.
Dies ist der Standardwert:
" min| hrs| days| yrs"

Setzen Sie hier einen anderen String, wenn Sie die Einheiten ändern wollen. Sie können auch die "-Zeichen dabeibehalten, die werden sowieso entfernt.

case

case

Konvertiert die Groß- und Kleinschreibung.

Für die Operation wird »renderCharset verwendet.

bytes

boolean

Wird die Eingabe (ein Integer-Wert) als Bytes formatieren: bytes, kb, mb

Wenn Sie einen Wert für die Eigenschaft labels angeben, können Sie die Standard-Suffixe ändern. Beschriftungen für Bytes, Kilo, Mega, Giga werden von vertikalen Strichen (|) getrennt und können in Anführungszeichen " eingeschlossen werden, z.B: " | K| M| G" (was übrigens auch der Standardwert ist).

substring

[p1],[p2]

Liefert den Teilstring zurück, wobei [p1] und [p2] als zweiter und dritter Parameter für die PHP-Teilstring-Funktion (»substr) verwendet werden.

Für die Operation wird »renderCharset verwendet.

removeBadHTML

boolean

Entfernt "schlechten" HTML-Code, basierend auf einem Muster, welches HTML, welches als gefährlich für XSS-Bugs angesehen wird, herausfiltert.

stripHtml

boolean

Entfernt alle HTML-Tags.

crop

Beschneidet den Inhalt auf eine bestimmte Länge.
Syntax: +/- = von links / von rechts | [String] [boolean: ganze Wörter beibehalten.]

Beispiele:
20|... = höchstens 20 Zeichen. Bei mehr Zeichen wird der String auf die ersten 20 Zeichen abgeschnitten und es wird ... angehängt.
-20|... = höchstens 20 Zeichen. Bei mehr Zeichen wird der String auf die letzten 20 Zeichen zurechtgeschnitten und es wird ... vorangestellt.
20|...|1 = höchstens 20 Zeichen. Bei mehr zeichen wird der String auf die ersten 20 Zeichen zurechtgeschnitten und es wird ... angehängt. Wenn die Trennung in der Mitte eines Wortes erfolgt, werden die Überreste dieses Wortes auch entfernt.

Für die Operation wird »renderCharset verwendet.

rawUrlEncode

boolean

Leitet den Inhalt durch die »rawurlencode()-PHP-Funktion.

htmlSpecialChars

boolean

Leitet den Inhalt durch die »htmlspecialchars()-PHP-Funktion.
Die zusätzliche Eigenschaft .preserveEntities wird Zeichen aus HTML-Sondercodes (wie z.B. &amp;) erhalten.

doubleBrTag

string

Alle Doppelzeilenumbrüche werden mit diesem Wert ersetzt.

br

boolean

PHP-Funktion »nl2br(); Konvertiert Zeilenumbrüche in <br />-Tags.

brTag

string

Alle Zeichen mit dem ASCII-Code 10 (Wagenrücklauf) werden mit diesem Wert ersetzt.

encapsLines

»encapsLines

Teilt den Inhalt nach chr(10) auf und bearbeitet jede Zeile unabhängig. Wird benutzt, um mit dem RTE erzeugen Inhalt zu formatieren.

keywords

boolean

Teilt den Inhalt nach den Zeichen ",", ";" und chr(10) (Zeilenumbruch) auf, entfernt Leerzeichen am Anfang und am Ende und liefert eine kommaseparierte Liste der Werte zurück.

innerWrap

wrap / stdWrap

innerWrap2

wrap / stdWrap

fontTag

wrap

addParams

»addParams

Ermöglicht es Ihnen, dem Inhalt Tag-Parameter hinzuzufügen, wenn der Inhalt auch ein Tag ist.

textStyle

»textStyle

Umschließt den Inhalt mit <font>-Tags.

tableStyle

»tableStyle

Umschließt den Inhalt mit <table>-Tags.

filelink

»filelink

Wird benutzt, um Listen von Links zu Dateien zu erzeugen.

preCObject

cObject

Inhaltsobjekt, welches dem Inhalt vorangeht.

postCObject

cObject

Inhaltsobjekt, welches dem Inhalt folgt.

wrapAlign

align / stdWrap

Umschließt den Inhalt mit <DIV align="[Wert]"> | </DIV>, wenn dieser Wert gesetzt ist.

typolink

»typolink

Umschließt den Inhalt mit einem Link-Tag.

spaceBefore

int / stdWrap

Vorangehender Abstand in Pixeln. Wird mit einem clear-gif erledigt; <IMG ...><BR />

spaceAfter

int / stdWrap

Abschließender Abstand in Pixeln. Wird mit einem clear-gif erledigt; <IMG ...><BR />

space

space

[»spaceBefore] | [»spaceAfter]

Zusätzliche Eigenschaft:
.useDiv=1
Wenn diese Eigenschaft gesetzt ist, wird anstelle eines clear-gifs lieber ein <DIV>-Tag benutzt, in dem die Höhe im style-Attribut angegeben wird.

wrap

wrap / +.splitChar

.splitChar definiert ein anderes Zeichen, nach dem aufgeteilt werden soll (Standardwert ist der vertikale Strich | ).

noTrimWrap

"Besonderer" wrap

Im untenstehenden Beispiel umschließt noTrimWrap den Inhalt mit den Werten val1 und val2 - einschließlich den umgebenden Leerzeichen! Beachten Sie, dass diese Art Wrap ein weiteres | am Anfang und am Ende benötigt.

Beispiel:
| val1 | val2 |

wrap2

wrap / +.splitChar

Siehe »wrap.

dataWrap

Wenn der Inhalt geparst wird und er {...}-Bereiche enthält, deren Inhalt vom Typ getText ist, dann werden diese mit den Ergebnis von getText ersetzt.

Beispiel:
Dies sollte in einem <FONT>-Tag resultieren, bei den die Schriftgröße von der globalen Variable size entschieden wird:
<font size="{global : size}"> | </font>

prepend

cObject

Inhaltsobjekt, welches dem Inhalt vorrausgeht.

append

cObject

Inhaltsobjekt, welches dem Inhalt folgt.

wrap3

wrap / +.splitChar

Siehe »wrap.

outerWrap

wrap / stdWrap

insertData

boolean

Wenn diese Eigenschaft gesetzt ist, wird der gesamte Inhalt so wie bei »dataWrap geparst.

offsetWrap

x,y

Dies Umschließt die Eingabe mit einer Tabelle mit Spalten links und oben, die den Inhalt um die durch diese Eigenschaft angegebenen Maße verschieben. Basiert auf dem Inhaltsobject »OTABLE.

postUserFunc

Funktionsname

Ruft eine PHP-Methode in einer Klasse auf, an die der Inhalt als erster Parameter und alle weiteren Eigenschaften als zweiter Parameter übergeben werden. Siehe die Beschreibung des Inhaltsobjektes »USER für weiterführende Informationen.

Beispiel:
Sie können dieses Beispiel direkt in ein neues Template einfügen.

page = PAGE
page.typeNum = 0
includeLibs.irgendwas =
media/scripts/example_callfunction.php

page.10 = TEXT
page.10 {
value = Hallo Welt!
postUserFunc = user_reverseString
postUserFunc.uppercase = 1
}

page.20 = TEXT
page.20 {
value = Hallo Welt!
postUserFunc =
user_various->reverseString
postUserFunc.uppercase = 1
postUserFunc.typolink = 11
}

postUserFuncInt

Ruft eine PHP-Methode in einer Klasse auf, an die der Inhalt als erster Parameter und alle weiteren Eigenschaften als zweiter Parameter übergeben werden. Das Ergebnis wird nicht im Cache gespeichert. Siehe die Beschreibung des Inhaltsobjektes »USER_INT für weiterführende Informationen.

Ermöglicht von Jens Ellerbrock.

prefixComment

string

Stellt dem Inhalt einen HTML-Kommentar mit dem zweiten Teil des Eingabestring (durch | getrennt) voran. Der erste Teil ist ein Integer, der angibt, wie viele Tabulatoren eingerückt werden soll, bevor eine neue Zeile begonnen wird.
Der Inhalt wird durch insertData geparst.

Beispiel:
prefixComment = 2|INHALTSELEMENT, uid:{field:uid}/{field:CType}

Rückt den Kommentar mit einem Tab ein (und die nächste Zeile mit 2+1 Tabs). Hinzugefügt in TYPO3>3.6.0RC1.

editIcons

string

Wenn diese Eigenschaft nicht leer ist, wird ein Icon eingefügt, welches auf typo3/alt_doc.php verlinkt, um ein Bearbeitungsformular für Backendbenutzer zu erzeugen.
Der Wert dieser Eigenschaft ist eine Liste von Feldern einer Tabelle, die bearbeitet werden können sollen. Es wird davon ausgegangen, dass der aktuelle Datensatz des Inhaltsobjektes derjenige ist, der bearbeitet wird.
Syntax: Optionaler Tabellenname:Kommaliste mit Feldnamen[Liste mit Palettenfeldern, durch | getrennt]

.beforeLastTag (1,0,-1): Wenn gesetzt (1), wird das Icon vor dem letzten HTML-Tag in den Inhalt eingefügt. Bei einem Wert von -1 wird das Icon vor den Inhalt eingefügt. Bei 0 wird das Icon nach den Inhalt eingefügt.

.styleAttribute (string): Fügt dem Icon-Bild ein style-Attribut mit diesem Wert zu. Zum Beispiel können Sie position:absolute einstellen, wenn Sie eine nicht-invasive Darstellung der Icons bevorzugen. Anmerkung: Alle Bearbeitungsicons haben die Klasse frontEndEditIcons, die Sie über das Stylesheet der Seite ansprechen können.

.iconTitle (string): Das title-Attribut für das Bild.

.iconImg (HTML): Alternativer HTML-Code, der anstelle des Standard-Icons angezeigt wird. Kann benutzt werden, um ein anderes Icon zum Bearbeiten einzurichten.

Beispiel:
Dies wird ein Bearbeitungssymbol einfügen, welches auf ein Formular verlinkt, in dem die header- und bodytext-Felder bearbeitet werden können (Vorrausgesetzt, der derzeitige Benutzer hat die Berechtigung dazu).
editIcons = tt_content : header, bodytext

Diese Zeile platziert die header_align- und date-Felder auf einer "Palette", was bedeutet, dass sie in einer einzelnen Zeile unter dem header-Feld dargestellt werden. Das spart etwas Platz.
editIcons = header[header_align|date], bodytext

editPanel

boolean / editPanel

Siehe »EDITPANEL.

debug

boolean

Gibt den Inhalt mit HTMLSpecialChars() und <PRE></PRE> aus: Nützlich, falls Sie herausfinden wollen, mit welchem Wert stdWrap schließlich endet, wenn Sie eine Website mit TypoScript aufbauen.
Sollte nur während der Entwicklung benutzt werden.

debugFunc

boolean

Gibt den Inhalt mit der debug()-Funktion direkt an den Browser aus. Sollte nur während der Entwicklung benutzt werden.
Ist dieser Wert auf 2 gesetzt, wird der Inhalt in einer Tabelle ausgegeben - sieht schöner aus.

debugData

boolean

Gibt den aktuellen Daten-Array $cObj->data direkt an den Browser aus. Hier erhält ».field seine Daten her.
Sollte nur während der Entwicklung benutzt werden.

Kommentare von registrierten Benutzern:

 
Autor Nachricht
Verfasst am: Mittwoch, 05-01-11 21:53
Gelöschter Benutzer
Zum override eines wrap geht z.B. mit outerWrap! Damit lassen sich zB. zwei unterschiedliche Links darstellen:
NO {
...
stdWrap.outerWrap = |
stdWrap.outerWrap.override.if.isTrue.field = nav_hide
stdWrap.outerWrap.override = |
...
}
Verfasst am: Freitag, 10-12-10 10:28
Gelöschter Benutzer
Auch praktisch um in PHP (zum Beispiel einer Extension, einem Plugin) Text entsprechend zu kürzen:

$this->cObj->stdWrap($content, $configuration);

$this->cObj->stdWrap($content, $array('crop' => '90| ...|1'));
Entsprechend können natürlich auch alle anderen Konfigurationsmöglichkeiten genutzt werden.
Nötig ist lediglich ein cObj, welches die entsprechende Methode besitzt.
Verfasst am: Donnerstag, 05-07-07 09:46
Michael
Dabei seit: 08. 04. 2007
Beiträge: 10
Die Beschreibung für den Datentyp "getText" ist aktuell nur in der englischen TSref zu finden: http://typo3.org/documentation/document-library/references/doc_core_tsref/4.1.0/view/2/2/
Verfasst am: Sonntag, 24-06-07 12:55
Michael
Dabei seit: 08. 04. 2007
Beiträge: 10
Die stdWrap-Funktion befindet sich nicht (mehr?) in der content.php unter dem oben beschriebenen Pfad sondern unter: typo3/sysext/cms/tslib/class.tslib_content.php (vgl. englische TS-Referenz)
Verfasst am: Sonntag, 15-01-06 12:37
Norman2k
Dabei seit: 01. 09. 2004
Beiträge: 880
Hier ein Beispiel für "ifEmpty", d.h. wenn z.B. in der linken Spalte kein Inhalt vorhanden ist wird der linke Inhalt von der Seite mit der PID 2 angezeigt.
TYPOSCRIPT
page.10.marks.LEFT = CONTENT
page.10.marks.LEFT < styles.content.getLeft
page.10.marks.LEFT {
  stdWrap.ifEmpty.cObject = CONTENT
  stdWrap.ifEmpty.cObject {
    table = tt_content
    select {
      pidInList = 2
      orderBy = sorting
      where = colPos = 1
      languageField = sys_language_uid
    }
  }
}


Ausführliche Schreibweise, selber Effekt:
TYPOSCRIPT
page.10.marks.LEFT = CONTENT
page.10.marks.LEFT.table = tt_content
page.10.marks.LEFT.select.orderBy = sorting
page.10.marks.LEFT.select.where = colPos = 1
page.10.marks.LEFT.select.languageField = sys_language_uid
 
page.10.marks.LEFT.stdWrap.ifEmpty.cObject = CONTENT
page.10.marks.LEFT.stdWrap.ifEmpty.cObject.table = tt_content
page.10.marks.LEFT.stdWrap.ifEmpty.cObject.select.pidInList = 2
page.10.marks.LEFT.stdWrap.ifEmpty.cObject.select.orderBy = sorting
page.10.marks.LEFT.stdWrap.ifEmpty.cObject.select.where = colPos = 1
page.10.marks.LEFT.stdWrap.ifEmpty.cObject.select.languageField = sys_language_uid
Verfasst am: Montag, 19-12-05 15:08
Jo
Dabei seit: 01. 05. 2003
Beiträge: 13
Hier noch mal die korrekte Ausgabe:

Output of Element 20:
page "My Test Page" has the uid: "{page:uid}" and is subpage of "{page:pid}"

Output of Element 30:
page "My Test Page" has the uid "81" and is subpage of "{page:pid}"

Output of Element 40:
page "My Test Page" has the uid "81" and is subpage of "4"
Verfasst am: Montag, 19-12-05 11:35
Jo
Dabei seit: 01. 05. 2003
Beiträge: 13
Beispiel zur Verwendung von value, data, wrap, dataWrap, insertData

TYPOSCRIPT
20 = TEXT
    20 {
        value = has the uid: "{page:uid}"
        wrap = <i> | </i> and is subpage of "{page:pid}"<hr>
        dataWrap = page "{page:title}" <b> | </b>
    }
 
    30 = TEXT
    30 {
        data = page:uid
        wrap = has the uid <i>" | "</i> and is subpage of "{page:pid}"<hr>
        dataWrap = page "{page:title}" <b> | </b>
    }
 
    40 = TEXT
    40 {
        value = has the uid "{page:uid}"
        wrap = <i> | </i> and is subpage of "{page:pid}"<hr>
        insertData = 1
        dataWrap = page "{page:title}" <b> | </b>
    }

Output of Element 20:
page "My Test Page" has the uid: "{page:uid}" and is subpage of

Output of Element 30:
"{page:pid}"page "My Test Page" has the uid "81" and is subpage of

Output of Element 40:
"{page:pid}"page "My Test Page" has the uid "81" and is subpage of "4"