Filter-Feld mit Layout "list-fancy-select", Reset funktioniert nicht

  • Hallo zusammen,


    ich stelle meine Komponente gerade auf Joomla 4 um.

    In einer Listenanzeige nutze ich für das ein Filterfeld das Layout "list-fancy-select" ohne den Parameter "multiple". Das Feld selbst ist ein eigenes Listenfeld dass vom Standard Listenfeld von Joomla erbt:


    Formular xml:

    https://github.com/RedfinDiver…filter_medals.xml#L27-L37


    Field:

    https://github.com/RedfinDiver…rc/Field/MembersField.php


    Die view und das tmpl dafür:

    https://github.com/RedfinDiver…/View/Medals/HtmlView.php

    https://github.com/RedfinDiver…d/tmpl/medals/default.php


    Wenn ich nun in der Listenansicht etwas auswähle, so wird der Filter richtig gesetzt. Beim Zurücksetzen über die Schaltfläche "Zurücksetzen" (Standard Joomla Searchtools) verschwindet zwar die Auswahl im Filterfeld, aber der Filter wird nicht zurück gesetzt, also auch nicht die php Variable, hatte das mit xdebug geprüft.

    Erst wenn ich im Feld auf das x klicke, setzt sich die Filterauswahl richtig zurück:



    Lasse ich das Feld mit dem Standardlayout "list" rendern, funktioniert alles:


    Die Standardkomponenten nutzen ja auch dieses fancy Layout. Da funktioniert des Filter rücksetzen. Hatte schon vermutet, es kommt durch das selbst erstellte Feld. Wenn ich das Feld aber auf den Standard "list" in der xml umstelle und die "options" manuell in das xml einbaue, habe ich das gleiche Verhalten.


    Hat jemand eine Idee? Danke!

    Markus

  • Da bin ich auch schon einmal drüber gestolpert.


    Ich glaube, du musst https://github.com/RedfinDiver…filter_medals.xml#L27-L37


    so


    Code
            <field
                name="winner"
                type="members"
                label="COM_TKDCLUB_SELECT_WINNER"
                description=""
                hint="COM_TKDCLUB_SELECT_WINNER_HINT"
                onlywinner="true"
                layout="joomla.form.field.list-fancy-select"
                onchange="this.form.submit();"
            />


    ändern.


    Also hint ergänzen und options weg.


    Das hat bei mir funktioniert.


    Ich habe allerdings ein Issue, wenn multiple=true nicht gesetzt ist. Dazu habe ich hier ein Issue geöffnet: https://github.com/joomla/joomla-cms/issues/33075

  • Hallo Astrid,


    Hatte ein wenig gedauert, bis ich mich wieder mal davor setzen konnte, also:


    Hat leider so wie von dir vorgeschlagen, nicht funktioniert. Hatte davor das auch schon so probiert, leider verhält sich das Suchfeld dann ganz anders:

    - der hint wird nicht gerendert (ich glaube dass wird er nur wenn multiple="true" ist, hab das wenigstens so in der Layoutdatei gelesen, auf das zielte, glaube ich, auch dein Issue auf GitHub, oder?)

    - das Rücksetzen des Filters zeigt das gleiche Verhalten wie in meinem Ursprungspost geschrieben. Mit dem Unterschied, dass die Schaltfläche zum Rücksetzen der Filter nun 2x gedrückt werden muss bevor der Filter tatsächlich gelöscht wird. Außerdem bleibt die Schaltfläche nun immer im "aktiv" Zustand

    - zusätzlich lässt sich der erste Eintrag in der Liste nicht als Filter auswählen


    Feld:

    Auswirkung dieses Felds in meiner Listview:


    Habe bei deinem Issue die Antwort von Brian Teeman nicht verstanden?!

    Ich möchte des Layout des "list-fancy-select" nutzen, um dem User die Möglichkeit zum Suchen in dem Feld zu geben. In meinem Fall sind tendenziell viele mögliche Einträge in dem Feld zur Auswahl. Der User soll mittels Tastatureingabe nach einer Option suchen können und dann aber nur EINE Option wählen können. Wenn multiple nicht true ist, wird der hint aber nicht entsprechend eingebaut. Ist ja beim Layout ja extra so gemacht, verstehe aber den Sinn nicht?!


    Ich bekomme es nicht zum Laufen (bei joomla 3 funktionert das für mich perfekt). Leider bin ich nur ein Hobbyprogrammierer, ich kann das nicht lösen.

    Danke für Deine Antwort!


    Markus

  • Habe bei deinem Issue die Antwort von Brian Teeman nicht verstanden?!

    Ich möchte des Layout des "list-fancy-select" nutzen, um dem User die Möglichkeit zum Suchen in dem Feld zu geben. In meinem Fall sind tendenziell viele mögliche Einträge in dem Feld zur Auswahl. Der User soll mittels Tastatureingabe nach einer Option suchen können und dann aber nur EINE Option wählen können. Wenn multiple nicht true ist, wird der hint aber nicht entsprechend eingebaut. Ist ja beim Layout ja extra so gemacht, verstehe aber den Sinn nicht?!


    Brian meinte das so, dass das list-fancy-select nur das Nutzen von multiple ermöglicht. Auch ohne dieses Layout solltest du die möglichen Wert sehen und einen Eintrag auswählen können.


    Wenn ich das Kategorie-Auswahlfeld wie folgt abändere (Layout und multiple  lösche])


    Code
    <field
    name="category_id"
    type="category"
    label="JCATEGORY"
    extension="com_content"
    hint="JOPTION_SELECT_CATEGORY"
    onchange="this.form.submit();"
    published="0,1,2"
    />


    sieht das so aus.





    Wird das Feld bei dir nicht so angezeigt? Wie wird es bei dir ohne Layout und multiple  angezeigt?


    Edit: Habe gerade gesehen, dass du die Anzeige deines Feldes schon im ersten Beitrag eingestellt hast. Dir geht es darum, dass eine Eingabe vervollständigt wird, richtig? Bei mir funktioniert das. Wenn ich ein Zeichen eingebe, dann erscheinen nur die möglichen Einträge, die mit diesem Zeichen beginnen. Funktioniert das bei dir?

  • Die Liste der möglichen Einträge wird ohne layout="joomla.form.field.list-fancy-select" auch richtig ausgegeben. Die Suche ist in der Liste ist aber nicht so, wie wenn das fancy-layout ausgewählt wäre. Die Auswahl "springt" nur in das nächste Feld mit diesem Anfangsbuchstaben. Die Funktionalität mit der Suche wie in Joomla 3 "out-of-the-box" ergibt sich in Joomla 4 nur, wenn man das fancy-select Layout verwendet. Und dann funktioniert aber das Filter-rücksetzen nicht mehr, siehe oben bei meinem ersten Beitrag.


    Wenigstens ist das bei mir so in meiner Komponente. Ich dachte, das liegt irgendwie am "multiple". Wenn ich in Joomla-Core bei einem Filter-field das multiple in der xml-Datei weglösche ( z.B /administrator/components/com_content/forms/flter_articles.xml -> und hier beim Feld "author_id"), funktioniert das Layout trotzdem wie gewünscht und auch auch der Filter wird korrekt rückgesetzt. Zwar bleibt dann der "Zurücksetzen"-Button auch hervorgehoben (dunkelblau, als wäre noch ein Filter gesetzt) aber wenigstens funktioniert alles korrekt.


    Da bin ich mit meinem Latein am Ende! Grüße Markus

  • Wenn ich in Joomla-Core bei einem Filter-field das multiple in der xml-Datei weglösche ( z.B /administrator/components/com_content/forms/flter_articles.xml -> und hier beim Feld "author_id"), funktioniert das Layout trotzdem wie gewünscht und auch auch der Filter wird korrekt rückgesetzt.

    Meiner Meinung nach funktioniert es nicht optimal. Zum einen wird ein Placeholde- Hint nicht angezeigt und zum anderen ist der erste Eintrag im Select-Feld aktiv, wenn man den Filter öffnet. Letzteres hat zur Folge, dass, nichts gefiltert wir, wenn man den ersten Eintrag anklickt. Weil der Filter nur ausgeführt wird, wenn sich ein Listeneintrag ändert, der aktive Wert aber gleich bleibt. Deshalb habe ich auf das Layout verzichtet. Das Filterzurücksetzten funktioniert bei mir auch mit dem list-fancy-select.


    Ein Unterschied zu meiner Komponente ist die populateState -Methode. Warum fragst du in dieser den Wert aus dem Request ab:


    Code
    $winner = $this->getUserStateFromRequest($this->context.'.filter.winner', 'filter_winner', '', 'array'); 


    Die Zeile ist bei dir hier: https://github.com/RedfinDiver…Model/MedalsModel.php#L68


    Ich glaube das ist der Grund dafür, dass der Filter nicht gelöscht wird. Im Request steht ja noch der gefilterte Wert. Was passiert, wenn du diese Zeile aus-kommentierst? Funktioniert der Filter dann?