Aufgabenstellung: Ersetzen eines Markers mit dynamischem Inhalt im Inhaltstext.
Hätte es sich um einen statischen Marker gehandelt (###NACH_OBEN### soll zu <a href=“#“>Nach oben</a> werden), dann wäre das TLO constants die richtige Vorgehensweise gewesen. Im TS-Setup wäre folgendes eingetragen worden:
constants.NACH_OBEN = <a href="#">Nach oben</a>
Diese Zeile bewirkt, dass der Marker ###NACH_OBEN### im Inhaltstext (bodytext) durch einen Link ersetzt wird, der an den Seitenanfang springt. Dies funktioniert aber nur für Konstanten, nicht für Inhaltselemente, die durch Zufall ausgewählt und angezeigt werden sollen.
Eine Lösung wäre es gewesen, für den RTE einen neuen Tag zu schaffen und diesen über lib_parseFunc_RTE ersetzen zu lassen. Dieser Ansatz wurde nicht gewählt, da im Text bereits Marker durch Zufallsbilder ersetzt wurden und mit den Tags ein Umdenken erforderlich gewesen wäre.
Stattdessen wurde hier der Ansatz über ein TEMPLATE-Objekt gewählt.
- Ein Inhaltselement eines festgelegten SysFolders „Werbung“ wird per Zufall ausgewählt. Von ihm soll nur der Inhalt des Feldes „bodytext“ übernommen werden.
- Der Inhalt (bodytext) der aktuellen Seite wird über css_styled_content geholt
- Im Template-Objekt wird der der Marker WERBUNG (###WERBUNG###) durch den zufällig ausgewählten Inhaltsblock ersetzt. Vorher wird jedoch noch ein Wrap (DIV-Container) um den Inhalt gelegt, damit er per CSS formatiert werden kann.
- Einfügen des bearbeiteten Artikelinhalts (mit Werbeblock) in die Seite
ad 1) Zufällige Auswahl des Werbetextes aus einem SysFolder mit Inhaltselementen
In TS-Constant steht:
# PID des SysFolders in dem die Werbeblöcke stehen (hier page.uid=123)
PIDwerbung = 123
Snippet TS-Setup:
# zufaellige Auswahl eines Inhaltselementes
temp.werbung = COA_INT
temp.werbung {
10 = CONTENT
10 {
table = tt_content
select {
pidInList = {$PIDwerbung}
orderBy = RAND()
max = 1
languageField = sys_language_uid
}
renderObj = TEXT
renderObj {
field = bodytext
}
wrap = <div class="werbung"><span class="werbung2">Werbung:</span><br /> | </div>
}
}
ad 2) Holen Seiteninhalt über css_styled_content
# Holen des Seiteninhaltes
temp.inhalt < styles.content.get
Das setzt natürlich voraus, dass „css_styled_content“ im Root-Template unter „Include static (from extensions)“ eingefügt wurde.
ad 3) Ersetzen des Werbeblock im temporären Inhalt
# Parsen Seiteninhalt und einsetzen Werbeblock (Marker ###WERBUNG###)
temp.mytemp = TEMPLATE
temp.mytemp {
template < temp.inhalt
marks {
WERBUNG < temp.werbung
}
}
ad 4) Einsetzen des geparsten Inhalts in die Seite
Hier im Gesamtkontext zu sehen. Die entscheidende Zeile lautet: CONTENT < temp.mytemp
Die Typoscripte der anderen Bereiche (LEFT, FOOTER etc.) sind nicht enthalten.
TS-Constants für diesen Teil:
path=fileadmin/
TS-Setup für diesen Teil:
page=PAGE
page.typeNum = 0
page {
includeCSS {
# this declaration to include these files in the t3d-export
default = fileadmin/css/default.css
navigation = fileadmin/css/navigation.css
rte = fileadmin/css/rte.css
# and now overlay with a more flexible declaration:
default = {$path}css/default.css
navigation = {$path}css/navigation.css
rte = {$path}css/rte.css
}
10 = TEMPLATE
10 {
template= FILE
# same as above
template.file = fileadmin/template/mastertemplate.html
# more flexible
template.file = {$path}template/mastertemplate.html
workOnSubpart = DOCUMENT
marks {
LOGO < temp.logo
MAINMENU < temp.mainmenu
BREADCRUMB < temp.breadcrumb
LEFT < temp.left
CONTENT < temp.mytemp
RIGHT < temp.right
FOOTER < temp.footer
}
}
}
Das wars. Auf der nächsten Seite gibt es das Ganze noch mal im Zusammenhang zu sehen.
Seiten: 1 2