Am 22.9.2015 um 16:25 schrieb bernd wilke: > Am 22.09.15 um 15:22 schrieb Arne-Kolja Bachstein: >> Hallo allerseits, >> >> ich stehe vor dem Problem, dass ich von der Struktur meines >> Extbase-Plugins her so vorgehen möchte, dass ich ein Partial >> basierend auf einem dynamischen Wert einbinde. Also, zum Beispiel: >> >> <f:render partial="Location/Type/12345" /> >> >> Dieser Typ basiert auf der ID des Typen in der Datenbank, kann aber >> dynamisch hinzugefügt werden. Ich möchte nun, dass für alle >> diejenigen Typen, für die ein Partial existiert, dieses eingebunden >> wird, aber wenn es nicht existiert soll kein Fehler kommen, sondern >> ein Default-Partial eingebunden werden. >> >> Ich suche also nach einer Lösung wie >> >> <f:if partialExists="Location/Type/12345“> >> <f:then><f:render partial="Location/Type/12345" /></f:then> >> <f:else><f:render partial="Location/Type/Default" /></f:else> >> </f:if> >> >> Oder, eigentlich schöner: >> >> <f:render partial="Location/Type/12345“ >> fallback="Location/Type/Default“ /> >> >> Ist Euch ein funktionierender Weg bekannt, für den man nicht hässlich >> basteln muss? Oder anders: Wie würdet Ihr hier vorgehen? > > wenn du es narrrensicher haben willst wirst du wohl kaum um einen > eigenen Viewhelper herum kommen, der überprüft ob ein bestimmtes > Partial existiert. ansonsten könnte ich mir Lösungen vorstellen, die > aber auch recht komplex sind: > > 1: > <f:render partial="location/Type{dynWert}" /> > > wenn {dynwWert} nicht definiert ist wird eben nur Type.html aufgerufen > ansonsten zb. Type123.html > Nachteil: bei neuen Werten geht es natürlich ins Nirwana > > 2. > überprüfung in Typoscript: > > page.10.variables { > subPartial = TEXT > subPartial { > value = default > override.field = dyn_wert > override.stdWrap.if.isTrue.cObject = TEXT > override.stdWrap.if.isTrue.cObject { > field = dyn_wert > wrap = path_EXT:my_ext/Resources/Private/Templates/|.html > } > wrap = path_EXT:my_ext/Resources/Private/Templates/|.html > } > } > > <f:render partial="{subPartial}" /> > > 3. > das gleiche als TS-VH: > > lib.subPartial = TEXT > lib.subPartial { > value = default > override.current = 1 > override.stdWrap.if.isTrue.cObject = TEXT > override.stdWrap.if.isTrue.cObject { > current = 1 > wrap = path_EXT:my_ext/Resources/Private/Templates/|.html > } > wrap = path_EXT:my_ext/Resources/Private/Templates/|.html > } > > > <f:render > partial="{dynWert->f:cObject(typoscritpObjectPath:'lib.subPartial')}" /> > > (das ganze ist jetzt nicht getestet, sollte aber so oder ähnlich > funktionieren) > > bernd Hallo Arne,
Ich persönlich favorisiere für kleine Templates immer Bernds Variante 1 in abgewandelter Form nutzen <f:render partial="location/Type/default{dynWert}" /> weil ich .html-Dateien nicht wirklich schön finden. Statt 12345.html-Partials müsste man dann natürlich default12345.html partials definieren. Um das Risiko der undefinierten Partials für bestehende UID-Zahlen besteht auch hier. Hier würde nur eine f:if-Bedingung helfen, die prüft, ob ein Partial existiert. Analog wie in Beispiel 3 von Bernd könntest du eine inline-Variante des f:render-Viewhelper in der f:if-Condition verwenden. Wenn du Probleme bei der Erstellung der Inline-Codes hast, helfe ich dir gerne, wenn du deine Fehlerversuche präsentierst und deine Gedankengänge schilderst. Ich habe hier im Forum auch schon bei anderen das eine oder andere Mal eine sehr unhöfliche Abstaubermentalität erlebt, die ich mit meiner Zeit nicht unterstützen will. Anmerkung: Die Varianten 2 und 3 werden trotz funktionierenden TypoScript wohl schieflaufen, weil die per TypoScript definierten Pfade vermutlich nicht innerhalb des Partial-Verzeichnis zu finden sein werden. Auch schützen die beiden Varianten schützen nicht vor undefinierten Partials. Dieter -- Dr. Dieter Porth - Mein kleines TYPO3-Labor: http://www.mobger.de/ _______________________________________________ TYPO3-german mailing list TYPO3-german@lists.typo3.org http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german