[Frage] Mehrere Child Objekte bearbeiten [Gelöst]

  • Dolores Dolores
    T3PO
    0 x
    10 Beiträge
    0 Hilfreiche Beiträge
    01. 11. 2013, 01:12

    Hallo liebes Forum,

    Mir ist bei der Entwicklung einer Extension nicht klar, wie ich mehre Kind-Objekte in einem Formular bearbeiten kann.

    Konkret: Shop mit Usern und Orders. Die Order hat unter anderem die Property Cart die wiederum die Property cartItems hat die aus mehreren CartItem-Objekten besteht.

    Im Warenkorb möchte ich nun die Möglichkeit bieten, die Anzahl der jeweiligen Items noch zu ändern. Aber wie erhalte ich Zugriff auf die jeweiligen Objekte? Wie kann ich sie später im Kontroller identifizieren.

    Ein Zugriff über {order.cart.cartItems.0} funktioniert nicht und liefert null. Ein Debug Screen hängt an.

    Danke für alle Hinweise und lieben Gruß

    Anhänge (1)
    debug.png image/png 0,00 B 260 heruntergeladen
  • Dolores Dolores
    T3PO
    0 x
    10 Beiträge
    0 Hilfreiche Beiträge
    04. 11. 2013, 09:47 - Lösung

    So, jetzt habe ichs.

    Anregung von hier: [url]http://forum.typo3.org/index.php?t=msg&goto=525887[/url]

    In der Iteration kann man die einzelnen Child Objekte mit der uid ansprechen und muss diese dann noch als hiddenfield mitgeben, damit klappts :). Beliebige Identifier scheinen nicht mehr zu funktionieren, es muss laut meinen Versuchen die uid sein:

    [code]

    1. <f:form.textfield class="text" property="cart.cartItems.{cartItem.uid}.quantity" value="{cartItem.quantity}"/>
    2. <f:form.hidden property="cart.cartItems.{cartItem.uid}.__identity" value="{cartItem.uid}"/>
    [/code]


  • 1
  • harald1972 harald197...
    Sternenflotten-Admiral
    0 x
    198 Beiträge
    13 Hilfreiche Beiträge
    02. 11. 2013, 12:49

    Hallo liebe Dolores,

    ich hab hier etwas, das ich zumindest mal für ähnlich halte.
    Bei mir handelt es sich um Geschäftsbriefe (Angebot, Rechnung, Mahnung), die idR mehrere Artikel ausweisen.
    In der listAction des ArticleControllers (den Brief= Letter erhält diese Methode als Parameter) erzeuge ich (unter der Liste) ein Formular für einen neuen Artikel. Dieses verweist dann auf ArticleController->createAction(), welche dann ebenfalls den selben Letter und den $newArticle erhält.

    Auf dein Problem gemünzt, müsste man jetzt meinen Letter durch dein Cart und meine Articles durch deine Cartitems ersetzen.
    Wenn das für dich interessant klingt, kann ich dir gern mal etwas Code posten.

    Ansonsten kannst du in der View per <f:for ...> durch die einzelnen Items iterieren.
    Ein {order.cart.cartItems.0} könntest du umschiffen, in dem du z.B. {order.cart.firstItem} schreibst und dein Cart-Model-Object liefert das gewünschte mit einer Methode getFirstItem().
    Die darfst du dann selbst schreiben. Bei einer Notation wie hier {cart.firstItem} wird nach der Methode getFirstItem gesucht, und zwar in dem entsprechenden Cart-Objekt.

    Hoffe, es hilft.
    Gruß, Harald.

  • Dolores Dolores
    T3PO
    0 x
    10 Beiträge
    0 Hilfreiche Beiträge
    02. 11. 2013, 20:45

    Hallo Harald,

    danke für den Hinweis. Aber das Erzeugen eines oder mehrerer Kind-Objekte ist kein Problem, auch das Iterieren nicht. Nur das Updaten bzw. Editieren mehrerer Objekte auf einen Schlag habe ich bisher nicht hinbekommen. Habe das vor zweit Wochen zwar gelöst, in dem ich einfach ein Formular, dass mir cartItemUid und Menge als Arrays übergibt in einer Action verarbeite. Das ist aber sicher nicht im Sinn des Erfinders, da z.B. Validierungen nicht mehr greifen (z.B. muss die Menge ein Integer sein).

    Trotzdem vielen Dank für Dein Angebot und nen schönen Sonntag!

  • Dolores Dolores
    T3PO
    0 x
    10 Beiträge
    0 Hilfreiche Beiträge
    04. 11. 2013, 09:47

    So, jetzt habe ichs.

    Anregung von hier: [url]http://forum.typo3.org/index.php?t=msg&goto=525887[/url]

    In der Iteration kann man die einzelnen Child Objekte mit der uid ansprechen und muss diese dann noch als hiddenfield mitgeben, damit klappts :). Beliebige Identifier scheinen nicht mehr zu funktionieren, es muss laut meinen Versuchen die uid sein:

    [code]

    1. <f:form.textfield class="text" property="cart.cartItems.{cartItem.uid}.quantity" value="{cartItem.quantity}"/>
    2. <f:form.hidden property="cart.cartItems.{cartItem.uid}.__identity" value="{cartItem.uid}"/>
    [/code]

  • 1