[Frage] Sortierung im Module TYPO3-Version: 8.7.1

  • getit getit
    Jedi-Ritter
    0 x
    137 Beiträge
    4 Hilfreiche Beiträge
    27. 05. 2017, 17:00

    Ich lese im meinem Modul alle Einträge in der DB aus und zeige diese in einer Tabelle an.

    Nach dem Buch 'TYPO3 Extbase' von Patrick Lobacher habe ich ein Sort-Widget-View-Helper gebaut.
    Das funktioniert auch gut.

    Tabellarische Ausgabe (Resources/Private/Partials/Lebenslage/List.html):

    1. <table class="table table-striped table-hover">
    2. <tr>
    3. <th>Bezeichnung</th>
    4. <th></th>
    5. </tr>
    6. </thead>
    7. <kk:widget.sort objects="{lebenslage}" as="lebenslage" property="bezeichnung">
    8. <f:for each="{lebenslage}" as="lebenslage">
    9. <tr>
    10. <td>{lebenslage.bezeichnung}</td>
    11. <td>
    12. <f:link.action action="updateForm" arguments="{lebenslage:lebenslage}" class="btn btn-primary">
    13. <i class="fa fa-pencil" aria-hidden="true"></i> Bearbeiten
    14. </f:link.action>
    15. <f:link.action action="deleteForm" arguments="{lebenslage:lebenslage}" class="btn btn-primary">
    16. <i class="fa fa-trash" aria-hidden="true"></i> Löschen
    17. </f:link.action>
    18. </td>
    19. </tr>
    20. </f:for>
    21. </kk:widget.sort>
    22. </tbody>

    Index.html (des Sort-Widget-View-Helpers in Resources/Private/Templates/ViewHelper/Widget/Sort/Index.html):

    1. <f:widget.link arguments="{order:order}" class="btn btn-primary" id="testOrder">Change Order</f:widget.link>
    2. <f:renderChildren arguments="{contentArguments}"/>

    Nur leider wird das 'Change Order' über der Tabelle ausgegeben

    1. <a class="btn btn-primary" id="testOrder" href="...">Change Order</a>
    2. <table class="...">...</table>

    Deshalb habe ich versucht die Zeile mit dem a-Tag in ein Partial auszulagern und auf dieses im List.html (1. Listing) im th zu verweisen:

    1. ...
    2. <th>
    3. Bezeichnung
    4. <f:render partial="ViewHelpers/Widget/Sort/Order" />
    5. </th>
    6. ...

    Aber leider bekomme ich da die Fehlermeldung: Call to undefined method TYPO3\CMS\Extbase\Mvc\Web\Request::getArgumentPrefix()

    Logisch, ich bin im List-Partial außerhalb meines WidgetContexts (nur da gibt es getArgumentPrefix()).
    Es muss aber doch irgendwie möglich sein, das Widget zum Sortieren in den th auszulagern.

    Nachdem ich das nicht hinbekommen habe, wollte ich mir das selber Programmieren - das habe ich jetzt mittlerweile hinbekommen.
    Aber wie kann ich dann die Sortierung des QueryResultObjekts manipulieren?

    Ich hoffe jemand hat für eine (oder vll. beide) Möglichkeiten eine Lösung parat.
    Danke schonmal


  • 1
  • getit getit
    Jedi-Ritter
    0 x
    137 Beiträge
    4 Hilfreiche Beiträge
    28. 05. 2017, 10:57

    Beim <f:widget.link> gibt es viele Argumente, ua. target. (siehe hier: [url]https://fluidtypo3.org/viewhelpers/fluid/master/Widget/LinkViewHelper.html[/url])

    Könnte mir vorstellen das es damit vielleicht geht. Aber leider finde ich nirgends ein Beispiel wo dieses Argument verwendet wird (bei Fluid selbst steht nur: target="NULL" - toll, das hilft )#angry#

  • Julian.Hofmann Julian.Ho...
    Flash Gordon
    0 x
    2832 Beiträge
    104 Hilfreiche Beiträge
    01. 06. 2017, 13:36

    Glaube, das Problem ist der Unterschied des HTML:
    - Patrick arbeitet mit einer unordered List
    - Du arbeitest mit einer Tabelle
    IMHO dürfte auch bei Bepeispiel im Buch invalides HTML rauskommen... o.O
    Bei Dir landet die Ausgabe des Widgets zwischen tbody und dem ersten tr => also mitten innerhalb der Tabellenstruktur, aber nicht in einer Zelle der Tabelle - wo/wie solld as der Browser darstellen?

    Würde eher mal ansetzen, dass Du das Widget gleich nach table einsetzt, den thead samt Sortierlinks im Widget baust. Klingt zumindest praktikabel.
    Evtl. ist das A-Z_Widget-Beispiel im Buch auch etwas, was dann mehr in Deien Richtung gehen dürfte.

    Viele Grüße
    Julian

  • getit getit
    Jedi-Ritter
    0 x
    137 Beiträge
    4 Hilfreiche Beiträge
    05. 06. 2017, 16:53

    Hallo,
    ich habs hinbekommen.

    Also ich großen und ganzen war meine Vorgehensweise die Richtige.
    Ich habe, wie im Buch beschrieben, einen Sort-View-Helper-Widget geschrieben und eingebunden.

    Der Button zum Sortieren, der meinem Geschmack nach im <th> platziert werden soll und nicht über der Tabelle habe ich so gelöst:
    Ich habe einfach den erstellten SortierButton per CSS versteckt und das href des Buttons ins JS verschoben:

    1. ...
    2. location.href = <Wert vom Button>
    3. ...

  • 1