Modulprogrammierung: Eigene custom fields definieren und bei Installation laden

  • Hallo,


    ich bin neu in Joomla! und habe mein erstes Modul mod_eventlist programmiert, welches Informationen aus Custom Fields in Artikeln nutzt, um eine Liste an Veranstaltungen nach Tag und Datum sortiert darzustellen.


    Dazu habe ich folgende Custom Fields - teilweise unter der Verwendung des Plugins "Advanced Custom Fields" - manuell in Joomla! erstellt:




    Nun würde ich gerne vermeiden, dass diese Custom Fields jedes Mal, wenn das Modul installiert wird, vorab manuell erstellt werden müssen, allein schon, weil die Namen der Felder im Code bei der Datenbankabfrage jedes Mal gleich sein müssen.


    Daher habe ich in die mod_eventlist.xml folgende Einträge vorgenommen:


    Wie bekomme ich es nun hin, dass diese Felder im entsprechenden Reiter im backend bei der Artikelbearbeitung erscheinen? Ich habe schon in vielen Artikeln online gesucht, aber noch bin ich zu neu, als dass ich dort eine Lösung gefunden hätte, die ich verstehe...


    Vielen Dank!

  • Ich glaube, es geht darum, dass bei Installation und Verwendung des Moduls (was ja eigentlich nur Beiwerk ist) auf einem anderen Joomla erst die Artikelfelder eingerichtet werden müssen, damit das Modul überhaupt funktionieren kann.


    Weiß nicht, ob Module Installations-script.php und SQL-Dateien unterstützen. Das wäre dann eine etwas komplexere Angelegenheit, mehr wegen des Prüfens, ob Felder schon angelegt wurden und wegen Abhängigkeit von diesem "Advanced Custom Fields" (von dem ich nicht weiß, wie es arbeitet. Leider muss man sich registrieren.).


    Wenn das so gemeint ist wie Satz 1, hätte ich eher mit einem eigenen System-Plugin als Dreh-und ANgelpunkt begonnen, vielleicht sogar ganz old-fashioned (in Artikel-params-Feld schreiben) oder mit eigener DB-Tabelle, wenn die Datenmenge zu groß wird oder eben auch ein Modul schnell abfragen können soll.


    Weil auch so kann man eigene Felder, auch via XML-Dateien, in Artikeln (Formularen) hinzuzaubern (EDIT: Und speichern, wenn man eigene DB-Tabelle verwenden will). In den Grafiken sehe ich nichts, was man nicht mit althergebrachten Joomla-Standard-Feldern abwickeln kann. Und mit etwas Trainig und Abspicken kann so ein Plugin ebenso eigene oder "geklaute" Formulare-Felder bereit stellen, die man in den XMLen verwendet.


    Mit der Module-Manifest-XML kommst du nicht weiter. Die hat einen anderen Zweck

  • Ja, stimmt schon. Ich bin halt System-Plugin-"Fan", weil die früher geladen werden und weitere Methoden anbieten, die VIELLEICHT noch interessant sein könnten. Man kann so z.B. die Pfade zu eigenen Feldern, eigenen XML, die das Plugin vielleicht verwaltet, frühzeitig systemweit bekannt machen und ähnliche Spielereien oder auch Prüfungen auf existierende Tabellen und Kram. Aber da denke ich vielleicht immer zu groß ;-) An TE-n vorbei...

  • ... ok, wenn ich Euch richtig verstehe, soll ich ein Plugin programmieren, mit dem die Custom Fields generiert werden. Das sollte ich hinbekommen, hab schon Doku dazu gesehen.


    Bleibt die Frage, wohin ich dann den Code programmiere, der die Liste generiert, die aus den Feldinformationen erstellt wird, siehe Screenshot.



    Der ist halt jetzt in der mod_eventlist.php, der helper.php und der tmpl/default.php meines Moduls und greift auf die Felder zurück, die ich eigentlich automatisch hinzufügen wollte bei Installation. Ich hatte mich für ein Modul entschieden, weil es ja darum geht, Information an einer beliebigen Stelle im Template darzustellen. Ein Plugin stellt ja, soweit ich das verstanden habe, nichts dar.


    Oder kann ich so eine Ausgabe auch in einem Plugin programmieren? Oder irgendwo anders vielleicht?


    Danke für Eure Hilfe!

  • Ich bin mir immer noch nicht so sicher - willst du dein Modul mehrfach installieren?

    Wenn es für dich oder eine einzelne Seite ist dann würde es doch reichen, auf dieser Seite Custom Fields mit dem Datum einzurichten und dann im Modul auszulesen?

    So was mache ich hier


    Die Ausgabe in einem Modul ist jedenfalls richtig.


    Ansonsten führen viele Wege nach Rom .. ich würde es vielleicht so anfangen:


    Das Plugin sollte bei der Installation eine Datenbanktabelle für article_id, beginn-zeit und ende-zeit anlegen (oder was du eben brauchst).

    Beim Aufrufen eines Artikels (onContentPrepare .. glaub ich) wird es deine .xml datei dazu laden so dass die Eingabefelder für den Benutzer in einem eigenen Tab da sind.

    Beim Speichern (onContentAfterSave) speicherst du dann die eingaben in deine Tabelle.


    Das Modul sucht nun auf deiner Tabelle + ArtikelTabelle und macht die Ausgabe


    .. alles ohne Gewähr :)

  • Ja, da hast Du wohl Recht, das Modul macht ja schon, was es soll, ich könnte also mit der jetzigen Lösung gut leben. Dachte, ein Modul könnte dann bei der Installation halt gleich die Felder generieren. Jetzt habe ich verstanden, dass ich dafür ein Plugin bräuchte. Überlege mir tatsächlich, ob das hilfreich ist.

    Vielen, vielen Dank für die Hilfe, ich bin mal wieder ein Stückchen schlauer geworden :-)