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






_______________________________________________
TYPO3-german mailing list
TYPO3-german@lists.typo3.org
http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german

Antwort per Email an