Overload von Application.inc.php möglich?

Thema wurde von jan_brand, 23. August 2020 erstellt.

  1. jan_brand

    jan_brand Mitglied

    Registriert seit:
    26. Juli 2020
    Beiträge:
    16
    Danke erhalten:
    0
    Danke vergeben:
    1
    Ich versuche die setUpEnvironment in der Application.inc.php zu überschreiben es klappt leider nicht.

    Die Datei liegt hier /GXModules/MeinTheme/Steuer/Shop/Overloads/Application/AffiliateApplication.inc.php

    Und enthält den Code

    Code:
    <?php
    
    class AffiliateApplication extends AffiliateApplication_parent {
        protected function setUpEnvironment()
        {
            exit("sadasdfas");
            $this->setMissingServerVariables();
            $this->defineInitialConstants();
            $this->setMemoryLimit();
            $this->includeWrapperFunctions();
            $this->initGXEngine();
            $this->registerErrorHandler(); // register error handler with default settings
            $this->setTimezone();
            $this->startStopWatch();
            $this->registerAutoloader();
            $this->initializeGlobalDebuggerObject();
            $this->initializeGlobalPhpSelfVariable();
            $this->includeFunctions();
            $this->includeClasses();
            $this->connectToDatabase();
            $this->defineConstantsFromDbConfigurationTable();
            $this->registerErrorHandler(); // register error handler with user settings
            $this->updateTimezone(DATE_TIMEZONE);
            $this->sanitizeRequestData();
            $this->startSession();
            $this->startTracking();
            $this->initializeGlobalSeoBoostObject();
            $this->setXSRFPageToken();
            require_once __DIR__ . '/../includes/affiliate_application_top.php';
        }
    }
    
     
  2. jan_brand

    jan_brand Mitglied

    Registriert seit:
    26. Juli 2020
    Beiträge:
    16
    Danke erhalten:
    0
    Danke vergeben:
    1
    Kann ich sie so überschreiben, dass es meinen Code unten anhängt oder muss ich sie komplett überschreiben?
     
  3. Kai Stejuhn

    Kai Stejuhn Beta-Held

    Registriert seit:
    26. September 2014
    Beiträge:
    1.093
    Danke erhalten:
    419
    Danke vergeben:
    69
    Das ist der falsche Pfad: Richtig ist /GXModules/MeinTheme/Steuer/Shop/Overloads/AffiliateApplication/AffiliateApplication.inc.php

    Der Verzeichnisname muss immer dem Klassenamen entsprechen und immer daran denken, die neue (überladenene) Klasse darf nicht genauso heißen wie die alte Klasse,
     
  4. Dominik Späte

    Dominik Späte Erfahrener Benutzer

    Registriert seit:
    16. Oktober 2018
    Beiträge:
    142
    Danke erhalten:
    83
    Danke vergeben:
    30
    Äh... nein. Im hohen Norden ist wohl Sonntag ;-)

    @jan_brand :

    Deine Struktur ist schon goldrichtig. Die Application.inc.php ist aber leider nicht überladbar, weil sie nicht über die MainFactory, sondern direkt instanziiert wird. Dir bleibt nur, den Originalcode zu ändern oder auf eine andere Klasse auszuweichen, falls möglich.
     
  5. Kai Stejuhn

    Kai Stejuhn Beta-Held

    Registriert seit:
    26. September 2014
    Beiträge:
    1.093
    Danke erhalten:
    419
    Danke vergeben:
    69
    Okay, ich wusste da war noch was.

    Aber wenn die Klasse überladbar gewesen wäre, was ich nun echt nicht geprüft habe :oops:, dann wäre mein Hinweis mit dem Verzeichnis und Klassenname aber korrekt oder hat sich da etwas geändert, was ich nicht mitbekommen habe.
     
  6. Dominik Späte

    Dominik Späte Erfahrener Benutzer

    Registriert seit:
    16. Oktober 2018
    Beiträge:
    142
    Danke erhalten:
    83
    Danke vergeben:
    30
    Der Verzeichnisname muss dem Namen der zu überladenden Klasse entsprechen und der Name der eigenen Klasse dem Dateinamen ohne Endung. Ich bin mir aber ganz sicher, dass Du das auch weißt, nur gerade nicht parat hast ;)
     
  7. Anonymous

    Anonymous Administrator
    Mitarbeiter

    Registriert seit:
    26. April 2011
    Beiträge:
    695
    Danke erhalten:
    599
    Danke vergeben:
    141
    @jan_brand Wenn du nur eine eigene Datei anhängen möchtest also ein require am Ende der Application ausführen willst, gibt es immer noch die ApplicationTopExtenderComponent. Das ist seit Jahren die gleiche Möglichkeit die ApplicationTop zu erweitern.

    Weitere Informationen findest du auf der Developer Seite:
    (Link nur für registrierte Nutzer sichtbar.)
    (Link nur für registrierte Nutzer sichtbar.)

    In deinem Beipspiel legst du eine Datei im Ordner /GXModules/MeineFirma/MeinModul/Shop/overloads/ApplicationTopExtenderComponent/Meine_ApplicationTopExtenderComponent.inc.php mit folgendem Inhalt an:

    PHP:
    <?php

    class Meine_ApplicationTopExtenderComponent extends Meine_ApplicationTopExtenderComponent_parent {
        public function 
    proceed()
        {
            require_once 
    __DIR__ '../includes/affiliate_application_top.php';
        }
    }
    Und Dateien die nur im Modul benutzt werden legst du am besten im Ordner /GXModules/MeineFirma/MeinModul/Shop/includes/ ab.

    Bitte keine eigenen oder fremde Dateien in den Orignalverzeichnissen ablegen. Alles was außerhalb von GXModules liegt könnte bei Updates oder Änderungen verloren gehen oder in zukünftigen Versionen nicht mehr geladen werden.

    Wir empfehlen daher alles zu einem Modul innerhalb des GXModules Verzeichnis zu lassen.
     
  8. jan_brand

    jan_brand Mitglied

    Registriert seit:
    26. Juli 2020
    Beiträge:
    16
    Danke erhalten:
    0
    Danke vergeben:
    1
    #8 jan_brand, 23. August 2020
    Zuletzt bearbeitet: 23. August 2020
    Vielen Dank für eure Hinweise! Habe auch grad rausgefunden, dass man ApplicationPrimalTopExtenderComponent dazu verwenden kann.
     
  9. Kai Stejuhn

    Kai Stejuhn Beta-Held

    Registriert seit:
    26. September 2014
    Beiträge:
    1.093
    Danke erhalten:
    419
    Danke vergeben:
    69
    Das ist genau das, was ich oben als erstes geschrieben habe.

    Das war bei der Anfrage soweit korrekt, darum bin ich darauf nicht eingegangen, sondern habe nur den Hinweis gegeben, das der alte und neue Klassenname nicht gleich sein darf.

    Das einzige, wodrauf ich nicht geachtet hatte, war dass die Klasse nicht überladbar ist.

    Diese Aussage ist damit aber dann falsch, weil die Klasse "AffiliateApplication" ist und nicht "Application".

    Ich schätze mal, bei Dir ist auch Sonntag :D
     
  10. Dominik Späte

    Dominik Späte Erfahrener Benutzer

    Registriert seit:
    16. Oktober 2018
    Beiträge:
    142
    Danke erhalten:
    83
    Danke vergeben:
    30
    Nein, er will ja die Application überladen. Deshalb ist sein Overloads/Application/AffiliateApplication.inc.php vom Prinzip her richtig und Dein Overloads/AffiliateApplication/AffiliateApplication.inc.php falsch.

    Ist ja auch völlig egal, wenn es so oder so nicht funktioniert. Dann ist eben überall Sonntag ;)
     
  11. Kai Stejuhn

    Kai Stejuhn Beta-Held

    Registriert seit:
    26. September 2014
    Beiträge:
    1.093
    Danke erhalten:
    419
    Danke vergeben:
    69
    Okay und guten Morgen. Scheinbar war das gestern kein guter Sonntag. Du hast recht, ich habe nicht richtig gelesen. Ich war der Meinung die Klasse "AffiliateApplication" sollte überladen werden. Wenn man genau liest, was ich am Sonntag wohl nicht getan habe, dann hätte man den Irrtum bemerkt.