Joomla! CMS-Komponente mit Joomla! Rahmen?

7

Ich bin gespannt darauf, CMS-Komponenten auf dem Joomla! Framework hauptsächlich, weil ich möchte, dass meine Komponenten als eigenständige Anwendungen fungieren.

Ist das ohne Hacks machbar? Wenn nicht, gibt es einen bevorzugten Weg, dies zu erreichen?

Nestor Ledon
quelle
1
Welche MVC-Struktur verwenden Sie für Ihre Komponente: Legacy oder nicht?
David Fritsch
Gute Frage, kein Vermächtnis.
Nestor Ledon

Antworten:

5

Diese Frage ist nicht abschließend zu beantworten, aber ich denke, dass es sich lohnt, einige der häufigsten Teile zu probieren, die Sie beim Portieren von Code stören könnten (und es wird einige geben).

Bevor Sie sich mit Einzelheiten befassen, kann dies je nach Ihrer Sichtweise als Hack angesehen werden. Das CMS und das Framework unterscheiden sich stark vom Standpunkt einer Komponente. Das CMS definiert die genaue zu verwendende Struktur. Mit dem Framework können Sie die Ausführung und Interaktion Ihrer Anwendung anpassen. Das Framework kann definitiv so konzipiert werden, dass Komponenten vom CMS ausgeführt werden. Ab einem bestimmten Punkt wird jedoch nur das CMS neu erstellt, was sinnlos erscheint.

Zunächst die superkurze und einfache Antwort: Jede Art und Weise, wie Ihre Komponente mit dem CMS interagiert, muss überarbeitet werden. Sie müssen einen Router hinzufügen und wahrscheinlich Namespaces oder einen neuen Autoloader hinzufügen.

Beginnen wir mit der zweiten Hälfte. Es besteht die Möglichkeit, dass Sie Composer mit dem Joomla Framework verwenden, sodass Sie sich darauf verlassen können, dass der Autoloader des Composers die Klassen nach Bedarf lädt. Dies ist so konzipiert, dass es in Namespaces ausgeführt und basierend darauf geladen wird, sodass Ihre Komponente nicht automatisch geladen wird. (Ich vermute, wenn es einen besseren Weg gibt, kommentieren Sie bitte jemanden.) Dies bedeutet, dass Sie entweder Ihren eigenen Autoloader für die MVC-Klassen hinzufügen oder sie in einem Namespace neu schreiben müssen.

Zweitens müssen Sie der Anwendung Ihre eigene Router-Datei hinzufügen. Da Sie nicht mehr über den Menü-Manager verfügen, müssen Sie diesen mithilfe der Router-Klasse neu erstellen. Dies ist eigentlich ziemlich einfach, um URLs einem Controller zuzuordnen, aber Sie müssen sicherstellen, dass dies in der Anwendung enthalten ist.

Schließlich müssen Sie alle CMS-Funktionen unterstützen, die Sie in der Komponente verwenden. Das größte, was mir in den Sinn kommt, ist JFactory. Jedes Skript, das diese Klasse aufruft, um die Sitzung, Datenbank oder das Dokument abzurufen, funktioniert nicht. (Es sei denn, Sie portieren diese Klasse und definieren ihre Hooks neu, um sie Ihrer Anwendung anzupassen.

Rufst du JComponentHelperirgendwo an Dafür müssten Sie Unterstützung hinzufügen. Rufen Sie einen anderen Helfer für eine Kernerweiterung wie com_content oder com_users an? Das wird auch nicht mehr funktionieren.

Sie könnten einige einfache Erweiterungen leicht auf dem Framework laufen lassen. Diejenigen, die sich auf viele Arten in das CMS einbinden, müssen möglicherweise das CMS neu erstellen, um alle Aufgaben zu erledigen. Dieser Teil hängt wirklich von der Erweiterung ab.


Abschließend wird es in dieser Phase höchstwahrscheinlich eine Art von Hacking oder Kopieren / Einfügen von Code aus dem CMS in das von Ihnen benötigte Framework geben.

Ich glaube, dass das CMS mehr an die Struktur des Frameworks angepasst wird (dh Composer verwendet, Namespaces verwendet usw.), was dies einfacher macht. Im Moment ist es jedoch eine ziemlich entmutigende Aufgabe.

David Fritsch
quelle