CheckoutControl.inc.php lässt sich nicht überladen...

Thema wurde von BigRib, 16. Januar 2023 erstellt.

  1. BigRib

    BigRib Erfahrener Benutzer

    Registriert seit:
    26. September 2018
    Beiträge:
    248
    Danke erhalten:
    48
    Danke vergeben:
    29
    Hallöchen,

    für ein Modul was ich gerade baue, muss ich auf allen Checkout Seiten den Warenkorb die Artikelmenge prüfen.

    Ich denke, dass ich da in der CheckoutControl.inc.php -> check_stock() richtig bin. Ich möchte die Klasse nun wie viele andere auch überladen, aber es wird immer die check_stock() aus der original Datei geladen.
    Meine Datei ist auf alle Fälle eingebunden, da wenn ich nen die(); an den Anfang der Datei schreibe, dann stoppt das script.

    /GXModules/Thrownatur/ProductLimits/Shop/Overloads/CheckoutControl/ProductLimitCheckoutControl.inc.php

    Code:
    <?php
    /* --------------------------------------------------------------
      ProductLimitCheckoutControl
      --------------------------------------------------------------------------------------- */
    
    
    class ProductLimitCheckoutControl extends ProductLimitCheckoutControl_parent
    {
      public function check_stock($p_force = false)
      {
         die('Nu aber');
        return true;
      }
    
    }
    [code]
    
    Kann man die Datei Klasse [B]CheckoutControl [/B]nicht überladen, oder sehe ich einfach nur den Fehler nicht?
    
    Danke!
     
  2. Developer

    Developer Erfahrener Benutzer

    Registriert seit:
    7. November 2012
    Beiträge:
    2.885
    Danke erhalten:
    617
    Danke vergeben:
    113
    Versuch das mal:

    PHP:
    class ProductLimitCheckoutControl extends ProductLimitCheckoutControl_parent
    {
      public function 
    check_stock($p_force false)
      {
        
    parent::check_stock($p_force false);
       
        
    //bof dein Code
      
    }
    }
     
  3. Moritz (Gambio)

    Moritz (Gambio) Administrator

    Registriert seit:
    26. April 2011
    Beiträge:
    5.786
    Danke erhalten:
    2.692
    Danke vergeben:
    903
    Es gibt eine Ausnahme für Overloads: Klassen, die extended werden, können nicht überladen werden. Lösung ist dann den Overload für die Child-Klasse(n) zu machen. Also in dem Fall

    CheckoutShippingContentControl,
    CheckoutPaymentContentControl,
    CheckoutConfirmationContentControl,
    CheckoutProcessProcess

    Und wie Developer schrieb, nicht vergessen den parent::-Aufruf zu machen, damit die Überladungskette dann nicht bei dir unterbrochen wird. Nur beim übergebenen Parameter $force und nicht $force = false, ansonsten wird der Wert immer auf false gesetzt.
     
  4. BigRib

    BigRib Erfahrener Benutzer

    Registriert seit:
    26. September 2018
    Beiträge:
    248
    Danke erhalten:
    48
    Danke vergeben:
    29
    Danke für Deine Antwort, ja das habe ich normal drin, ich hatte den Code nur hier rausgenommen, damit der Codeblock nicht zu lang wird.

    alles klar, vielen Dank, dann mache ichs da. :)