Flexible MARKER im Text

Armin Bartsch, Montag, 29. Juni 2009

Lassen Sie im Text einen flexiblen Inhalt anzeigen, z.B. den Namen des eingeloggten Users oder ein Datum

MARKER, auch als Platzhalter bezeichnet, werden von vielen bei der Erstellung von Seiten mit HTML-Vorlagen über das cObject Template genutzt. Damit lassen sich bequem generierte Inhalte in eine Vorlage einfügen.
Lesen Sie dazu bitte Moderne Templateerstellung, Teil1

Der Einsatz von Markern kann noch umfangreicher genutzt werden, so das die Pflege von flexiblen Textinhalten (Contents) mit Markern vereinfacht werden kann. Neben den Markern stehen noch andere Möglichkeiten zur Verfügung um Textinhalte flexibel zu halten, ich beschränke mich hier auf Marker.

Marker Einführung

Der Marker ist als Platzhalter zu sehen. Der Marker kann durch einen beliebigen Inhalt ersetzt werden. In TYPO3 werden Maker in ###BELIEBIGER_NAME### eingefasst.

Flexible Marker

Um flexible Marker einsetzten zu können, greife ich auf das cObject TEMPLATE zu. Das erfordert allerdings einige Änderungen im TypoScript. Es gibt eine Alternative mit der TLO constans, allerdings ohne flexibilität.

Marker erstellen

Damit die Marker im Text ersetzt werden, müssen diese erstellt und anschließend einen Wert zugewiesen bekommen.

Damit die Verwaltung der Marker einfach zu erledigen ist, werden die Marker in einem TLO temp angelegt.

temp.marks = cObject temp.marks { USER = TEXT USER { value = Gast override.cObject = TEXT override.cObject { data = TSFE:fe_user|user|username required = 1 } } }
  1. temp.marks = cObject
  2. temp.marks {
  3.   USER = TEXT
  4.   USER {
  5.     value = Gast
  6.     override.cObject = TEXT
  7.     override.cObject {
  8.       data = TSFE:fe_user|user|username
  9.       required = 1
  10.     }
  11.   }
  12. }

Ich habe hier eine TLP temp.marks angelegt, dort werden nun alle Marker angelegt.

Der erste Marker ist USER, den ich das cObject TEXT zuweise und anschließend fülle. Bei dem TypoScript wird der Username ausgegeben, wenn es sich um einen nicht eingeloogten User handelt wird "Gast" ausgegeben.

Testausgabe: Sie sind: ###USER### (diese Ausgabe wurde flexible eingefügt)

CSS Styled Content anpassen

Damit die Inhalte auch als TEMPLATE behandelt werden, muss noch das setup der CSS Styled Content angepasst werden da dort die Inhalte in der Regel als cObject TEXT angelegt werden.

Das bedeutet, das die ganzen Inhaltselemente und evtl. Extensionen die Text beinhalten und in denen Marker zum Einsatz kommen sollen angepasst werden müssen.

Inhaltstyp Text

Die Anpassungen beschränken sich in der Regel auf wenige Zeilen, ich stelle hier aber zur besseren Verdeutlichung die gesamte Definition für den Inhaltstypen Text ein.
Bitte schauen Sie sich zum Vergleich die Orginal Angaben von CSS Styled Content an!

# ***************** # CType: text # ***************** tt_content.text = COA tt_content.text { 10 = < lib.stdheader 20 = TEXT 20 { field = bodytext required = 1 parseFunc = < lib.parseFunc_RTE editIcons = tt_content:bodytext, rte_enabled editIcons.beforeLastTag = 1 editIcons.iconTitle.data = LLL:EXT:css_styled_content/pi1/locallang.php:eIcon.bodytext prefixComment = 2 | Text: } }
  1. # *****************
  2. # CType: text
  3. # *****************
  4. tt_content.text = COA
  5. tt_content.text {
  6.   10 = < lib.stdheader
  7.  
  8.   20 = TEXT
  9.   20 {
  10.     field = bodytext
  11.     required = 1
  12.  
  13.     parseFunc = < lib.parseFunc_RTE
  14.  
  15.     editIcons = tt_content:bodytext, rte_enabled
  16.     editIcons.beforeLastTag = 1
  17.     editIcons.iconTitle.data = LLL:EXT:css_styled_content/pi1/locallang.php:eIcon.bodytext
  18.  
  19.     prefixComment = 2 | Text:
  20.   }
  21. }

Hier nun das angepasste TypoScript

tt_content.text > tt_content.text = COA tt_content.text { 10 = < lib.stdheader 20 = TEXT 20 { cObject = TEMPLATE cObject { template = TEXT template.field = bodytext marks < temp.marks } required = 1 parseFunc = < lib.parseFunc_RTE editIcons = tt_content:bodytext, rte_enabled editIcons.beforeLastTag = 1 editIcons.iconTitle.data = LLL:EXT:css_styled_content/pi1/locallang.php:eIcon.bodytext prefixComment = 2 | Text: } }
  1. tt_content.text >
  2. tt_content.text = COA
  3. tt_content.text {
  4.   10 = < lib.stdheader
  5.        
  6.   20 = TEXT
  7.   20 {
  8.     cObject = TEMPLATE
  9.     cObject {
  10.         template = TEXT
  11.      template.field = bodytext
  12.         marks < temp.marks
  13.      
  14.     }
  15.  
  16.     required = 1
  17.  
  18.     parseFunc = < lib.parseFunc_RTE
  19.  
  20.     editIcons = tt_content:bodytext, rte_enabled
  21.     editIcons.beforeLastTag = 1
  22.     editIcons.iconTitle.data = LLL:EXT:css_styled_content/pi1/locallang.php:eIcon.bodytext
  23.  
  24.     prefixComment = 2 | Text:
  25.  
  26.   }
  27. }

Wie dem TypoScript zu entnehmen, wird der Inhalt für TEXT nicht direkt gefüllt sondern über ein weiteres cObject das als TEMPLATE definiert ist. Das TLO temp.marks wird in marks kopiert so dass die anfangs angelegten Marker zur Verfügung stehen.

Kurzform des TypoScript, es werden nur die Notwendigen Änderungen neu definiert:

tt_content.text { 10 = < lib.stdheader 20 = TEXT 20 { file > cObject = TEMPLATE cObject { template = TEXT template.field = bodytext marks < temp.marks } } }
  1. tt_content.text {
  2.   10 = < lib.stdheader
  3.        
  4.   20 = TEXT
  5.   20 {
  6.     file >
  7.     cObject = TEMPLATE
  8.     cObject {
  9.         template = TEXT
  10.      template.field = bodytext
  11.         marks < temp.marks
  12.      
  13.     }
  14.   }
  15. }

Alternative TLO constants

TYPO3 stellt das Top-Level-Objekt constants zur Verfügung.

constants.MAIL = Ihre(at)Mail.de
  1. constants.MAIL = Ihre(at)Mail.de

Mit constants.MAIL = ihre(at)mail.de werden nun alle ###MAIL### in Ihren Contents ersetzt. constans muss als TLO in ihrem Template definiert werden.

constans ist eine einfache Möglichkeit um Marker in Contents ersetzen zu lassen. Der größte Nachteil ist, das constans keine dynamische Werte annehmen kann. Sie müssen  die Inhalte direkt angeben und können nicht auf zur Laufzeit erstellten Werte/Variablen zugreifen, z.B. das aktuelle Datum. Sollen constans auch für andere cObjecte als nur für tt_content zur Verfügung stehen, muss das jeweilige cObject erweitert werden.

setCurrent { parseFunc.constants = 1 }
  1. setCurrent {
  2.     parseFunc.constants = 1
  3. }

Sponsored by:

ideenwerft webhosting
ideenwerft caretaker