class order_ORIGIN overload

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

  1. ff-webdesigner
    ff-webdesigner Erfahrener Benutzer
    Registriert seit:
    22. Januar 2014
    Beiträge:
    548
    Danke erhalten:
    53
    Danke vergeben:
    60
    #1 ff-webdesigner, 6. November 2023
    Zuletzt bearbeitet: 13. Dezember 2023
    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)
    {
    //...
    }
     
  2. Dominik Dehning
    Dominik Dehning Aktives Mitglied
    Registriert seit:
    21. März 2023
    Beiträge:
    41
    Danke erhalten:
    30
    Danke vergeben:
    39
    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
    Registriert seit:
    22. Januar 2014
    Beiträge:
    548
    Danke erhalten:
    53
    Danke vergeben:
    60
    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 Aktives Mitglied
    Registriert seit:
    21. März 2023
    Beiträge:
    41
    Danke erhalten:
    30
    Danke vergeben:
    39
    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
    Registriert seit:
    22. Januar 2014
    Beiträge:
    548
    Danke erhalten:
    53
    Danke vergeben:
    60
  6. Dominik Dehning
    Dominik Dehning Aktives Mitglied
    Registriert seit:
    21. März 2023
    Beiträge:
    41
    Danke erhalten:
    30
    Danke vergeben:
    39
    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
    Registriert seit:
    22. Januar 2014
    Beiträge:
    548
    Danke erhalten:
    53
    Danke vergeben:
    60
    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 Aktives Mitglied
    Registriert seit:
    21. März 2023
    Beiträge:
    41
    Danke erhalten:
    30
    Danke vergeben:
    39
    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
    Registriert seit:
    22. Januar 2014
    Beiträge:
    548
    Danke erhalten:
    53
    Danke vergeben:
    60
    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
    Registriert seit:
    6. Mai 2013
    Beiträge:
    101
    Danke erhalten:
    83
    Danke vergeben:
    29

    PHP:
    class ff_shopping_cart extends ff_shopping_cart_parent
    {
        function 
    get_products()
        {
            die (
    "xxx");
        }
    }
     
  11. Dominik Dehning
    Dominik Dehning Aktives Mitglied
    Registriert seit:
    21. März 2023
    Beiträge:
    41
    Danke erhalten:
    30
    Danke vergeben:
    39
    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
    Registriert seit:
    22. Januar 2014
    Beiträge:
    548
    Danke erhalten:
    53
    Danke vergeben:
    60
    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 Aktives Mitglied
    Registriert seit:
    21. März 2023
    Beiträge:
    41
    Danke erhalten:
    30
    Danke vergeben:
    39
    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
    Registriert seit:
    22. Januar 2014
    Beiträge:
    548
    Danke erhalten:
    53
    Danke vergeben:
    60
    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
    Registriert seit:
    22. Januar 2014
    Beiträge:
    548
    Danke erhalten:
    53
    Danke vergeben:
    60
  16. Anonymous
    Anonymous Administrator
    Mitarbeiter
    Registriert seit:
    26. April 2011
    Beiträge:
    1.954
    Danke erhalten:
    1.588
    Danke vergeben:
    339
    @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.