Schnellnavigation:

Kategorien

« April 2024»
S M T W T F S
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30        

Letzte Nachrichten

DSGVO
26.05.2018 18:39
Trackingtools und Datenschutzerklärung
14.03.2014 23:07
1:n und n:1 Relationen in Extbase
06.12.2013 12:04
Erste Abmahnungen wegen Google Analytics
04.10.2013 12:11

Kopieren Sie diesen Link in Ihren RSS-Reader

RSS 0.91Nachrichten
RSS 2.0Nachrichten

In eigener Sache

Peter Linzenkirchner, Lisardo EDV Beratung in Augsburg. Freelance und Partner für Design- und Webagenturen in Augsburg und München. Pixelgenaue Templates, valides HTML, barrierearm. TYPO3-Projekte, Extension-Programmierung und mehr ... 

Zur Zeit wird gefiltert nach: Typoscript
Filter zurücksetzen

Es besteht die Möglichkeit Konstanten zu definieren, die im RTE bzw. in allen Texteingabefeldern verwendet werden können. Diese Konstanten werden im RTE einfach in dieser Schreibweise eingefügt: ###MEINE_KONSTANTE###. Bei der Ausgabe im Frontend können diese Konstanten gegen einen vorgegeben Text oder gegen ein HTML-Snippet ersetzt werden.

Dazu müssen die Konstanten lediglich auf der obersten Ebene im Setup des TypoScript-Templates definiert werden:

  1. ##### Konstanten definieren #####
  2. constants.MEINE_KONSTANTE= <span class="myClass">irgend ein Text</span>
  3.  

Verantwortlich dafür sind diese Einträge, die standardmäßig eingeschaltet sind:

  1. lib.parseFunc.constants=1
  2. lib.parseFunc_RTE.constants=1

Damit wird sowohl im RTE wie in allen Texteingabefeldern die Ersetzung der Konstanten eingeschaltet. Das gilt auch für die Eingabefelder von Extensions, soweit diese durch eine der beiden Funktionen geparst werden.

Platzhalter oder Abkürzungen

Neben diesen Konstanten können Abkürzungen oder Ausdrücke definiert werden, die bei der Ausgabe ins Frontend ersetzt oder expandiert werden. Diese Abkürzungen oder Platzhalter müssen im TypoScript-Setup zunächst definiert werden:

  1. ##### Abkürzungen definieren
  2. lib.parseFunc_RTE.short {  
  3.     T3= <span class="test">Typo3</span>
  4. }

Dabei ist darauf zu achten, dass diese Definition diesmal nicht global erfolgt sondern lokal; um sie also auch in anderen Textfeldern verwenden zu können müssen sie für die normale parseFunc nochmals definiert werden.

Im RTE muss nur die Abkürzung oder der Platzhalter eingegeben werden – es ist keine weitere Auszeichnung erforderlich. Im obigen Beispiel wird ein alleinstehendes »T3« im Frontend automatisch durch »Typo3« in einem span-Tag ersetzt. Allerdings sollte dabei bedacht werden, dass diese Abkürzungen immer ersetzt werden; sinnvoll wären also nur eindeutige Abkürzungen.

Weiterführende Links

Der Abschnitt über die ParseFunc im TSconfig.

Es ist möglich, die Felder eines Mailformulars mit GET-Variablen vorzubelegen. Das muss allerdings mit Hilfe von TypoScript vorbereitet werden.

Folgendes Beispiel geht davon aus, dass das Formular mit der Variablen ?prod=xx aufgerufen wird. xx enthalt die uid eines News-Eintrags. Anhand der übergebenen uid soll das Formular mit dem Titel des News-Eintrags vorbelegt werden.

  1. tt_content.mailform {
  2.     # Kann auch an anderer Stelle erfolgen -
  3.     # das Register ist global
  4.  

  1.     15=LOAD_REGISTER
  2.     15 {
  3.       # REGISTER hat stdWrap-Eigenschaften, hier cObject
  4.       # Dadurch ist es möglich, das Register mit einer
  5.       # Datenbankabfrage zu füllen, was
  6.       # hier passiert mit Hilfe von RECORDS
  7.       produktname.cObject=RECORDS

  1.       # Contentobjekt RECORDS wird aufgerufen
  2.       produktname.cObject {
  3.           # source: Liste von uid. Mit stdWrap-
  4.           # Eigenschaften.
  5.           # data: stdWrap vom Typ getText
  6.           source.data=GPvar:prod
  7.           # tables: Liste der Tabellen
  8.           tables=tt_news
  9.           # Mit source und tables wird der Datenbank-Inhalt
  10.           # abgefragt.
  11.           # Dieser Inhalt muss jetzt noch gerendert werden.
  12.           # conf.[Tabelle]: Configarray zum Rendern des
  13.           # Inhalts (cObject)
  14.  

  1.           conf.tt_news=TEXT
  2.           conf.tt_news {
  3.               field=title
  4.           }
  5.       }
  6.   }
  7. }
  8. # Nötig, damit der die Variable auch wirklich ersetzt wird
  9. tt_content.mailform.20.data.insertData=1
  10. # Cache muss deaktiviert sein
  11. config.no_cache=1

Im Formular kann so auf den Wert zugegriffen werden:

  1. Name: | *Name=input,40
  2. Firma: |Firma=input,40
  3. Straße: |Strasse=input,40
  4. PLZ/Ort: |Ort=input,40
  5. Telefon: |Telefon=input,40
  6. E-Mail: | *email=input,40| |EMAIL
  7. Produkt: |Produkt=input,40|{register:produktname}
  8. Ihre Nachricht: |Mitteilung=textarea,40,8

Beim Anlegen von Kopien oder von neuen Sprachen wird in leere Titel-Felder immer der String »( Copy x ) eingefügt. Das stört beim Kopieren von vielen Einträgen oder beim schnellen Anlegen von Übersetzungen ganz enorm.

Mit Hilfe eines Eintrag im Page TSconfig in der Root-Seite kann das verhindert bzw. ausgeschaltet werden:

  1. TCEMAIN.default.disablePrependAtCopy = 1

Weiterführende Links

Page TSconfig auf top3.org

Achtung Update!

Dieser Artikel ist schon einigermaßen alt – im wesentlichen stimmen die hier beschriebenen Techniken noch, aber zur Zeit läuft vor allem die Extension linkhandler nicht in TYPO3 in Version 6.x. Sie wirft im Backend solche Fehler, dass es nicht mehr zugänglich ist. Also mein Tipp: auf keinen Fall über den Extensionsmanager installieren, sondern diesen Fork von Github verwenden. Einfach herunterladen, das zip-Archiv auspacken und den entstehenden Ordner umbenennen in »linkhandler«. 

Eine Anpassung an die neue News-Extension findet ihr in einem neueren Artikel zu diesem Thema: Links im RTE auf News-Einträge mit der Extension linkhandler

Mit der Extension linkhandler können im RTE (bzw. in den normalen Inhaltselementen) Links auf News-Einträge oder auf beliebige sonstige Datensätze erstellt werden. Sie funktioniert sehr gut und lässt sich ideal konfigurieren.

Installation

Normal installieren und nicht vergessen, das statische Template einzubinden. Danach funktioniert die Extension insoweit, dass man Links im RTE erstellen kann; allerdings werden diese noch nicht im Frontend geparst. Das muss über TypoScript erst konfiguriert werden.

Konfiguration des Link-Browsers im RTE

Dazu folgende Zeilen im TSconfig der Rootseite eingeben (bzw. der Seite, die auch die restliche Konfiguration des RTE enthält)

  1. # das erstellt einen neuen Tab im Linkbrowser. Es können mehrere erstellt werden,
  2. # für jede Tabelle aber nur einer.
  3. RTE.default.tx_linkhandler {
  4.   # Browser für tt_news-Datensätze
  5.   tt_news {
  6.       # Das steht im Tab als Label
  7.       label=Label des Tabs
  8.       # die Tabelle, die die gewünschten Datensätze enthält
  9.       listTables=tt_news
  10.       # nur die Seiten im Seitenbaum zeigen, die auch die
  11.       # gewünschen Datensätze enthalten.
  12.       onlyPids=28,65
  13.   }
  14. }

Konfiguration der Links

Die Links müssen im TypoScript-Setup konfiguriert werden. Die einfache Variante verwendet nur eine einzige Zielseite für die Singledarstellung der News:

  1. plugin.tx_linkhandler {
  2.   tt_news {
  3.       # uid der Seite, auf der die Singledarstellung der News erfolgt
  4.       parameter = 25
  5.       # weitere Parameter, insbesondere die richtige uid der News
  6.       additionalParams=&tx_ttnews[tt_news]={field:uid}
  7.       # nötig, damit {field:uid} ersetzt wird
  8.       additionalParams.insertData=1
  9.       # wichtig, damit cachen möglich ist. 
  10.       useCacheHash=1
  11.       # versteckte News können nicht gelinkt werden
  12.       forceLink = 0
  13.   }
  14. }

Eine etwas komplexere Variante, die abhängig von der pid der News-Datensätze eine andere Seite für die Single-Darstellung aufruft:

  1. plugin.tx_linkhandler {
  2.   tt_news {
  3.       title=TEXT
  4.       title.data = field:title
  5.       parameter.stdWrap.cObject = CASE
  6.       parameter.stdWrap.cObject {
  7.           # abhängig vom Eintrag in pid der News-Tabelle
  8.           key.field = pid
  9.           # falls dieser 65 lautet
  10.           65 = TEXT
  11.           # wird parameter auf 85 gesetzt, der uid der
  12.           # Zielseite mit der Single-Darstellung
  13.           65.value = 85
  14.           # Default für alle anderen Werte in pid
  15.           default = TEXT
  16.           # Zielseite mit uid 25
  17.           default.value = 25
  18.       }
  19.       additionalParams=&tx;_ttnews[tt_news]={field:uid}
  20.       additionalParams.insertData=1  
  21.       useCacheHash=1
  22.       forceLink = 0
  23.   }
  24. }

Man kann auch beliebige andere Tabellen ansprechen, auch aus eigenen Extensions. Hier ein Beispiel im TSConfig, das weitere Reiter im Dateibrowser des RTE erzeugt, die auf Datensätze von eigenen Extensions zugreifen:

  1. RTE.default.tx_linkhandler { {
  2.   buecher {
  3.       label = Buchtitel
  4.       listTables=tx_buchtitel_liste
  5.       onlyPids=68
  6.   }
  7. }

Dazu dann diese Entsprechung in Setup für das Verarbeiten der Links:

  1. plugin.tx_linkhandler {
  2.   tx_buchtitel_liste {
  3.       parameter = 69
  4.       additionalParams=&myParam;={field:uid}
  5.       additionalParams.insertData=1  
  6.       useCacheHash=1
  7.       forceLink = 0
  8.      
  9.   }
  10. }

Dabei ist tx_buchtitel_liste der Name der SQL-Tabelle, parameter die uid der Zielseite mit der Single-Darstellung. So können beliebig viele Reiter im RTE angelegt werden, die auf Datensätze in beliebigen Tabellen verweisen.

Linkhandler für t3blog

Die Einstellungen für t3blog funktionieren prinzipiell genauso. Zunächst das TSconfig:

  1. RTE.default.tx_linkhandler {
  2.   # tt_news deaktivieren, da vordefiniert:
  3.   tt_news >
  4.   tx_t3blog_post {
  5.       # Das steht im Tab als Label
  6.       label=T3Blog
  7.       # die Tabelle, die die gewünschten Datensätze enthält
  8.       listTables=tx_t3blog_post
  9.       # nur die Seiten im Seitenbaum zeigen, die auch die
  10.       # gewünschen Datensätze enthalten.
  11.       onlyPids=###hierDieEigenePid###
  12.   }
  13. }

Im Setup gibt es aber eine Besonderheit, da für Links auf einen Blogeintrag  neben der uid des Postings auch das Datum iausgegeben werden muss – zumindest ist das erforderlich, wenn RealURL eingesetzt wird. Hier hilft die stdWrap-Funktion mit cObject weiter: 

  1. plugin.tx_linkhandler {
  2.   tx_t3blog_post {
  3.       parameter = ###deinePID###
  4.       # weitere Parameter, hier als cObject
  5.       additionalParams.stdWrap.cObject = COA
  6.         additionalParams.stdWrap.cObject {
  7.             1 = LOAD_REGISTER
  8.             1 {
  9.               year {
  10.                   field = date
  11.                   strftime = %Y
  12.               }
  13.               month {
  14.                   field = date
  15.                   strftime = %m
  16.               }
  17.               day {
  18.                   field = date
  19.                   strftime = %d
  20.               }
  21.             }
  22.            
  23.             10 = TEXT
  24.             10 {
  25.               value = &tx_t3blog_pi1[blogList][showUid]={field:uid}&tx_t3blog_pi1[blogList][year]={register:year}&tx_t3blog_pi1[blogList][month]={register:month}&tx_t3blog_pi1[blogList][day]={register:day}
  26.               insertData = 1
  27.             }
  28.            
  29.         }
  30.       }
  31.       # wichtig, damit Cachen möglich ist. 
  32.       useCacheHash=1
  33.       # versteckte News können nicht gelinkt werden
  34.       forceLink = 0
  35.   }
  36. }

 

 

29August2010

Content slide

Vererbung von Inhalten einer Contentspalte auf untergeordnete Seiten ist seit Version 4.0 auch ohne die Extension »KB Content Slide« möglich.

Neue Eigenschaften für cObject »CONTENT«:

Eigenschaft

Datentyp   

Beschreibung

slide

integer 

Aktiviert die Vererbung. Angegeben wird die Anzahl der Ebenen, die nach oben durchsucht werden, oder -1 für Root

slide.collect

integer

Aktiviert das Sammeln. Wie oben muss die Anzahl der Ebenen angegeben werden, die durchsucht werden sollen, oder alternativ -1.

slide.collectReverse 

boolean

Normalerweise werden die Inhalte der aktuellen Seite oben gezeigt und danach die der übergeordneten Seiten. Mit diesem Flag kann dies umgekehrt dargestellt werden.

Und so wird es verwendet:

  1. styles.content.getRight.slide = -1
  2. styles.content.getRight.slide {
  3.   collect = -1
  4.   # collectReverse = 1
  5. }

Dieselbe Technik des Content Slide mit TemplaVoila; siehe in einem eigenen Artikel: Content Slide mit TemplaVoila.

Weiterführende Artikel:

Kategorien: Typoscript  Kommentare 0
Tags: slide, typoscript