Zum Inhalt springen

FLUIDTEMPLATE variables versus settings versus f:cObject

Erstellt am 29. Oktober 2015 · 3 Antworten · letzte Antwort am 28. April 2018

Tags: Fluid, Templates & Layouts, TYPO3 6.x, Frage

typonewbe ·

Hallo liebe TYPO3 Community,

mein aktuelles bestreben das Templating von TypoScript nach Fluid auszulagern trägt langsam Früchte.
statt

lib.pageTitle = TEXT
lib.pageTitle.data = page:title
lib.pageTitle.warp = <h1>|</h1>

schreibe ich nun

<h1>{pageTitle}</h1>

Dabei ist mir aufgefallen das wenn man nach Einbindungen von TypoScript in Fluid googeld.
Einige Entwickler

10 = FLUIDTEMPLATE
10 {
  variables {
     pageTitle = TEXT
     pageTitle.data = page:title
  }
}

schreiben andere

<h1><f:cObject typoscriptObjectPath="lib.pageTitle" /></h1>

Beides funktioniert.
Meine Frage daher wozu gibt es dann Variables wenn man das TypoScript auch direkt aufrufen kann?
Ich habe mich jetzt für die zweite Variante entschieden aus folgenden Gründen.
1. Mein TS für das FLUIDTEMPLATE bleibt klein und überschaubar.
2. Variables werden nicht automatisch weitervererbt sondern müssen an die Partials immer durchgeschleift werden.

Für mich machen variables nur für Konstanten Sinn aber nicht um ganze Objekte durchzuschleifen.

Mich würde auch mal interessieren wie sich das Resourcen/Performancemäßig auswirkt.

Vielleicht kennt sich ja jemand damit aus.

Beste Grüße Typonewbe

typonewbe ·

Hallo,

gleich mal ein Nachtrag der mich etwas beunruhigt weil ich ihn nicht verstehe.

Zu Testzwecken zweimal das selbe TS Objekt eingebunden nur einmal mit variables und einmal über das f:cObject.
Variante 1:

lib.pageBackendLayout = TEXT
lib.pageBackendLayout {
    data = levelfield:-2, backend_layout_next_level, slide
    override.field = backend_layout
}
...
10 = FLUIDTEMPLATE
10.variables.beLayout < lib.pageBackendLayout

Variante 2:

<span>{beLayout}</span>
<span>{f:cObject(typoscriptObjectPath: 'lib.pageBackendLayout')}</span>

Ergebnis:
Variante 1: Wert 6
Variante 2: Wert 5

Zur Erleuterung auf meiner Übersichtsseite Ü1 habe ich im Erscheinungsbild einmal das Backend-Layout der Seite festgelegt (Layout Übersichtsseiten)6
und zum anderen das Backend-Layout der Unterseiten (Layout Inhaltsseiten) 5

Nun klickte ich auf eine Übersichtsseite und siehe da der Wert der mittels Variables (beLayout) übergeben wurde war korrekt, während der Wert mittels f:cObject falsch war dieser ließt nämlich nicht das Backend-Layout aus sondern nimmt so wie es aussieht immer den Wert aus den Unterseiten.

Häää

Woran kann dies liegen?

Gruß typonewbe

pixos_typo ·

Entschuldigung, dass ich diesen uralten Thread ausgrabe, aber ich habe momentan genau das gleiche Problem.

Im Haupttemplate kann ich die Variable auslesen, welche korrekt übergeben wird.
In einem Inhaltselement (Fluid/Mask) habe ich nur Zugriff über das CObject, welches ich mit dem gleichen Code wie oben erstellt habe und es ist das gleich Problem - mir kommt vor das override.field für die aktuelle Seite wird hier ignoriert.

Hat jemand mittlerweile eine Lösung hierfür gefunden?

Teisinger ·

also ich nutze das zwar eigentlich nicht, ab aber für den Fall der Fälle auch ein Schnippsel drin:

variables {
layout = TEXT
layout.data = levelfield:-1,backend_layout_next_level,slide
layout.override.field = backend_layout
}

Um noch mal darauf zurück zu kommen: der Unterschied zwischen settings und variables ist der, das du in settings keine "Objekte" machen kannst - also z. b. kein Wrap oder sowas.
Von daher ist es eher besser und quasi performanter Konstanten-Werte per settings zu übergeben anstatt per variables. 🙂