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

Antwort per Email an