Komponente anpassen ohne "Nebenwirkung"!?

  • Moin,


    ein Kunde hat in seiner Jooomla Installation eine Menge Komponente installiert und auf eigene Bedürfnisse angepasst (hauptsächlich mit SQL Statements erweitert).
    Das Problem: Bei Updates der Komponente werden diese Änderungen überschrieben.


    Frage:
    Wie kann man Komponente erweitern, ohne dass der angepasste Code bei einem Update überschrieben wird?


    Bei Templates von Komponenten ist der Fall klar: Die Template files einfach in ./templates/templatename/com_meinekomponente/ kopieren, fertig. Aber wie sieht das mit controller.php, router.php oder view.html.php etc. aus?

  • Wie kann man Komponente erweitern, ohne dass der angepasste Code bei einem Update überschrieben wird?


    Wenn Du mehr als layouts und Views überschreiben musst, wobei das die Komponente auch bereitstellen muss, was nicht immer der Fall ist, gar nicht.
    Da hilft nur sauber uns ausreichend dokumentieren und Backups machen und nach einem Update der Komponente wieder Core hacken.

  • Hallo,


    mir würden da spontan nur folgende Möglichkeiten einfallen:

    • Overrides (die Du ja schon erwähntest): Diese sind meines Wissens nach aber nur für die optische Ausgestaltung zu verwenden. Beispiel: Eine Shopping-Komponente bietet eine hauseigene Darstellung des Warenkorbs an. Diese gefällt dem Nutzer aber gar nicht - ein Override ermöglicht hier die Abänderung der Darstellung. Hierbei können die Daten aus dem Model verwendet werden. Overrides für Model oder Controller gibt es meines Wissens nach nicht.
    • Plugins: Ein Plugin kann an definierten Punkten "einspringen" und an diesen Stellen etwas in Deinem Sinne tun.


    Was wird denn durch die SQL-Statements bewirkt? Vielleicht wäre es eine Möglichkeit, die Komponente erst einmal das tun zu lassen, was sie von Haus aus tut und die Funktionalität durch Plugins (s.o.) oder nachgelagert durch ein CLI-Script nachzurüsten. Ein CLI-Script könnte z.B. Daten in festen Intervallen verarbeiten.

  • Wenn es nur Abfragen zur Erweiterung der Original-Daten aus dem Model sind, kann man die auch in Overrides umlagern.


    Oder im groben Notfall die Gesamtabfrage, vielleicht unter Nutzung des Original-Models komplett neu machen und die originalen Daten verwerfen.
    Hier kann man dann auch mit MyClassname extends OriginalClassname, also Helferklassen arbeiten, um die Originale zwar zu verwenden, aber umzubiegen, wo nötig.


    Das kann bei umfangreichen Datensätzen nat. etwas oder etwas mehr auf die Performance gehen.
    "Guter MVC-Stil" ist das natürlich nicht, aber wen interessiert das, wenn Updates nicht gemacht werden können? Hätte bei mir erst mal Priorität.