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

Thema wurde von BigRib, 21. April 2020 erstellt.

  1. BigRib

    BigRib Erfahrener Benutzer

    Registriert seit:
    26. September 2018
    Beiträge:
    248
    Danke erhalten:
    48
    Danke vergeben:
    29
    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
    Danke erhalten:
    78
    Danke vergeben:
    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:
    930
    Danke erhalten:
    801
    Danke vergeben:
    300
    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:
    248
    Danke erhalten:
    48
    Danke vergeben:
    29
    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
    Danke erhalten:
    2.692
    Danke vergeben:
    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:
    248
    Danke erhalten:
    48
    Danke vergeben:
    29
    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.352
    Danke erhalten:
    11.198
    Danke vergeben:
    1.601
    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
    Danke erhalten:
    2.692
    Danke vergeben:
    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:
    248
    Danke erhalten:
    48
    Danke vergeben:
    29
    Das würde es zumindest erklären, da meine Überladungen alle mit tnd beginnen ;D.

    Ich teste es mal aus. vielen lieben Dank!