Kategorien
- [-]Developer (104)
- API (15)
- Backend (17)
- Extensions (29)
- HTML & CSS (4)
- Typoscript (33)
- [-]Redaktionelles (21)
- Anleitungen (9)
- Tipps (8)
- [-]Sonstiges (50)
- SEO (8)
Schlagwortwolke
« | März 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 |
31 |
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
Letzte Kommentare
- Das liegt daran, dass die captcha.php versucht, das halbe...
- 05.12.2017 00:41
- Hallo, danke für den tollen Beitrag. Kann man die...
- 22.10.2015 10:05
- Vielen Dank für den Austausch guter Artikel. Es ist eine...
- 17.08.2015 10:58
- Hallo Peter, danke für die Extension. Ich habe sie auf...
- 27.08.2014 12:51
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 ...
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)
- # das erstellt einen neuen Tab im Linkbrowser. Es können mehrere erstellt werden,
- # für jede Tabelle aber nur einer.
- RTE.default.tx_linkhandler {
- # Browser für tt_news-Datensätze
- tt_news {
- # Das steht im Tab als Label
- label=Label des Tabs
- # die Tabelle, die die gewünschten Datensätze enthält
- listTables=tt_news
- # nur die Seiten im Seitenbaum zeigen, die auch die
- # gewünschen Datensätze enthalten.
- onlyPids=28,65
- }
- }
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:
- plugin.tx_linkhandler {
- tt_news {
- # uid der Seite, auf der die Singledarstellung der News erfolgt
- parameter = 25
- # weitere Parameter, insbesondere die richtige uid der News
- additionalParams=&tx_ttnews[tt_news]={field:uid}
- # nötig, damit {field:uid} ersetzt wird
- additionalParams.insertData=1
- # wichtig, damit cachen möglich ist.
- useCacheHash=1
- # versteckte News können nicht gelinkt werden
- forceLink = 0
- }
- }
Eine etwas komplexere Variante, die abhängig von der pid der News-Datensätze eine andere Seite für die Single-Darstellung aufruft:
- plugin.tx_linkhandler {
- tt_news {
- title=TEXT
- title.data = field:title
- parameter.stdWrap.cObject = CASE
- parameter.stdWrap.cObject {
- # abhängig vom Eintrag in pid der News-Tabelle
- key.field = pid
- # falls dieser 65 lautet
- 65 = TEXT
- # wird parameter auf 85 gesetzt, der uid der
- # Zielseite mit der Single-Darstellung
- 65.value = 85
- # Default für alle anderen Werte in pid
- default = TEXT
- # Zielseite mit uid 25
- default.value = 25
- }
- additionalParams=&tx;_ttnews[tt_news]={field:uid}
- additionalParams.insertData=1
- useCacheHash=1
- forceLink = 0
- }
- }
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:
- RTE.default.tx_linkhandler { {
- buecher {
- label = Buchtitel
- listTables=tx_buchtitel_liste
- onlyPids=68
- }
- }
Dazu dann diese Entsprechung in Setup für das Verarbeiten der Links:
- plugin.tx_linkhandler {
- tx_buchtitel_liste {
- parameter = 69
- additionalParams=&myParam;={field:uid}
- additionalParams.insertData=1
- useCacheHash=1
- forceLink = 0
- }
- }
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:
- RTE.default.tx_linkhandler {
- # tt_news deaktivieren, da vordefiniert:
- tt_news >
- tx_t3blog_post {
- # Das steht im Tab als Label
- label=T3Blog
- # die Tabelle, die die gewünschten Datensätze enthält
- listTables=tx_t3blog_post
- # nur die Seiten im Seitenbaum zeigen, die auch die
- # gewünschen Datensätze enthalten.
- onlyPids=###hierDieEigenePid###
- }
- }
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:
- plugin.tx_linkhandler {
- tx_t3blog_post {
- parameter = ###deinePID###
- # weitere Parameter, hier als cObject
- additionalParams.stdWrap.cObject = COA
- additionalParams.stdWrap.cObject {
- 1 = LOAD_REGISTER
- 1 {
- year {
- field = date
- strftime = %Y
- }
- month {
- field = date
- strftime = %m
- }
- day {
- field = date
- strftime = %d
- }
- }
- 10 = TEXT
- 10 {
- 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}
- insertData = 1
- }
- }
- }
- # wichtig, damit Cachen möglich ist.
- useCacheHash=1
- # versteckte News können nicht gelinkt werden
- forceLink = 0
- }
- }
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:
- styles.content.getRight.slide = -1
- styles.content.getRight.slide {
- collect = -1
- # collectReverse = 1
- }
Dieselbe Technik des Content Slide mit TemplaVoila; siehe in einem eigenen Artikel: Content Slide mit TemplaVoila.
Weiterführende Artikel:
Auch ohne TemplaVoila oder einem Template-Switcher können den Redakteuren verschiedene Layouts einfach über eine TypoScript-Konfiguration im Main-Template zur Verfügung gestellt werden:
- page = PAGE
- page {
- 10 = CASE
- 10.key.field = layout
- # Standardtemplate
- 10.0= TEMPLATE
- 10.0.workOnSubpart = DOCUMENT_BODY
- 10.0.marks {
- # etc.
- }
- # Variante 1:
- 10.1= TEMPLATE
- 10.1.workOnSubpart = DOCUMENT_BODY
- 10.1.marks {
- # etc.
- }
- # und so weiter.
- }
Standardmäßig sind vier Varianten vorgesehen. Diese können über PageTSconfig anders benannt werden:
- #In die Rootseite ins Feld Tsconfig:
- TCEFORM.pages {
- layout.altLabels.0 = Standard Vorlage
- layout.altLabels.1 = Zwei Spalter
- layout.altLabels.2 = Drei Spalter
- layout.altLabels.3 = Und so weiter.
- }
Falls vier Varianten nicht reichen, können noch weitere ergänzt werden:
- TCEFORM.pages{
- layout.addItems {
- 4 = eine weitere Variante
- # usw
- }
- }
Mit dieser Technik kann sogar das klassische 4-Spalten-Layout im Backend mit TemplaVoila kombiniert werden, von Seite zu Seite individuell und einfach vom Redakteur auszuwählen:
- page = PAGE
- page {
- 10 = CASE
- 10.key.field = layout
- # Standardtemplate
- 10.0 = USER
- 10.0.userFunc = tx_templavoila_pi1->main_page
- # Variante 1:
- 10.1= TEMPLATE
- 10.1.workOnSubpart = DOCUMENT_BODY
- 10.1.marks {
- # etc.
- }
- # und so weiter.
- }
Allerdings muss dann TemplaVoila so konfiguriert werden, dass in der Rubrik »Web« im Backend beide Seiten-Module gezeigt werden: für TemplaVoila und das klassische. (Je nach Seitenlayout muss das passende Modul für die Eingabe der Inhalte verwendet werden). Dazu öffnet man im Extension Manager TemplaVolia und aktiviert die Option »Enable the classic page module«. Aber Achtung: da beide Seitenmodule leicht verwechselt werden können, erstellen ungeübte Redakteure schnell Inhalte in den falschen Modulen, was dazu führen kann, dass Inhalte zwar in TemplaVoila erscheinen sollen, aber dort nicht referenziert und damit letztlich auch nicht gezeigt werden. Diese Technik setzt also Redakteure voraus, die wissen was sie tun.
Falls doch einmal Inhalte nicht in TemplaVoila referenziert werden und damit nicht im Frontend erscheinen, so gibt es unter »Funktionen« den Assistenten »Referenziere unbenutzte Inhaltselement (TemplaVolia)«. Damit werden alle Inhaltselement in TemplaVoila-Spalten eingefügt – leider oft in die falschen. Aber immerhin sind sie jetzt da und und in der aktuellen Version von TemplaVoila können Inhaltselemente leicht per Drag und Drop verschoben werden, so dass sich der Aufwand in Grenzen hält.
Üblicherweise kann man Daten aus der pages-Tabelle mit dem Schlüsselwort »field» auslesen, etwa so:
- temp.head = COA
- temp.head {
- 10 = TEXT
- 10.field = subtitle//title
- }
Leider funktioniert das nicht mehr, wenn TemplaVoila im Einsatz ist.; man kann nicht mit »field« auf ein Datenfeld der »pages«-Tabelle zugreifen. Folgende Ansätz funktionieren:
- lib.page_head = COA
- lib.page_head {
- 10 = TEXT
- 10.data = page:subtitle
- 10.ifEmpty.cObject = TEXT
- 10.ifEmpty.cObject.data = page:title
- 10.wrap=<h2>|</h2>
- }
- # oder einfacher:
- lib.page_head = COA
- lib.page_head {
- 10 = TEXT
- 10.data = page:subtitle // page:title
- 10.wrap=<h2>|</h2>
- }
Weiterführende Links:
Wenn FCEs eingesetzt werden, so muss unter Umständen für jede Spalte ein eigener Wert für die Bildgröße eingesetzt werden. Das geht über eine Modifikation der DataStructure – also des XML – des FCE.
Diese drei Zeilen:
- 10 = RECORDS
- 10.tables = tt_content
müssen ersetzt werden durch:
- 5 = LOAD_REGISTER
- 5.maxImageWidthInText = xyz
- 5.maxImageWidth = abc
- 10 = RECORDS
- 10.tables = tt_content
- 15 = RESTORE_REGISTER
Natürlich geht das auch bei FCEs, die einen Inhaltsbereich für ein Bild enthalten. In diesem sieht der Code so aus: