Icon Dropdown für eigenes Modul

  • Hallo,
    ich möchte gerne in einem eigenen Modul die Bootstrap Icons so verwenden das man sich diese aus einem Dropdown auswählen kann.
    Meine Frage wäre wie ich das nun am besten realisiert bekomme?
    Gibt es eine Möglichkeit ein Dropdown aus einer JSON oder ähnlichem zu erzeugen?


    Viele Grüße

  • Letztlich "am einfachsten" durch ein eigenes JForm-Formularfeld. Damit kannst alles innerhalb Formular erzeugen, nicht nur Formularfelder fürs Modul-Backend.


    Problem ist aber, dass das keine Bootstrap-Icons sind. Joomla verwendet Icomoon-Font, ignoriert also die Bootstrap 2 Glyphicons-Font.


    Bootstrap 3 hat auch Glyphicons-Font im Paket. Wird aber auch oft mit Font Awesome verwendet.


    Bootstrap 4 hat dann gar keinen Icon-Font mehr beigepackt.


    Joomla 4 weiß man nicht.


    Lädt also ein Template an Joomla vorbei sein eigenes Bootstrap oder gar keins, also ohne den von dir gedachten Icon-Font, hast auch keinen verfügbar und Icons werden nicht dargestellt oder falsche.


    Speziell für Joomlas /media/jui/less/icomoon.less hab ich hier seinerzeit auf die Schnelle Code hingepfuscht, der u.a. auch die Klassen ausliest.
    https://www.ghsvs.de/programmi…-klassen-css-icomoon-font


    Speziell für BS3 /media/plg_system_bs3ghsvs/less/glyphicons.less hab ich hier seinerzeit Code hingepfuscht, der u.a. auch die Klassen ausliest. (Die glyphicons.less findet sich im BS3-Paket, das man im Netzt findet).
    https://www.ghsvs.de/programmi…ap-uebersicht-css-klassen

    Keine Ahnung, ob man damit was anfangen kann. Ausgabe ist halt in TabellenformListenform. Sollte dann ja auch als SELECT gehen oder statt Ausgabe eine JSON-Datei erstellen...


    Crux bei beiden: Ändert sich der grundlegende Aufbau der less-Dateien, funktioniert auch mein preg_match-Muster nicht mehr.


    Eigentlich kanns also nur verlässlich funktionieren, wenn dein Modul den jeweiligen Font selbst mitbringt und lädt inklusive CSS-Dateien bzw. LESS-Dateien.


    Wenn diese Dateien dann durch diese Maßnahme sicher unverändert bleiben, kannst natürlich auch den Weg via JSON gehen als Basis deines Formularfelds, da meine Codes sicherlich nicht sehr performant sind. Taugt aber z.B. eine JSON-Datei zu erstellen, aus der dein Formularfeldcode dann sein Dropdown schneller generieren kann.

  • Hi,
    ja, die von dir angesprochenen Probleme mit den Icons und Bootstrap respektive joomla sind mir bewußt.
    Vielen Dank für das Tutorial. Ich hab das schon umgeschrieben für ein jFormlist. Funktioniert leider nicht. Aber ich denke ich habe ein grundlegendes Problem mit dem registrieren des neuen Formtyps.
    Denn ein sehr reduziertes funktioniert auch nicht. Hab mich an die Anleitung in der Doku gehalten: https://docs.joomla.org/Creating_a_custom_form_field_type
    Also bin noch auf Fehlersuche.


    Grüße

  • Hab es hinbekommen ein eigens JForm zu registrieren.
    ich hab auch schonmal deinen Code dort eingebaut. Leider bekomm ich jetzt den Fehler das die Icoonmoon.less nicht gefunden wird. Sie ist aber da.
    Selbst wenn ich den absoluten Pfad verwende bekomm ich die Meldung:


    Ich komm nicht dahinter wo das Problem liegt? Hast du vielleicht eine Ahnung?


    Grüße

  • Der administrator gehört nicht rein.


    Liegt an meinem

    Code
    $fileAbs = JPATH_BASE . $file;


    Schlauer wäre

    Code
    $fileAbs = JPATH_SITE . $file;


    JPATH_BASE ist abhängig, ob Script im Frontend oder Backend läuft.
    JPATH_SITE zeigt dagegen immer aufs JoomlaRoot, egal wo man die Konstante verwendet.


    Danke für den Hinweis!

  • Hallo,


    so ich hab jetzt ein eigenes jForm List erstellt welches die Iconmoon-icons ausgibt.



    Zusätzlich kommt eine Angepasst Version des ChosenIcon-plugin zum einsatz. Dooferweise weicht die Chosen-Joomla-Version von der eigentlich ab.
    Dadurch funktioniert das Darstellen der icons bei Verwendung des Suchfeldes nicht. Da muss ich mir nochmal die js-Datei von chosen zu Gemüte führen.


    Ich hab aber ein etwas nervenderes Problem, und zwar wird die Listfield-Auswahl im Backend nicht gespeichert.
    Heißt es wird immer wieder der erste Eintrag gezeigt. Die Ausgabe funktioniert einwandfrei.


    Hat einer ne Idee was ich da falsch mache?


    Grüße


    PS: ich werde das ganze Modul auch noch per Github veröffentlichen. Da ist dann auch die angepasste ChosenIcon-Datei dabei. Falls es jemand verwenden will.

    • Hilfreich

    Wenn du die OPTION direkt als HTML-Tags baust, musst du dich um selected selbst kümmern:


    Code
    $html[] = '<option value="' . $cssClass . '" data-icon="' . $cssClass . '"' . ($this->value == $cssClass ? ' selected="selected"' : '') . '>' . $cssClass . '</option>';


    Weitere Fundsachen:

    Code
    defined('_JEXEC') or die('Restricted access');


    ist veraltet. Macht man nur noch

    Code
    defined('JPATH_BASE') or die;


    Code
    JFormHelper::loadFieldClass('list');class JFormFieldIconmoon extends JFormFieldList{


    Da du das SELECT ja von grundauf selbst baust, macht es keinen Sinn JFormFieldList zu extenden. Unnötige Ladezeit. Also beide Zeilen zu einer:

    Code
    class JFormFieldIconmoon extends JFormField{


    Code
    & JFactory::getDocument();


    Referenzierung (&) macht man nicht mehr. Führt ggf. zu Warnings.

    Code
    JFactory::getDocument();
  • Hi,
    vielen Dank für deine Verbesserungen.


    Zitat

    defined('_JEXEC') or die('Restricted access');


    Das passiert wenn man alte Sachen von sich kopiert :).


    Die Klasse JFormFieldList hab ich erweitert weil ich dachte das löst eventuell mein Speicherproblem. Hab irgendwie nicht dran gedacht das ich da das selected-Attribut auch selber setzen muss.


    Zitat

    Referenzierung (&) macht man nicht mehr. Führt ggf. zu Warnings.


    Okay wieder was gelernt. Das wußte ich noch nicht.


    Viele Grüße