Hallo allerseits
Gibt es irgendeine Möglichkeit z.B. ein Contao Login in die eigene Erweiterung zu integrieren?
Oder muss man sich das alles neu schreiben?
Das hier funktioniert leider nicht:
$this->import('ModuleLogin');
Druckbare Version
Hallo allerseits
Gibt es irgendeine Möglichkeit z.B. ein Contao Login in die eigene Erweiterung zu integrieren?
Oder muss man sich das alles neu schreiben?
Das hier funktioniert leider nicht:
$this->import('ModuleLogin');
Hi,
vielleicht wäre ein geeigneter Weg von ModuleLogin zu extenden (so im Sinne von OOP :D)
Ja gibt es. Lege das Login Modul an.
Füge bei deinem Modul ein Select Feld hinzu und hole dir alle Login Module. Wähle dort das gewünschte aus und erstelle das Modul anhand der Contao Eigenen Modul erstell. Da gibts Möglichkeiten... Schau mal im CE Modul einbinden nach...
Allerdings sehe ich den Sinn nicht es so zu machen.
Die andere wäre die von Scrat. Das Login Modul erweitern via Class extends...
Edit: Verzeih die Fehler... Schreibe vom Handy
Die Felder in tl_module werde ich selbst zusammenbauen. Daher brauch ich glaube kein Select-Feld.
Aber die Klasse selbst wollte ich nicht neu schreiben.
Mal zur besseren Erklärung:
Ich lege ein Produkt in den Warenkorb und wenn ich auf "Zur Kasse gehen" klicke, kommt ein Login.
https://www.fast-end-media.de/produkte/login/
Diese Seite soll aber nur erscheinen, wenn ich auch Produkte im Warenkorb hab.
Kann ich aber momentan nicht überprüfen, da diese Login Seite mit Contao Standardmodulen zusammengesetzt wurde.
Ich hab jetzt ein neue neue Klasse, die mir das Login erweitert.
Aber irgendwie muss ich doch alles komplett neu schreiben, weil ich das bestehende Login Modul sonst nicht geparsed kriege.
PHP-Code:
class ModuleLoginExt extends \Backend{
...
public function compile() {
$objTemplate... $objTemplate->autoLabel = $GLOBALS['TL_LANG']['MSC']['autologin'];
return $objTemplate->parse(); }}
Und dann die Ausgabe in meinem Warenkorb-Modul:
Er gibt mir jetzt das Login-Formular aus, aber ich hab ja wie gesagt den Code jetzt nahezu identisch in der Core-Klasse ModuleLogin und in ModuleLoginExt... ich hasse Redundanz :(PHP-Code:
$this->import('ModuleLoginExt', 'Login'); $this->Template->login = $this->Login->compile(); echo $this->Template->login;
Du Erweiterst nicht das "ModuleLogin" sondern das "Backend".
Du kannst auch folgendes machen.
Die Klasse "ModuleLoginExt" registrierst du als Modul und legst es im CMS entsprechend an.PHP-Code:
class ModuleLoginExt extends \ModuleLogin {
public function generate() {
$intProductCount = 2;
if (intProductCount > 0) {
return parent::generate();
} else {
// redirect or return nothing
return "";
}
}
}
Dann kannst du sogar via Redirect auswählen, ob du bleibst oder evtl. eine Meldung ausgibst.
Sollte das nicht hinhauen habe ich dein Problem nicht verstanden ;)
Danke, aber der Code funktioniert leider nicht den du gepostet hast.
Hatte ich auch schon selbst probiert, sobald man nämlich versucht ein Modul zu extenden kommt jedes mal ein Fehler... :(
Code:Warning: Missing argument 1 for Contao\Module::__construct(), called in
Die __construct-Methode von Module erwartet als Parameter ein Model oder eine Collection der Datensätze mit denen du nachher arbeiten willst.
Hatte gerade ähnliches Problem und den Fehler so behoben bekommen:
So in etwa. Hab ich grad per Hand runtergeschrieben und nicht weiter ausprobiert. Dient nur zur Veranschaulichung. Wichtig ist eben, dass du bei der Instanziierung von MyModule noch ein Model oder eine Collection übergibst.PHP-Code:
class MyModule extends \Module {
protected function compile(){}
public function foobar($objModel) {
die(var_dump($objModel));
}
}
class MyOtherModule extends \Module {
protected function compile(){
$intId = 1;
$myModel = \MyModel::findOneById($intId);
$myModule = new \MyModule($myModel);
$myModule->foobar($myModel);
}
}
Also wenn der Code nicht geht, dann würden bei mir einige Erweiterungen nicht gehen...
Konntest du nachvollziehen wie ich die Implementierung meinte? Was hat da nicht geklappt?
@codeunit.io natürlich erwartet die Module Klasse im Konstruktor ein Model ;). Es braucht die Datensätze, was der Core ja auch vollautomatisch abhandelt, wenn man die Module entsprechend implementiert.