Hallo,
ich stehe vor einem "interessanten" Problem. Ich möchte an tt_content Elemente einen HTML Code anfügen der aber bevor er angehängt wird noch zusätzlich dynamisch angepasst werden soll (zB je nach ausgewählter Sprache) - der Einfachkeit halber nehmen wir folgendes an:
<div id="referal"><a href="http://ref.com/###LANG###/some/path/ref.php?code=###CODE###">Ref</a></div>
Das ist der Code der angehängt werden soll, der Redakteur soll aber nicht ein HTML Content Element erstellen mit diesem Inhalt sondern ich möchte ihm die Möglichkeit geben in einem tt_content Element ein Feld zu haben mit einer Checkbox, dass der Code hinzugefügt werden soll und mit dem Code (der dann für alle Sprachen gleich ist) - das soll auch nur in der Grundsprache eingefügt werden und nicht in den Übersetzungen (die Website hat > 20 Sprach/Ländervarianten)
Für die DE-DE Variante soll das dann so aussehen:
<div id="referal"><a href="http://ref.com/de-de/some/path/ref.php?code=ABC123>Ref</a></div>
Das ganze im Backend umzusetzen mit einem zusätzlichen Tab für die Inhaltselemente ist kein Problem, aber im Frontend stehe ich an.
Ich habe es mit stdWrap.append des tt_content Objekt versucht bin da aber jetzt auf einige Probleme gestoßen:
-
Nur mit stdWrap.append und TYPOSCRIPT ist es meiner Meinung nach nicht möglich (über Records könnte ich das Feld auslesen, allerdings muss ich ja noch Dinge daraus ersetzen die im Fall der Sprache noch von einer anderen Stelle ausgelesen werden müssen)
-
Wenn ich eine userFunction verwenden will habe ich keine Möglichkeit gefunden die uid des entsprechenden content element an die userFunction zu übergeben
-
Ich kann kein extbase Plugin mit tt_content.stdWrap.append aufrufen (dazu gibt es von mir diesen Thread
#120000 ) und ich wüsste auch nicht ob ich in diesem Fall dann die uid des content element zur Verfügung hätte (anders als wenn ich es als tt_content/plugin einfüge wo man relativ einfach auf die uid des tt_content zugreifen kann)
Hat jemand einen Lösungsansatz oder eine Idee die ich hier verfolgen könnte? Ich müsste ja "nur" eine Funktion getSnippet($contentUid) { } aufrufen die dann den HTML Code zurückgibt.
lg Matthias
Sollte eigentlich mit stdWrap.append funktionieren, wenn du die "Dinge (...) die im Fall der Sprache noch von einer anderen Stelle ausgelesen werden" vorher in ein REGISTER packst und dann bspw. sowas wie
tt_content.stdWrap.append.dataWrap = <div id="referal"><a href="http://ref.com/{register:isoCode}/some/path/ref.php?code={register:contentCode}">Ref</a></div>
Tut mir leid - das ist mir nicht ganz klar wie das mit diesem Register funktionieren soll - wie genau befülle ich das? Wo und wie definiere ich zB {register:isoCode} oder {register:contentCode} mit dynamischen Inhalten?
Folgender Beispielhafte Code von mir:
page {
100007 = LOAD_REGISTER
100007 {
meinTextRegister.cObject = COA
meinTextRegister.cObject {
wrap = <div>|</div>
10 = TEXT
10.value = Das ist Text im ersten Block
10.wrap = <p>|</p>
}
isoCode.cObject = TEXT
isoCode.cObject.value = de-de
}
100009 = TEXT
100009.data = register:meinTextRegister
100010 = TEXT
100010.data = register:isoCode
}
tt_content.stdWrap.append = TEXT
tt_content.stdWrap.append.dataWrap = <div id="referal"><a href="http://ref.com/{register:isoCode}/some/path/ref.php?code={register:contentCode}">IsoCode: {register:isoCode}</a></div>
Auf der Page wird mir das de-de ausgegeben im tt_content.stdWrap.append tut sich nichts - un in dem Falle von "LOAD_REGISTER" bin ich ja wieder auf Seitenebene und nicht bei den einzelnen Content Elementen.
lg Matthias
p.s. Ich bin sowieso der Meinung, dass css_styled_content durch ein fluid_styled_content abgelöst gehört und man das Rendering von Text, Textpic etc. in HTML Files mit Viewhelpern und den ganzen Vorteilen von Fluid durchführen kann - denn dann würde ich einfach einen <myExt:ViewHelper uid="{tt_content.uid}"></myExt:ViewHelper> einfügen und das Problem wäre erledigt 😉
Den FLUID Gedanken habe ich jetzt etwas weiter gesponnen und folgendes ausprobiert:
tt_content.stdWrap.append = FLUIDTEMPLATE
tt_content.stdWrap.append {
format = html
file = fileadmin/fluid_test.html
}
Das Template dazu:
<h1>{data.header} - {data.uid} - {data.pid}</h1>
<f:debug>{_all}</f:debug>
In {data} habe ich mein komplettes tt_content Objekt mit allen Feldern, wenn ich mein tt_content TCA jetzt also noch mit einem Voucher-Feld etc. erweitere dann kann ich hier direkt darauf zugreifen und erspare mir Plugin und/oder TYPOSCRIPT Spielereien.
lg Matthias
Ganz so einfach war es dann doch nicht denn das {data} Objekt "ignoriert" die l10n_settings leider (exclude, mergeIfNotBlank) - ich habe also in dem fluid_test.html Template dann einen view helper aufgerufen in dem ich mir erst wieder den Code aus der default Sprache auslesen musste.