hi,
vorweg, ich arbeite mit TYPO3 4.1.2 und der TV Version 2.0.9 von YAML
diejenigen, die mit tt_news arbeiten haben vielleicht das selbe problem, welches ich hatte.
Es geht darum auf mehreren Seiten, welche die News Extension tt_news beinhalten,
unterschiedliche HTML Templates zu definieren. tt_news bietet von haus aus nur die Möglichkeit
ein einziges HTML Template global per CONSTANTS zu definieren. Möchte man ein weiteres HTML
Template definieren, muss man dies direkt im Contentelement unter dem Reiter "Template" einfügen.
Der Nachteil:- man muss es mehrmals definieren, unzwar für jede Ansicht einzeln (Single, List, etc).
Bei mehreren Seiten ein ziemlicher aufwand
- bei jeder Definition wird die Originaldatei in das Verzeichnis "uploads/tx_ttnews/" kopiert. hat man
mehrere Seiten welche das gleiche HTML Template nutzen wird die datei trotzdem mehrmals kopiert
(template.html, template_01.html, template_02.html, ect)
- unnötige dateivervielfältigung und speicherverschwendung. (fragen wie "welche datei muss ich nun
editieren, wenn ich eine änderung des layouts vornehmen muss?" tauchen schnell auf)
Da ich das persönlich ziemlich nervig finde, hab ich mir ne lösung programmiert. Ich habe eine kleine
TypoSript Extension geschrieben, mit der man über den Constant Editor die HTML Dateien auswählen
kann und jedem HTML Template eine Liste an PIDs geben kann, in der dieses HTML Template genutzt
werden soll.
Man erstellt zuerst ein Extension TS Template im "General Storage" SysFolder (meine heißt "+ext tt_news")
im Constants Editor folgendes eintragen
Code:
TSConstantEditor.tt_news-HTML-Templates {
header = HTML Templates for News Extension
description = Dies ist eine kleine Erweiterung für die News Extension, mit der man bequem mehrere HTML Tempates für unterschiedliche Bereiche der Website angeben kann.
1 = FirstHtmlTemplate, SecondHtmlTemplate, ThirdHtmlTemplate, FourthHtmlTemplate
2 = PIDListFirstTemplate, PIDListSecondTemplate, PIDListThirdTemplate, PIDListFourthTemplate
}
# cat=tt_news-HTML-Templates/file/a; type=string; label= First HTML-Template File
FirstHtmlTemplate = EXT:tt_news/pi/tt_news_v2_template.html
# cat=tt_news-HTML-Templates/file/b; type=string; label= Second HTML-Template File
SecondHtmlTemplate = EXT:tt_news/pi/tt_news_v2_template.html
# cat=tt_news-HTML-Templates/file/c; type=string; label= Third HTML-Template File
ThirdHtmlTemplate = EXT:tt_news/pi/tt_news_v2_template.html
# cat=tt_news-HTML-Templates/file/d; type=string; label= Fourth HTML-Template File
FourthHtmlTemplate = EXT:tt_news/pi/tt_news_v2_template.html
# cat=tt_news-HTML-Templates/pid/a; type=string; label= PID of first HTML-Template:enter PID (or comma separated list of PIDs) where first template should be used
PIDListFirstTemplate = 0
# cat=tt_news-HTML-Templates/pid/b; type=string; label= PID of second HTML-Template:enter PID (or comma separated list of PIDs) where second template should be used
PIDListSecondTemplate = 0
# cat=tt_news-HTML-Templates/pid/c; type=string; label= PID of third HTML-Template:enter PID (or comma separated list of PIDs) where third template should be used
PIDListThirdTemplate = 0
# cat=tt_news-HTML-Templates/pid/d; type=string; label= PID of fourth HTML-Template:enter PID (or comma separated list of PIDs) where fourth template should be used
PIDListFourthTemplate = 0
Nun muss man dies im RootTemplate noch referenzieren:
Modul Template -> Rootpage anklicken -> "Click here to edit whole template record" anklicken ->
bei "Include basis template:" das erstellte Ext.Template eintragen.
Im "Setup" Field folgendes eintragen (am besten da, wo auch der Rest zu tt_news steht):
Code:
[PIDinRootline = {$PIDListFirstTemplate}]
plugin.tt_news.templateFile = {$FirstHtmlTemplate}
[global]
[PIDinRootline = {$PIDListSecondTemplate}]
plugin.tt_news.templateFile = {$SecondHtmlTemplate}
[global]
[PIDinRootline = {$PIDListThirdTemplate}]
plugin.tt_news.templateFile = {$ThridHtmlTemplate}
[global]
[PIDinRootline = {$PIDListFourthTemplate}]
plugin.tt_news.templateFile = {$FourthHtmlTemplate}
[global]
"Speichern & Schließen" anklicken.
Rechts oben den "Constant Editor" auswählen. Im Pulldown Menu sollte der Eintrag
"TT_NEWS-HTML-TEMPLATES ( 8 )" erscheinen. Diesen auswählen.
Um das ganze zu testen, sollte man den Original "templateFile" Eintrag der tt_news
Extension löschen (also in der tt_news Extension kein html template auswählen).
Auch kontrollieren, dass in den einzelnen ContentElementen kein html template
referenziert ist.
Nun können wir für den ersten Eintrag "FirstHtmlTemplate" meiner kleinen TypoScript
Extension ein HTML Template auswählen. Im unteren Bereich muss man nun die PID
angeben "PIDListFirstTemplate", auf welcher das gewählte HTML Template angewendet
werden soll. Möchte man mehrere Seiten angeben, dann die PIDs durch ein Komma
trennen. Bei verschachtelten Seitenstrukturen muss nur die PID der Seite der ersten
Ebene angeben werden.
Hat man nun einen anderen Bereich der Website auf der ebenfalls die tt_news Extension
eingesetzt wird, jedoch ein anderes HTML Template erhalten soll, kann man im Feld
"SecondHtmlTemplate" das zweite HTML Template und im Feld "PIDListSecondTemplate"
die PID der dazugehörigen Seite eintragen.
Das wars. Mehr muss nicht getan werden. Sollten einem die vier Eingabemöglichkeiten nicht
ausreichen, dann kann es natürlich erweitert werden.
Ich hoffe es ist alles verständlich und nachvollziehbar geschrieben.
Ich wünsche allen ein besseres Arbeiten und viel Spaß mit meiner TS Extension :)
PS: Cache löschen nicht vergessen ;)
Lesezeichen