Überschreiben Sie MVC-Klassen in Joomla 3

7

Gibt es überhaupt eine Möglichkeit, MVC-Klassen in Joomla 3 zu überschreiben?

Ich habe diesen Thread gefunden, aber er ist für Joomla 2.5. Wie überschreibe ich Kernklassen?

Ich habe MVC-Überschreibungen in Joomla 2.5 erfolgreich durchgeführt, bin aber jetzt zu Joomla 3 übergegangen. Dieses Plugin wird jedoch für Joomla 3 nicht unterstützt.

Ich habe diesen Artikel gefunden, aber ich habe keine gute Idee, ein Plugin zu schreiben. Das gleiche Konzept wurde in dem Plugin verwendet, das ich zuvor in Joomla 2.5 verwendet habe.

http://docs.joomla.org/How_to_override_the_component_mvc_from_the_Joomla!_core

Und kann ich diese Klassen auch erweitern und Methoden überschreiben?

Eigentlich möchte ich die Registrierungs-E-Mail-Vorlage, die Benutzeranmeldeaufgabe überschreiben, um den Benutzertyp und die Profilansicht zu überprüfen und mehr Daten aus meinen Tabellen abzurufen.

Ich habe dieses Plugin ausprobiert - https://github.com/phproberto/joomla-mvc-override Aber es gibt Fehler.

    Warning: fopen(D:\xampp\htdocs\my_project/libraries/legacy/module/helper.php): failed to open stream: No such file or directory in D:\xampp\htdocs\my_project\libraries\joomla\filesystem\file.php on line 327
?>

    Fatal error: Class 'JModuleHelperLibraryDefault' not found in D:\xampp\htdocs\my_project\plugins\system\mvcoverride\core\module\helper.php on line 13

Gibt es jemanden, der sich dieser Art von Erfahrung gestellt hat?

Vielen Dank

cha
quelle

Antworten:

3

Komisch, ich habe gestern gerade die Implementierung dieses Plugins in einer Site beendet.

Ein Webdev-Kollege und ich haben es für Joomla 3.x modifiziert und es funktioniert.

Es ist hier: https://github.com/ghazal/plg_mvcoverride

In Verbindung mit der Erweiterung nonumber.nl, Advanced Module Manager, wird jedoch ein Fehler ausgegeben:

Call to undefined method JModuleHelper::addIncludePath()

Da ich es eilig hatte, bestand meine sehr unelegante Lösung darin, die erste Funktion zu kommentieren:

    public function onAfterInitialise()
    {

    $moduleHelperContent = JFile::read(JPATH_LIBRARIES.'/cms/module/helper.php');
    $moduleHelperContent = str_replace('JModuleHelper', 'JModuleHelperLibraryDefault', $moduleHelperContent);
    $moduleHelperContent = str_replace('<?php','',$moduleHelperContent);
    eval($moduleHelperContent);
    jimport('joomla.application.module.helper');
    JLoader::register('jmodulehelper', dirname(__FILE__).'/module/helper.php', true);

}

und dann diese 2 Zeilen:

JModuleHelper::addIncludePath(JPATH_BASE.'/code/modules');
JModuleHelper::addIncludePath(JPATH_THEMES.'/'.$template.'/code/modules');

Dadurch entfällt in diesem Fall die Möglichkeit, helper.php in einem Modul zu überschreiben.

Ich wollte hier posten, um um Hilfe zu bitten, aber du hast mich geschlagen.

Ghazal
quelle
Wow .. Es funktioniert gut .. Vielen Dank Ghazal. Ich habe zuvor ein Plugin (Joomla 2.5) verwendet, das Sie im Dokument erwähnt haben. Können Sie bitte das Dokument aktualisieren? Es wäre auch für andere hilfreich. Und können Sie dies bitte auch im Joomla-Erweiterungsverzeichnis hinzufügen?
Cha
Fertig in Github, wie Sie gefragt haben. Was JED betrifft, wird es länger dauern ...
Ghazal
1
Schließlich fand Alex (Chartier) eine funktionierende Lösung für den Fehler, von dem ich dachte, dass er mit Advanced Module Manager zusammenhängt. Dem ursprünglichen Code fehlte eine Zeile in der Funktion, die in jModuleHelper überschrieben wurde. Alex hat auch das $ path-Problem behoben. Es wurde alles im Github-Plugin korrigiert.
Ghazal