Datenbankabfrage und Darstellung in JSON

  • Hallo zusammen,

    ich bin auf der Suche nach einer Erweiterung, mit der ich ganz einfach eine bestimmte Datenbankabfrage / aufruf einer Procedur auf der DB, anstoßen kann und das Ergebniss als JSON ausgeben kann.

    Zur Zeit ( Joomla 3.10) verwende ich den Sourcerer, dort muss ich aber alles händisch bauen und mit der API durch Joomla 4, ergeben sich mehr Möglichkeiten.

    Oder hat jemand, eine Idee wie man das noch geschickter lösen kann.

    Vielen Dank

  • Ich habe noch nie Sourcerer benötigt, um in Joomla Datenbankabfragen abzusenden und das Ergebnis in JSON umzuwandeln und/oder auszugeben. Da reicht ja eigentlich ein eigenes Modul-Layout (Override) oder ähnlich.

    Das versteh ich nicht, was das meint:

    aufruf einer Procedur auf der DB

    Bei "API" (= Webservices) versteh ich nicht, warum noch eine weitere Erweiterung. Was soll die für dich tun, was sie nicht schon macht?

    Vielleicht solltest du mehr in's Detail gehen, was du suchst und was das erledigen soll und was/wo mit den Daten passieren soll? Und wer die wie abfragen soll... etc.

  • Hallo,

    Cool wir reden ziemlich vom gleichen Gedanken!

    Genau, ich mag gewisse definierte SQL Abfragen auslösen, gern auch mit Paramtern aus der URL.

    Dazu hatte ich bislang diese o.g. Erweiterung genutzt.

    Das ist bestimmt das, Dorf um die Kirche gefahren.

    Dann kam mir die Idee, dass ich ggf für den Spass ein Modul / Plugin baue, was mir das sauber macht.

    Ich entwickle sonst Laravel oder VueJS oder hauptsächlich Abap.

    Mit dem was Joomla kann oder benötigt, wo was am besten untergebracht wird, bin ich bis Heute nicht so vertraut.

    Daher wende ich mich hier an das Forum, um eventuell festzustellen, dass es so ein Modul schon gibt, oder ein Hinweis zu bekommen, wie ich damit starten kann.

    Mit Procedur meinte ich auf der Datenbank fertig definierte Stored Procedur, auf MySQL nennt sich das wohl Routine, damit arbeite ich gern.


    Vielen Lieben Dank

  • Hallo, das klingt interessant.

    Ich hatte mir auch schon mal Artikel angesehen um überhaupt das Joomla Vokabular ins MVC Konzept einordnen zu können.

    Was ich aktuell überlege, es heißt oft, die entwickelte Komponenten installieren.

    Wenn ich aber in einer DEV Umgebung auf dem localhost entwickle, kann ich das doch on the fly machen, oder muss eine Änderung immer wieder über Erweiterungen installiert werden?

    Ich hoffe ja immer noch, dass es eine fertige Komponente für so einen Zweck gibt.

  • Hallo, ich muss nochmal fragen.

    gibt es was ganz einfaches, was ich per url aufrufen kann, ich denke da an eine separate php datei, in der ich meine Abfrage und Ausgabe formuliere. Aber den Mechanismus(jdatabase) vom joomla framework schon nutze.

  • gibt es was ganz einfaches, was ich per url aufrufen kann, ich denke da an eine separate php datei, in der ich meine Abfrage und Ausgabe formuliere. Aber den Mechanismus(jdatabase) vom joomla framework schon nutze.

    Du kannst dir das ja mal ansehen: https://ghsvs.de/programmierer-…n-eigener-codes

    Je nachdem, wie wann wer den Code ausführen können soll, könnte man vielleicht noch einen Token der URL mitgeben, der zuvor in der Datei geprüft wird oder das Modul nur in einem Passwort-geschützten Beitrag einbinden (also nur für Berechtigte aufrufbar und auch die Modul-Zugriffsebene entsprechend einstellen und/oder...

    Und für JSON gibt es ja eigentlich ausreichend PHP-Funktionen (encode, decode inklusive Parametern), um ein Abfrageergebnis zu wandeln.

  • Geht die Ausgabe nur über die Beiträge oder kann ich das gezielt nur über die API laufen lassen?

    Es ist halt ein Modul und du kannst es nutzen wie jedes Modul. Im Beitrag ist kein Muss wie ja auch in meinem Beitrag erwähnt.

    Man kann ja auch abseits vom Joomla-Verhalten das Modul mit seinem Inhalt separat rendern.

    Zumindest für mich ist die API (= WebServices) eine komplett andere Geschichte. Zumindest ich verwende das nur über eine Linux-Konsole. Module werden dabei aber nicht gerendert, soweit ich das sehe, da der Ansatz der Joomla-API ja ein komplett anderer ist.

    Ich gehe davon aus, dass man auch Joomla-Webservices-Requests aus einem "stinknormalen" Joomla-Code bzw. jedweden PHP-Code abfeuern kann, aber sehe irgendwie den Sinn noch nicht für meine Spielereien. Mit eigenen Datenbankabfragen kann ich irgendwie spezifischer abfragen, was ich brauche. Die API ist aus meiner Sicht längst (noch) nicht so flexibel (bisher). Schon der Aufbau der nötigen URLs mit Filtern ist so bisschen Frickelei. Bevor ich mir also PHP-Code schreibe, der die zusammanbastelt, frage ich doch lieber direkt die DB ab.

    Wohl Geschmackssache.

    Aber(!!), ich bin da kein Experte und andere hier vielleicht schlauer und ich rede vielleicht an deinem Anliegen komplett vorbei ;) Habe nur Sourcerer gelesen und halte den selten für notwendig.

  • gibt es was ganz einfaches, was ich per url aufrufen kann,

    Da würde ich ein system Plugin machen, welches auf onAfterRoute hört.

    Falls es sich um die gewünschte URL handelt, mit JDatabase dein query ausführen und das Ergebnis in json umwandeln.

    Danach kannst du das ergebnis mit echo ausgeben.

    Vergiss nicht den response header richtig zu setzen bevor du die applikation beendest.

    JoomGallery::friends ist aktuell noch auf der Suche nach Helfern für die JoomGallery 4 Entwicklung!

    Gesucht sind Leute für die PHP-Entwicklung, zum Testen, Übersetzen und Dokumentieren.

    Bei Interesse melde dich per PM oder Mail bei mir (Elfangor93).

  • Da würde ich ein system Plugin machen, welches auf onAfterRoute hört.

    Falls es sich um die gewünschte URL handelt, mit JDatabase dein query ausführen und das Ergebnis in json umwandeln.

    Danach kannst du das ergebnis mit echo ausgeben.

    Vergiss nicht den response header richtig zu setzen bevor du die applikation beendest.

    wenn du statt einem System Plugin ein Plugin vom Typ Ajax verwendest, wird dir das meiste sogar abgenommen und du kannst als Ausgabetyp schon JSON mitgeben.

    index.php?option=com_ajax&plugin=foobar&format=json

    In deinem Plugin hast du dann eine Methode "onAjaxFoobar" (den Parameter in der URL und den Methodennamen solltest du beliebig anpassen, wie es dir passt), die dann deinen Code ausführt.

    Alternativ kannst du auch die API von Joomla mittels Plugin erweitern, aber das empfinde ich als sehr umständlich.

    Kommt jetzt auf den Anwendungsfall an. Wenn das JSON auf der Seite ausgegeben werden soll ist Re:Laters Methode die richtige, wenn es nur der JSON String sein soll, würde ich zur Plugin Methode tendieren.