Überladen von Klassen die schon überladen wurden....

Dieses Thema im Forum "Individuelle Erweiterungen" wurde erstellt von BigRib, 21. April 2020.

  1. BigRib
    BigRib Erfahrener Benutzer
    Registriert seit:
    26. September 2018
    Beiträge:
    287
    Zustimmungen:
    61
    Gegebene Danke:
    34
    Hallo zusammen,

    wie überlade ich denn eine Klasse, die bereits durch Gambio überladen wurde? Im Beispiel von "CheckoutConfirmationThemeContentView.inc.php".

    Wenn ich die normal überlade, dann fliegt die Überladung durch Gambio (Gambio Hub) raus.
     
  2. Anonymous
    Anonymous Erfahrener Benutzer
    Registriert seit:
    29. November 2019
    Beiträge:
    211
    Zustimmungen:
    79
    Gegebene Danke:
    31
    Kommt darauf an was du da überladen willst, (Gambio Hub) ist ein heißes Eisen, wenn der Hub ordentlich funktionieren soll.
    Shopversion und deine Idee wäre gute Angaben, um hier Hilfe zu erhalten.
     
  3. Dominik Späte
    Dominik Späte Erfahrener Benutzer
    Registriert seit:
    16. Oktober 2018
    Beiträge:
    1.251
    Zustimmungen:
    1.146
    Gegebene Danke:
    391
    Hast Du ggf. übersehen, in Deinen Methoden die Methoden der Elternklasse aufzurufen, also z.B. in Deiner prepare_data()-Methode die parent::prepare_data()? Bei mir klappt das (mehrfache) Überladen der CheckoutConfirmationThemeContentView problemlos.

    Edit: Ich schreib's mal mit Leerzeichen: parent :: prepare_data()
     
  4. BigRib
    BigRib Erfahrener Benutzer
    Registriert seit:
    26. September 2018
    Beiträge:
    287
    Zustimmungen:
    61
    Gegebene Danke:
    34
    Hallöchen,

    ich ändere nur das Artikelbild in das Eigenschaftenbild. parent :: prepare_data() ist drin bringt aber keine Abhilfe. Shopversion GX4.0.0.1. Ich habe es nun so gelöst, dass ich die Überladung von Gambio mit in meinen Code eingebaut habe, ist ja nur ein 5 Zeiler :D Aber die "richtige" Vorgehensweise wäre trotzdem interessant :D

    Code:
    public function prepare_data()
      {
          parent::prepare_data();
    
     
  5. Moritz (Gambio)
    Moritz (Gambio) Administrator
    Registriert seit:
    26. April 2011
    Beiträge:
    5.786
    Zustimmungen:
    2.694
    Gegebene Danke:
    903
    Die Vorgensweise mit
    PHP:
    parent::prepare_data();
    ist genau richtig. Es wundert mich jetzt, dass das nicht funktioniert hat.
     
  6. BigRib
    BigRib Erfahrener Benutzer
    Registriert seit:
    26. September 2018
    Beiträge:
    287
    Zustimmungen:
    61
    Gegebene Danke:
    34
    Um es zu verstehen: Wie genau funktioniert denn das? Sowohl die Überladung von Gambio, wie auch die meinige weißen ein und der selben Variable einen Wert zu. Wenn mein Wert als letztes zugewiesen wird, dann gilt doch auch der.

    Original Klasse sagt : $payment = "Gambio Hub"
    Gambio Überladung: $payment = "Vorkasse"
    Meine Überladung: $payment = "Gambio Hub"

    Woher weiß nun das Script, dass die Gambio Überladung nach meiner kommen sollte?

    LG Sven
     
  7. barbara
    barbara G-WARD 2014-2020
    Registriert seit:
    14. August 2011
    Beiträge:
    35.679
    Zustimmungen:
    11.401
    Gegebene Danke:
    1.619
    Vielleicht solltest Du einmal scheiben, was du genau machst.
    Bzw. was Du vor hast und wie Dein Code aussieht.
     
  8. Moritz (Gambio)
    Moritz (Gambio) Administrator
    Registriert seit:
    26. April 2011
    Beiträge:
    5.786
    Zustimmungen:
    2.694
    Gegebene Danke:
    903
    Wenn dieselbe Variable durch mehrere Overloads überschrieben wird, gewinnt der letzte Overload. Ich bin mir grad nicht 100%ig sicher, aber ich glaube die Overloads werden alphabetisch ausgeführt. Du kannst also über den Klassen/Dateinamen Einfluss auf den Ausführungszeitpunkt nehmen.
     
  9. BigRib
    BigRib Erfahrener Benutzer
    Registriert seit:
    26. September 2018
    Beiträge:
    287
    Zustimmungen:
    61
    Gegebene Danke:
    34
    Das würde es zumindest erklären, da meine Überladungen alle mit tnd beginnen ;D.

    Ich teste es mal aus. vielen lieben Dank!