[TYPO3-german] Re: Re: Re: Extbase/Fluid: Edit-Formular für 1:m-Relation im Frontend erstellen (inline)

Stefan Padberg post at bergische-webschmiede.de
Wed May 21 13:53:40 CEST 2014


Hallo,

fürs Protokoll:

<f:for each="{termin.ansprechpersonen}" as "ansprechperson" 
iteration="iterator">
     <label>Name</label>
     <f:form.textfield property="ansprechpersonen.{iterator.index}.name" 
value="{ansprechperson.name}"/>

     [usw. für die anderen Eigenschaften von Ansprechpersonen]
</f:for>

Das Property-Attribut wird in ein name-Attribute umgewandelt. Da steht 
dann z.B.:

name="tx_myext_myplugin[mycontroller][termin][ansprechpersonen][0][name]"

Das findet sauber seinen Weg durch den Controller. Hut ab!

Schade nur, dass es nirgndwo dokumentiert ist. Ich habs jedenfalls nicht 
gefunden.

Beste Grüße
Stefan Padberg


Am 20.05.2014 12:38, schrieb Stefan Padberg:
> So, weiter gehts:
>
> Es soll die *Inline-Funktionalität* aus dem Backend im Frontend
> nachgebaut werden:
>
> Jeder Termin kann mehrere Ansprechpersonen (Name und Email) haben. Die
> sollen auch im Frontend kre:ier- und editierbar sein.
>
> Im Fluid-Frontend erweitere ich also das Formular um eine for-Schleife:
>
> <f:for each="{termin.ansprechpersonen}" as "ansprechperson"
> iteration="iterator">
>      <label>Name</label>
>      <f:form.textfield property="" value="{ansprechperson.name}"/>
>
>      [usw. für die anderen Eigenschaften von Ansprechpersonen]
>
> </f:for>
>
> Die Felder werden exakt generiert, die vorbelegten Werte werden korrekt
> ausgelesen.
>
> Meine Frage: Was muss in das property-Attribut rein?
>
> Probiert habe ich:
> - ansprechpersonen.{ansprechperson.uid}.name
> Da erhalte ich die Fehlermeldung:
>
> The form field "tx_myext_myplugin[termini][ansprechpersonen][][vorname]"
> is invalid. Reason: "[]" used not as last argument, but somewhere in the
> middle (like foo[][bar]).
>
> - ansprechpersonen.{iterator.index}.name
>
> Gleiche Fehlermeldung wie oben.
>
> - ansprechpersonen.name
>
> Geht natürlich nicht, denn die Eingaben können auf diese Weise nicht
> differenziert den einzelnen Ansprechpersonen zugeordnet werden.
>
>
> Wie ist die Syntax hierfür. Weiß das jemand zufällig? Wenn's im Backend
> geht, muss es doch auch im Frontend gehen. Ich möchte jetzt nicht
> anfangen, einen eigenen Viewhelper zu bauen.
>
> Besten Dank für sachdienliche Hinweise ;-)
>
> Stefan Padberg
>
>
>
> Am 20.05.2014 09:01, schrieb Stefan Padberg:
>> Das Rätsel ist gelöst: bei n:m-Relationen benutzt man den
>> select-Viewhelper in folgender Weise:
>>
>> <f:form.select multiple="true" size="20" property="kategories"
>> value="{termin.kategories}" options="{kategories}"
>> optionLabelField="bezeichnung" />
>>
>> Man beachte die geschweiften Klammern im value-Attribut! Damit übergebe
>> ich den gesamten Kategorie-Array an das value-Attribute, und das
>> markiert autoamtisch alle selektierten Optionen. Super!
>>
>> Bei n:1-Relationen lässt man die geschweifte Klammer im value-Attribut
>> weg, denn da wird ja nur ein Wert übergeben. Das wäre der Fall, wenn ein
>> Objekt nur eine Kategorie haben darf. Dadurch bin ich durcheinander
>> gekommen.
>>
>> Beste Grüße
>> Stefan Padberg
>>
>> Am 16.05.2014 14:30, schrieb Stefan Padberg:
>>> Hallo,
>>>
>>> ich komme nicht dahinter und finde auch keine passenden Hinweise im
>>> Netz.
>>>
>>> Ich habe in meiner Extension 2 Repositories, die in einer n:m-Relation
>>> zueinander stehen. Im Backend klappt alles wunderbar.
>>>
>>> Im Frontend werden die Daten auch korrekt gerendert. Aber das vom
>>> Extensionbuilder gebaute Edit-Formular umfasst nur die Felder des
>>> Hauptrepositories, nicht die mit der Relation. Wie muss ich jetzt im
>>> Frontend ein Eingabefeld für die Relation machen? Und muss ich die
>>> updateAction erweitern?
>>>
>>> Z.B. Termine und Kategorien. Ein Termine hat eine Reihe von
>>> Eigenschaften, u.a. auch die Kategorien (können mehrere sein). Im
>>> Extbase-Sprech heißt das Feld "kategories". Also baue ich ein
>>> select-Feld im Fluid-Formular:
>>>
>>> <f:form.select multiple="true" size="20" property="kategories"
>>> value="termin.kategories" options="{kategories}"
>>> optionLabelField="bezeichnung" />
>>>
>>> Im HTML steht dann:
>>> <select multiple="true" size="20"
>>> name="tx_meinetermine_termine[termin][kategories][]">
>>>      <option value="5">Kategorie 1</option>
>>>      <option value="6">Kategorie 2</option>
>>>      <option value="3">Kategorie 3</option>
>>>      ... usw.
>>> </select>
>>>
>>> Damit bekomme ich im select-Feld alle Kategorien korrekt zu sehen, aber
>>> keine ist selektiert, obwohl welche schon ausgewählt worden sind (im
>>> Backend). Und abspeichern lassen sich die ausgewählten Kategorien auch
>>> nicht. Also die Verbindung zum Kategorie-Repository ist offensichtloich
>>> nicht da.
>>>
>>> In der editAction des terminRepository steht u.a.:
>>>      $kategories = $this->kategorieRepository->findAll();
>>>      $this->view->assign('kategories', $kategories);
>>>
>>> Damit ziehe ich mir die Kategorien für die select-Optionen.
>>>
>>> In der updateAction der terminRepository steht:
>>>      $this->terminRepository->update($termin);
>>>
>>> Aber nix passiert.
>>>
>>>
>>>
>>> Weiß jemand wie es geht? Hat jemand einen Link parat, wo steht, wie es
>>> geht? Ich muss in der Richtung noch mehr machen. Als nächstes sollen
>>> dann auch noch neue Kategorien im Frontend erstellt werden können. Also
>>> im Prinzip dieselbe Funktionalität wie im Backend, wo ja immer ein
>>> plus-Zeichen neben dem Kategorie-Select-Feld ist.
>>>
>>> Beste Grüße
>>> Stefan
>>>
>>>
>>>
>>
>



More information about the TYPO3-german mailing list