class order_ORIGIN overload

Thema wurde von ff-webdesigner, 6. November 2023 erstellt.

  1. ff-webdesigner

    ff-webdesigner Erfahrener Benutzer

    Hallo beisammen,

    ich versuche gerade schon länger vergeblich unter Gambio 4.8.0.2 die Klasse order_ORIGIN aus /includes/classes/order.php zu overloaden.

    Aber egal wie wenig ich übernehme, schon das untige in \GXModules\ff-webdesigner\custom\Shop\Overloads\order\ff_order.inc.php führt zu Fehler 500. Warum?

    PHP:
    class ff_order_ORIGIN extends ff_order_ORIGIN_parent {

    }
    Warum gibts in der original order.php den if Block vorher?

    PHP:
    if(class_exists('order_ORIGIN', false) === false)
    {
    //...
    }
     
    Zuletzt bearbeitet: 13. Dezember 2023
  2. Dominik Dehning

    Dominik Dehning Erfahrener Benutzer

    Sollte das nicht ff_order.inc.php heißen?

    das sollte eigentlich wie die Datei heißen, also

    PHP:
    class ff_order extends ff_order_parent {
    Wei les die Klasse zwei Mal gibt, einmal unter /includes und ein zweites mal unter /admin/includes
     
  3. ff-webdesigner

    ff-webdesigner Erfahrener Benutzer

    ff_order.inc.php hatte mich nur hier vertippt, dateiname stimmt.
    _ORIGIN aus klassennamen entfernen half schon mal mit fehler 500, DANKE!
    aber: wird rein gar nichts überladen. getestet mit

    PHP:
    function query($order_id)
            {     echo 
    "yyyy";   }
     
  4. Dominik Dehning

    Dominik Dehning Erfahrener Benutzer

    Cache für Modulinfomationen geleert?

    Überladen funktioniert da auf jeden Fall, habe ich für die Klasse schon erfolgreich umgesetzt.
     
  5. ff-webdesigner

    ff-webdesigner Erfahrener Benutzer

  6. Dominik Dehning

    Dominik Dehning Erfahrener Benutzer

    Von anderen System kenne ich es, dass ein einfaches echo gerne mal "unterdrückt" wird um Fehler zu vermeiden. Ob das bei Gambio so ist: Keine Ahnung.

    Was bei mir bisher aber immer funktionert hat zum testen:

    PHP:
    die('abcde');
     
  7. ff-webdesigner

    ff-webdesigner Erfahrener Benutzer

    ebenso ausprobiert in zwei überladenen funktionen.
    function query($order_id)
    und
    function getOrderData($oID)
    die("xxx").
    in keiner wird was ausgegeben. auch debug log bringt rein gar nichts. für mich siehts so aus als würde der overload überhaupt nicht ausgeführt...
    ich checke immer über frontend, nach geleerten seiten/modul caches mit neuer order auf seite wk.
    im wk keinerlei ausgabe...dort sollte ich das aber sehen, oder?
    die klasse sollte ja mit dem ablegen im wk ausgelöst werden...
     
  8. Dominik Dehning

    Dominik Dehning Erfahrener Benutzer

    Ich kann mich jetzt irren, bin aber der Meinung, dass die neue order erst einen Schritt später in der checkout_shipping_address.php erzeugt wird.
    Vielleicht wäre die includes/classes/shopping_cart.php der bessere Ansatz für das was du versuchst?
     
  9. ff-webdesigner

    ff-webdesigner Erfahrener Benutzer

    leider auch nix...

    \GXModules\ff-webdesigner\custom\Shop\Overloads\shopping_cart\ff_shopping_cart.inc.php

    PHP:
    class ff_shoppingCart extends ff_shoppingCart_parent
    {
        function 
    get_products()   
        {
            die (
    "xxx");
         }
    }
     
  10. ecomplus.dev

    ecomplus.dev Erfahrener Benutzer


    PHP:
    class ff_shopping_cart extends ff_shopping_cart_parent
    {
        function 
    get_products()
        {
            die (
    "xxx");
        }
    }
     
  11. Dominik Dehning

    Dominik Dehning Erfahrener Benutzer

    Der Pfad muss aus meiner Sicht aus anders sein:

    \GXModules\ff-webdesigner\custom\Shop\Overloads\shoppingCart\ff_shopping_cart.inc.php
     
  12. ff-webdesigner

    ff-webdesigner Erfahrener Benutzer

    dickes danke mal wieder an beide! mich verwirrte dass bei einzig dieser klasse dateiname und klassenname im original abweichend sind. der ORDNERNAME muss der shoppingCart, die klasse dann wie in shopping_cart.php ff_shopping_cart extends ff_shopping_cart_parent...

    woher hast du den korrekten ORDNERNAMEN, ddehning?
     
  13. Dominik Dehning

    Dominik Dehning Erfahrener Benutzer

    Der Ordnername bezieht sich auf den Namen der Klasse (ohne "_ORIGIN"), die überladen werden soll, nicht den Dateinamen.
     
  14. ff-webdesigner

    ff-webdesigner Erfahrener Benutzer

    nochmal update....immernoch nicht hinbekommen. aktuell drin in ff_order.inc.php:
    PHP:
    class ff_order extends ff_order_parent {
       
        public function 
    __construct($order_id = '')
            {
                
    $this->info = array();
                
    $this->totals = array();
                
    $this->products = array();
                
    $this->customer = array();
                
    $this->delivery = array();

                if(
    xtc_not_null($order_id))
                {
                    
    $this->query($order_id);
                }
                else
                {
                    
    $this->cart();
                }
            }
     
        function 
    query($order_id)
            {  
                
    $order_id = xtc_db_prepare_input($order_id);
                die(
    "fff");

    }
    }
    sonst nichts. trotzdem fehler 500. warum? fehlt da ein parent construct?

    Cannot redeclare gm_save_order() (previously declared in /gm/inc/gm_save_order.inc.php:15)
     
  15. ff-webdesigner

    ff-webdesigner Erfahrener Benutzer

  16. Anonymous

    Anonymous Administrator Mitarbeiter

    @ff-webdesigner Das ist aus dem Code oben leider nicht vollständig lösbar. Du musst mal den ganzen Code und alle Dateien posten, so kann man das nicht mal bei sich einbauen um zu sehen was das Problem ist. Ein Fehler 500 deutet fast immer auf einen Syntax Fehler oder fehlende Dateien hin. Wenn man den Fehler nicht aus dem Log sieht kann man so nichts dazu sagen.

    Du kannst keine Funktion mit dem selben Namen doppelt definieren. Wähle einen anderen Namen für deine Funktion.

    Die Datei gm_save_order.inc.php kann man nicht überladen.