Eigene Funktion zum Component-Creator-Projekt hinzufügen

  • Hallo,


    Ich versuche mich gerade an einer Komponente und habe dazu ein Projekt mit dem Component-Creator erstellt.


    Ich hoffe ihr verzeiht mir meine Anfängerfrage, aber ich bin beim MVC noch nicht wirklich dahinter gestiegen.


    Folgende Annahme:

    Es gibt 10 Einträge in der DB, wobei 7 auf "Veröffentlicht" stehen und 3 auf "Versteckt".


    Ich möchte in der View eine Funktion aufrufen, wo alle veröffentlichen Einträge eine fortlaufende Nummer des Jahres bekommen.

    Das ist keine Eintragung in der DB, sondern nur eine Anzeige in der View

    Also in der Listview etwa so:

    statedatenumbertext
    12022-01-011/2022text1
    02022-01-02--text2
    12022-01-122/2022text3
    12022-01-223/2022text4
    12023-04-011/2023text1
    12023-04-022/2023text2
    02023-04-03--text3
    02023-04-04--text4
    12023-04-053/2023text5
    12023-04-064/2023text6


    Nun frage ich mich, in welche Datei konkret die DB Abfrage dafür kommt.

    Muss ich nun für alle Views (Admin + Site) in der die Nummer vorkommen soll eine Funktion schreiben also z.B. hier:

    ListView "Reports": com_component->src->Model->ReportsModel.php

    FormView "Report": com_component->src->Model->ReportModel.php


    Oder lagert man das dann in die Helper aus?


    Weitere Frage noch. Was ist genau der Unterschied zwischen der Helper.php und der Model.php?

  • Was ist genau der Unterschied zwischen der Helper.php und der Model.php?

    Na ja,nicht so pauschal und/oder kurz/einfach zu beantworten. Joomla-Komponenten folgen halt in der strengen Logik gerne dem MVC (Model/View/Controller)-Konzept. Das erleichtert oft das Erstellen eigener Komponenten, z.B. über die "extends" der Klassen (neben weiteren, zusätzlichen Möglichkeiten). So können Models z.B. Methoden/Funktionen mitverwenden, die der Joomla-Core eh schon in seinen Basis-Models drinnen hat. Gleiches gilt für Views und Controller und ...


    Eigentlich hängt es von deinen Ansprüchen ab, wie sehr du diesem Konzept im Detail folgen willst. Natürlich kannst du Funktionen beliebig auch hier und da doppelt ablegen (und musst sie dann in Folge ggf. auch mühsam an mehreren Stellen nacharbeiten). Aber warum dann nicht in einer Helper-Klasse oder "moderner" in Traits oder ... , so, dass "mehrere" (bis hin zu anderen Erweiterungen) sie nutzen können. Solange du das automatische Namespacing in Joomla nutzt (ich kenne leider den aktuellen Stand von Component-Creator nicht) alles kein Kunststück mehr.


    In Joomla ist es aber meist so, dass in der Einzelansicht eine eigene DB-Abfrage vewendet wird, in der Listenansicht eine andere. Das schließt nun aber nicht aus, dass man die Hauptabfragen erst mal den Basisklassen Joomlas überlässt und sie dann im eigenen Model nachbearbeitet und/oder mithilfe von Helpern etc. pp. Im eigenen Model bereitet man dann oft nur die Datenbankabfragen vor und gibt an die parent:: - Klasse weiter.


    Und eine Model-Klasse kann natürlich auch die andere(n) Model-Klassen verwenden...


    Aaaaber, habe ich schon erwähnt?

    Zitat

    Na ja,nicht so pauschal und/oder kurz/einfach zu beantworten.

    Letztlich bleibt das dir überlassen und nichts spricht ja dagegen, da es deine eigene Erweiterung ist, dass du das später schrittweise optimierst, weil dir auffällt, dass du da gerade was doppelt programmierst oder du das Rad neu erfunden hast, obwohl ja gar nicht nötig. Dann vielleicht "ab in die Helper-Klasse, Trait oder den Core machen lassen" oder...)


    eDIT: Und ich bin auch kein Freund von Component-Creator, aber das soll dich nicht tangieren ;)

  • Danke für deine Antwort.

    Was mich halt irritiert ist, dass die Helper nirgendswo so richtig dokumentiert ist, wofür diese nun genau zuständig ist.


    Weitere Frage:

    Wenn diese Komponente ein zugehöriges Modul hat, ist doch die Helper dafür gedacht eine "Schnittstelle" für Funktionen und Methoden zu schaffen oder?

    Also das ein Modul eben auf Funktionen der Komponente zugreifen kann.

  • Viele Module haben eigene Helper-Klassen dabei, die wiederum die Models von Komponenten direkt nutzen. Hier ein "neumodernes" Beispiel aus dem Modul "Beiträge - Kategorie". https://github.com/joomla/joom…ategoryHelper.php#L44-L50


    Einen Helper in einer Komponente nutze ICH eher als einen für die Komponenten-Belange plus so manchem Unsinn, bei dem ich nicht weiß, "wo gerade hin damit". Aber es spricht eigentlich nichts dagegen, ihn auch als Helper für andere Erweiterungen zur Verfügung zu stellen, also als Schnittstelle.


    Wenn man in den Helper der Komponente com_fields schaut, bietet der Methoden, die kreuz und quer in Joomla verwendet werden können (von Modulen, Plugins, anderen Komponenten ...) um Felder leichter abzufragen. Hier kann man sich die Mühe sparen, erst wie oben das Model verfügbar zu machen, weil das eben in dem Helper der Komponente schon miterledigt wird. https://github.com/joomla/joom…ieldsHelper.php#L106-L116


    Kurz: Keine 100%-igen Regeln, was nun wer was wo erledigen soll oder muss. Aber ein Grundkonzept, wofür Models da sind, wofür Controller etc., aber auch da findest Joomla-Komponenten von Entwicklern, die diesen "Regeln" ganz und ger nicht folgen.