Overrides von xml-Dateien die nicht im tmpl-Ordner sind

  • Hallo zusammen,
    ich bin gerade am verzweifeln.


    Ich will die Komponente com_users vom Design her überschreiben. Habe mir ein Override vom Login angelegt. Jetzt stelle ich fest, das bei den Formularfeldern Benutzername und Passwort auf eine xml-Datei zugegriffen wird. Diese liegt allerdings nicht in .../com_users/tmpl/login sondern in ../com_users/forms/.
    Wie bekommen ich von der Datei (../com_users/forms/login.xml) ein Override hin, ohne dass diese beim Update zerschossen wird?

  • Ich versteh zwar nicht, was die Datei mit "Design" zu tun hat... Man kann sie auf herkömmlichen Weg nicht overriden. Im Normalfall verwendet man ein eigenes Plugin um Formulardaten zu manipulieren und/oder eigene XML als Ergänzung/"Override" in die Form nachzuladen.


    So lange es nicht um die zu validierende Daten geht, kann man aber auch in PHP-Overrides das Form-Objekt verändern.

  • und/oder eigene XML als Ergänzung/"Override" in die Form nachzuladen.

    Darf ich dich fragen wie du das genau machst? Mir geht es nicht darum, wie ich das XML ergänze.


    Konkret: Geht das tatsächlich als Override. Beispielsweise um das E-Mail-Feld im Kontaktformular so abzuändern, dass es nicht mehr zwingend ist?

  • Da die Felder ja (mindestens) doppelt validiert werden (1x client-seitig, 1x server-seitig) reicht es nicht, die Felder in einem üblichen PHP-Override auf nicht required zu setzen.

    Code
    $form->setFieldAttribute(...usw....)

    Man muss das zu früherem Zeitpunkt machen.


    Vorsicht! Uralt-Plugin, das nicht lauffähig ist:

    GHSVSThings/mybaseplugin.php at master · GHSVS-de/GHSVSThings
    Contribute to GHSVS-de/GHSVSThings development by creating an account on GitHub.
    github.com


    Das was aktuelleres. Ein Joomla-Feld wird entfernt:

    plg_system_characterscounterghsvs/characterscounterghsvs.php at 2022.06.21 · GHSVS-de/plg_system_characterscounterghsvs
    Joomla system plugin. Character counter (and more) for some text/textarea fields in back-end (each configurable). Also helper to avoid data loss after Joomla…
    github.com


    Letzteres Plugin ist ein (verquastes ("Hauptsache ich verstehe es")) Beispiel, das in Backendformularen rumfuhrwerkt, Feld-Attribute umstellt, Felder hinzufügt, Felder entfernt.


    Und das komplette Konfigurations-Formulars des Plugins on-the-fly erstellt.


    Grundlegend kann man so oder ähnlich aber auch nur die jeweilige Joomla-XML "überschreiben".


    Und zur "konkreten Frage": Ja man könnte auch unmittelbar mit XML-Datei überschreiben, ich weiß aber nicht mehr, welche Parameter man beim load() übergeben muss, damit das 100% klappt. Aber wenn ich eh schon in PHP bin, mache ich das halt verlässlich via:

    Code
    $form->setFieldAttribute(
     'contact_name',
     'required',
     'false'
    );

    in "onContentPrepareForm(Form $form, $data)"


    Frage ist, was davon in Joomla 4.2 noch möglich sein wird, weil die ja B/C-inkompatible "Verbesserungen" enthält, die eigentlich frühestens mit Vorlauf in J5 gehören; zumindest in der Beta. Ich habe das Testen meiner J3+J4-kompatiblen Erweiterungen (nicht obige) entnervt aufgegeben und erst mal verschoben ;)

  • Ich versteh zwar nicht, was die Datei mit "Design" zu tun hat...

    Wenn du in dem Ordner "../components/com_users" gehst, dann siehst du drei Ordner: "forms", "src", "tmpl"
    den Ordner "tmpl" kann man überschreiben durch einen override...


    In dem Ordner "forms" findest du unter anderem die Datei "login.xml".

    In dieser Datei sind die einzelnen Felder innerhalb der jeweiligen Feldgruppe gesetzt. Unter anderem ist hier auch bei jedem einzelnen Feld das Design bestimmt.


    Diese Felder bzw. die Feldgruppen werden in der Datei ../components/com_users/tmpl/default_login.php"

    aufgerufen. Dort kann ich für die einzelnen Felder leider nicht das Design ändern.


    Ändere ich in der Datei "login.xml", welche im Ordner "forms" liegt, Attribute und Klassen, dann wird das Design meinen Wünschen nach angepasst.

    Leider wäre das "Hard-gecodet", was nicht mein Ziel ist.


    Was kann ich tun?

  • Dort kann ich für die einzelnen Felder leider nicht das Design ändern.

    In Joomla 4 werden Formularfelder über JLayouts gerendert, also Zeugs im Ordner /layouts/ bzw. /components/com_firlefanz/layouts. Diese kann man wie gewohnt overriden. Zugegebenerweise mit etwas Tüftelei, wenn z.B. ein $this->form->renderFieldset() verwendet wird. Früher war das leichter rauszubekommen, welches Layout nun im Spiel ist ;)


    Desweiteren kannst du in einer der overridbaren PHP-Dateien die Form abgreifen (meist mit $this->form) und die Attribute der Felder ändern bevor sie dann im weiteren Code eingesetzt werden , andere/weitere CSS-Klassen, anderes xyz. wie oben gesagt, muss man aber mit Pflichtfeldern aufpassen, was man ändert.


    Bin gerade nicht ganz sicher, ob man das verwendete JLayout so auch überschreiben kann. Vermute nur, dass...


    Ehrlich gesagt sehe ich nach deiner Erklärung nach wie vor nichts in der XML-Datei, was irgendwas mit "Design" (also "Aussehen") zu tun hat.


    Vielleicht kommst leichter ans Ziel, wenn du mal exakt beschreibst, was du geändert haben willst.