Ergebnis 1 bis 8 von 8

Thema: Andere Module in eigene Erweiterung einbinden

  1. #1
    Contao-Fan Avatar von Stranger
    Registriert seit
    20.06.2009.
    Ort
    Blankenburg
    Beiträge
    746
    Partner-ID
    5635
    User beschenken
    Wunschliste

    Standard Andere Module in eigene Erweiterung einbinden

    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');
    Du willst dich bei mir bedanken?
    Ich freue mich über Geschenke von meiner Amazon-Wunschliste.

    Contao-Anwender seit 2008
    Contao-Entwickler seit 2013, mehr als 50 Contao Erweiterungen programmiert

    Mein Unternehmen aus Blankenburg (Harz): Fast & Media

  2. #2
    Contao-Urgestein Avatar von the_scrat
    Registriert seit
    24.02.2010.
    Ort
    Augsburg
    Beiträge
    2.051
    User beschenken
    Wunschliste

    Standard

    Hi,

    vielleicht wäre ein geeigneter Weg von ModuleLogin zu extenden (so im Sinne von OOP )
    Programmers don't comment their code. It was hard to write, it should be hard to understand...

  3. #3
    Contao-Fan Avatar von Zero
    Registriert seit
    25.05.2010.
    Ort
    Korntal
    Beiträge
    520
    User beschenken
    Wunschliste

    Standard

    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
    Mein Blog -> brothers-project.de

  4. #4
    Contao-Fan Avatar von Stranger
    Registriert seit
    20.06.2009.
    Ort
    Blankenburg
    Beiträge
    746
    Partner-ID
    5635
    User beschenken
    Wunschliste

    Standard

    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:
    PHP-Code:
            $this->import('ModuleLoginExt''Login');        $this->Template->login $this->Login->compile();        echo $this->Template->login
    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
    Du willst dich bei mir bedanken?
    Ich freue mich über Geschenke von meiner Amazon-Wunschliste.

    Contao-Anwender seit 2008
    Contao-Entwickler seit 2013, mehr als 50 Contao Erweiterungen programmiert

    Mein Unternehmen aus Blankenburg (Harz): Fast & Media

  5. #5
    Contao-Fan Avatar von Zero
    Registriert seit
    25.05.2010.
    Ort
    Korntal
    Beiträge
    520
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von Stranger Beitrag anzeigen
    ...
    PHP-Code:
    class ModuleLoginExt extends \Backend{
    ...
        public function 
    compile()    {
            
    $objTemplate...        $objTemplate->autoLabel $GLOBALS['TL_LANG']['MSC']['autologin'];
            return 
    $objTemplate->parse();    }} 
    Du Erweiterst nicht das "ModuleLogin" sondern das "Backend".

    Du kannst auch folgendes machen.
    PHP-Code:
    class ModuleLoginExt extends \ModuleLogin {

        public function 
    generate() {

            
    $intProductCount 2;

            if (
    intProductCount 0) {
                return 
    parent::generate();
            } else {
                
    // redirect or return nothing
                
    return "";
            }
        }

    Die Klasse "ModuleLoginExt" registrierst du als Modul und legst es im CMS entsprechend an.
    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
    Mein Blog -> brothers-project.de

  6. #6
    Contao-Fan Avatar von Stranger
    Registriert seit
    20.06.2009.
    Ort
    Blankenburg
    Beiträge
    746
    Partner-ID
    5635
    User beschenken
    Wunschliste

    Standard

    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
    Du willst dich bei mir bedanken?
    Ich freue mich über Geschenke von meiner Amazon-Wunschliste.

    Contao-Anwender seit 2008
    Contao-Entwickler seit 2013, mehr als 50 Contao Erweiterungen programmiert

    Mein Unternehmen aus Blankenburg (Harz): Fast & Media

  7. #7
    Contao-Nutzer
    Registriert seit
    23.08.2015.
    Beiträge
    3

    Standard

    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:

    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);
      }

    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.

  8. #8
    Contao-Fan Avatar von Zero
    Registriert seit
    25.05.2010.
    Ort
    Korntal
    Beiträge
    520
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von Stranger Beitrag anzeigen
    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
    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.
    Mein Blog -> brothers-project.de

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •