[TYPO3-german] Edit-Formular mit verschachtelten Objekten auf 3 Ebenen

Dr. Dieter Porth typo3 at mobger.de
Tue Jan 17 07:21:53 CET 2017


Hallo Swen,

ersteinmal: eine coole Idee; denn ein Formular für IRRE-Elemente 
erstellt der Extensionbuilder meines Wissens nicht.

Ich habe für das Frontend-Editing einen etwas anderen Wege gewählt. In 
deine Richtung hätte ich auch nie gedacht, obwohl sie naheliegend ist.

Idee: in der oberen Schleife benutzt du die Uid der Spieltage. Die 
solltest du auch in der Inneren Schleife verwenden.  Woher soll Extbase 
sonst wissen, wohin die Daten einzuordnen sind.

Statt

name="spieltage[spieltageinzelergebnisse][{res.uid}][spiel1]"
vielleicht
name="ligagruppe[ligagruppespieltag][{spieltage.uid}]spieltage[spieltageinzelergebnisse][{res.uid}][spiel1]"


Wie machst du es mit Create und Delete für die IRRE-Elemente im 
Frontend? Ich nutze dafür einen Dummy-Generator 
(Repository->getDummy();) im Repository? Gehst du einen ähnlich-Weg?

Mit besten Grüßen
      Dieter Porth

Am 16.01.2017 um 21:19 schrieb Stefan Thuis:
> Hallo,
>
>   
>
> ich habe in Typo3 7.6 mit dem Extension Builder eine eigene Extension
> erstellt mit mehreren verschachtelten Objekten. Diese möchte ich jetzt in
> einem einzigen Edit-Formular bearbeiten. Alle Objekte sind entsprechend
> miteinander verknüpft.
>
>   
>
> Die Struktur sieht folgendermaßen aus:
>
>   
>
> ligagruppe----1:n(ligagruppespieltag)---->spieltag----1:n(spieltageinzelerge
> bnisse)---->einzelergebnisse
>
>   
>
> Mein Fluid-Template sieht so aus (auf die relevanten Punkte gekürzt):
>
>   
>
> <f:form action="update" name="ligagruppe" object="{ligagruppe}" >
> <f:for each="{ligagruppe.ligagruppespieltag}" as="spieltage">
>      <label>Spielort</label>
>      <f:form.textfield
> name="ligagruppe[ligagruppespieltag][{spieltage.uid}][spielort]"
> value="{spieltage.spielort}" />
>      <f:form.hidden
> name="ligagruppe[ligagruppespieltag][{spieltage.uid}][__identity]"
> value="{spieltage.uid}" /><br />
>      <f:for each="{spieltage.spieltageinzelergebnisse}" as="res">
>          <label>Spiel 1</label>
>          <f:form.textfield
> name="spieltage[spieltageinzelergebnisse][{res.uid}][spiel1]"
> value="{res.spiel1}" />
>          <f:form.hidden
> name="spieltage[spieltageinzelergebnisse][{res.uid}][__identity]"
> value="{res.uid}" /><br />
>      </f:for>
> </f:for>
> <f:form.submit value="Save" />
>
> </f:form>
>
>   
>
> Wenn ich das Formular aufrufe, werden die vorhandenen Werte korrekt gesetzt.
> Das Ändern funktioniert für alles auf der obersten Ebene (ligagruppe) und
> auf der zweiten Ebene (spieltag), aber auf der dritten Ebene
> (einzelergebnisse) werden die Werte nicht aktualisiert.
>
>   
>
> Ich habe schon verschiedene Kombinationen für
>
>   
>
> <f:form.textfield
> name="spieltage[spieltageinzelergebnisse][{res.uid}][spiel1]"
>
>   
>
> und
>
>   
>
> <f:form.hidden
> name="spieltage[spieltageinzelergebnisse][{res.uid}][__identity]"
> value="{res.uid}" /><br />
>
>   
>
> ausprobiert, aber es funktioniert nicht.
>
>   
>
> Die edit- und update-Actions sehen so aus:
>
>   
>
>      /**
>
>       * action edit
>
>       *
>
>       * @param \BCDU\Leagueresults\Domain\Model\Ligagruppe $ligagruppe
>
>       * @ignorevalidation $ligagruppe
>
>       * @return void
>
>       */
>
>      public function editAction(\BCDU\Leagueresults\Domain\Model\Ligagruppe
> $ligagruppe = NULL)
>
>      {
>
>                                 $ligagruppe =
> $this->ligagruppeRepository->findOneByPid($this->configurationManager->getCo
> ntentObject()->data['pages']);
>
>                                 $this->view->assign('ligagruppe',
> $ligagruppe);
>
>      }
>
>      
>
>      /**
>
>       * action update
>
>       *
>
>       * @param \BCDU\Leagueresults\Domain\Model\Ligagruppe $ligagruppe
>
>       * @return void
>
>       */
>
>      public function updateAction(\BCDU\Leagueresults\Domain\Model\Ligagruppe
> $ligagruppe)
>
>      {
>
>          $this->addFlashMessage('Die Änderungen wurden gespeichert',
> 'Herzlichen Glückwunsch!', \TYPO3\CMS\Core\Messaging\AbstractMessage::OK);
>
>          $this->ligagruppeRepository->update($ligagruppe);
>
>          $this->redirect('edit');
>
>      }
>
>   
>
> Wie muss das korrekte name-Attribut hier lauten, damit die Werte
> aktualisiert werden? Oder übersehe ich hier etwas und muss im Controller
> noch etwas ergänzen?
>
>   
>
> Habe schon überall gesucht und kann leider nichts dazu finden.
>
>   
>
> Danke für jeden Tipp
>
>   
>
> Stefan
>
>   
>
> _______________________________________________
> TYPO3-german mailing list
> TYPO3-german at lists.typo3.org
> http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german
>



More information about the TYPO3-german mailing list