Wahrungskurse automatisch aktualisieren

Thema wurde von Christian Mueller, 2. November 2013 erstellt.

  1. Christian Mueller

    Christian Mueller Beta-Held

    Registriert seit:
    4. Juli 2011
    Beiträge:
    3.698
    Danke erhalten:
    889
    Danke vergeben:
    288
    Unter http://www.exanto.de/xtcommerce-waehrungskurse-automatisch-aktualisieren.html wird beschrieben, wie man Wechselkurse automatisch aktualisieren kann.

    Ich habe das in der /includes/classes/xtcPrice.php eingebaut und das funktioniert auch hervorragend.

    Das sollte aber doch auch updatesicher gehen, oder?

    Alle meine Versuche dahingehend sind aber bislang fehlgeschlagen.
    Kann mir da mal jemand auf die Sprünge helfen?
     
  2. Dennis (MotivMonster.de)

    Dennis (MotivMonster.de) G-WARD 2013/14/15/16

    Registriert seit:
    22. September 2011
    Beiträge:
    30.984
    Danke erhalten:
    6.097
    Danke vergeben:
    1.079
    Beruf:
    Mann für alles :)
    Ort:
    Weilburg
    wäre da nicht eine datei einfacher die per cronjob das alle nase lang autom. macht? Dann müsste man nicht in die Shopdateien eingreifen.
     
  3. Christian Mueller

    Christian Mueller Beta-Held

    Registriert seit:
    4. Juli 2011
    Beiträge:
    3.698
    Danke erhalten:
    889
    Danke vergeben:
    288
    Ich würde aber schon gerne wissen wie man das per overload richtig einbindet.
     
  4. Avenger

    Avenger G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    Klar geht das...

    Wie im Artikel beschrieben, muss dafür die Konstruktormethode von xtPrice überladen werden....
     
  5. Christian Mueller

    Christian Mueller Beta-Held

    Registriert seit:
    4. Juli 2011
    Beiträge:
    3.698
    Danke erhalten:
    889
    Danke vergeben:
    288
    #5 Christian Mueller, 2. November 2013
    Zuletzt bearbeitet: 2. November 2013
    Ja, das habe ich verstanden. Nur wie mache ich das?
    (Sorry, ich bin Kaufmann und kein Informatiker)

    ich habe es versucht als
    user_classes/overloads/xtcPrice/currencyupdate_xtcPrice.php

    class wassweissich?? extends constructor_parent {
    code von exanto
    }


    Funktioniert aber nicht


    Fehlermeldung:
    Parse error: syntax error, unexpected T_VARIABLE, expecting T_FUNCTION in /user_classes/overloads/xtcPrice/currencyupdate_xtcPrice.php on line 24
     
  6. Avenger

    Avenger G-WARD 2012/13/14/15

    Registriert seit:
    26. April 2011
    Beiträge:
    4.771
    Danke erhalten:
    1.478
    Danke vergeben:
    89
    Probier das mal:

    PHP:
    class currencyupdate_xtcPrice extends currencyupdate_xtcPrice_parent
    {
      function 
    __construct()
      {
          
    //exanto Code
          
          
    parent::__construct()
      }
    }
    Cache leeren...
     
  7. Christian Mueller

    Christian Mueller Beta-Held

    Registriert seit:
    4. Juli 2011
    Beiträge:
    3.698
    Danke erhalten:
    889
    Danke vergeben:
    288
    Habe ich probiert:

    PHP:
    <?php

    class currencyupdate_xtcPrice extends currencyupdate_xtcPrice_parent
    {
    function 
    __construct()
    {
    // [start] :ADDED: exanto.de - get current rates
            
    $ccache DIR_FS_DOCUMENT_ROOT 'cache/last_currency_run.txt';
            if (
    filemtime($ccache) + 86400 time()) {
                
    // get new values from ecb
                
    $xml = @simplexml_load_file('http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml');
                if (
    is_object($xml)) {
                    
    // successfully grabbed, touch markerfile, update db
                    
    touch($ccache);
                    foreach (
    $xml->Cube->Cube->Cube as $curEntry) {
                        
    xtDBquery("
                            UPDATE  " 
    TABLE_CURRENCIES "
                            SET     value = '" 
    $curEntry['rate'] . "', last_updated = now()
                            WHERE   code = '" 
    $curEntry['currency'] . "'
                            LIMIT   1
                            "
    );
                    }
                }
            }
            
    // [ end ] :ADDED: exanto.de - get current rates

    parent::__construct()
    }
    }

    ?>

    Funktioniert aber nicht:

    Parse error: syntax error, unexpected '}' in /user_classes/overloads/xtcPrice/currencyupdate_xtcPrice.php on line 28
     
  8. Teelirium

    Teelirium Erfahrener Benutzer

    Registriert seit:
    13. Juni 2012
    Beiträge:
    287
    Danke erhalten:
    22
    Danke vergeben:
    141
    Ich beobachte den Thread hier, da mich die Lösung auch brennend interessiert!
     
  9. Moritz (Gambio)

    Moritz (Gambio) Administrator

    Registriert seit:
    26. April 2011
    Beiträge:
    5.786
    Danke erhalten:
    2.692
    Danke vergeben:
    903
    Nach dem parent::__construct() fehlt das Semikolon ;
     
  10. Christian Mueller

    Christian Mueller Beta-Held

    Registriert seit:
    4. Juli 2011
    Beiträge:
    3.698
    Danke erhalten:
    889
    Danke vergeben:
    288
    Danke Moritz, jetzt gibt's keinen ganz weissen Bildschirm mehr, dafür erhalte ich pro Währung zwei Fehlermeldungen:

    WARNING(2): "Missing argument 1 for xtcPrice_ORIGIN::xtcPrice_ORIGIN(), called in /srv/www/update/user_classes/overloads/xtcPrice/currencyupdate_xtcPrice.php on line 27 and defined" in /srv/www/update/includes/classes/xtcPrice.php:25 (Details)
    Backtrace: #0 (#xtcPrice_ORIGIN) xtcPrice_ORIGIN called at [/srv/www/update/user_classes/overloads/xtcPrice/currencyupdate_xtcPrice.php:27] #1 (#currencyupdate_xtcPrice) __construct called at [/srv/www/update/gm/properties/page_modules/PropertiesView.php:315] #2 (#PropertiesView) get_selection_form called at [/srv/www/update/system/views/product_info/ProductInfoContentView.inc.php:471] #3 (#ProductInfoContentView) get_html called at [/srv/www/update/product_info.php:54]
    WARNING(2): "Missing argument 2 for xtcPrice_ORIGIN::xtcPrice_ORIGIN(), called in /srv/www/update/user_classes/overloads/xtcPrice/currencyupdate_xtcPrice.php on line 27 and defined" in /srv/www/update/includes/classes/xtcPrice.php:25 (Details)
    Backtrace: #0 (#xtcPrice_ORIGIN) xtcPrice_ORIGIN called at [/srv/www/update/user_classes/overloads/xtcPrice/currencyupdate_xtcPrice.php:27] #1 (#currencyupdate_xtcPrice) __construct called at [/srv/www/update/gm/properties/page_modules/PropertiesView.php:315] #2 (#PropertiesView) get_selection_form called at [/srv/www/update/system/views/product_info/ProductInfoContentView.inc.php:471] #3 (#ProductInfoContentView) get_html called at [/srv/www/update/product_info.php:54]
     
  11. Moritz (Gambio)

    Moritz (Gambio) Administrator

    Registriert seit:
    26. April 2011
    Beiträge:
    5.786
    Danke erhalten:
    2.692
    Danke vergeben:
    903
    Es muss
    PHP:
    function __construct($currency$cGroup)
    und
    PHP:
    parent::__construct($currency$cGroup);
    heißen.
     
  12. Christian Mueller

    Christian Mueller Beta-Held

    Registriert seit:
    4. Juli 2011
    Beiträge:
    3.698
    Danke erhalten:
    889
    Danke vergeben:
    288
    #12 Christian Mueller, 2. November 2013
    Zuletzt bearbeitet: 2. November 2013
    Super Moritz, das war's!


    also, die funktionierende /user_classes/overloads/xtcPrice/currencyupdate_xtcPrice.php sieht so aus:

    PHP:
    <?php

    class currencyupdate_xtcPrice extends currencyupdate_xtcPrice_parent
    {
    function 
    __construct($currency$cGroup)

    {
    // [start] :ADDED: exanto.de - get current rates
            
    $ccache DIR_FS_DOCUMENT_ROOT 'cache/last_currency_run.txt';
            if (
    filemtime($ccache) + 86400 time()) {
                
    // get new values from ecb
                
    $xml = @simplexml_load_file('http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml');
                if (
    is_object($xml)) {
                    
    // successfully grabbed, touch markerfile, update db
                    
    touch($ccache);
                    foreach (
    $xml->Cube->Cube->Cube as $curEntry) {
                        
    xtDBquery("
                            UPDATE  " 
    TABLE_CURRENCIES "
                            SET     value = '" 
    $curEntry['rate'] . "', last_updated = now()
                            WHERE   code = '" 
    $curEntry['currency'] . "'
                            LIMIT   1
                            "
    );
                    }
                }
            }
            
    // [ end ] :ADDED: exanto.de - get current rates

    parent::__construct($currency$cGroup);
    }
    }

    ?>

    Wenn es in einer Währung nicht funktioniert, schaut Euch die http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml an. Da stehen nicht alle Währungen der Welt drinn...

    Die Zeit für den Cache würde ich noch runter setzen auf eine Stunde (3600 statt 86400). Sonst wird die Datei evtl. zu lange gecached.
     
  13. Teelirium

    Teelirium Erfahrener Benutzer

    Registriert seit:
    13. Juni 2012
    Beiträge:
    287
    Danke erhalten:
    22
    Danke vergeben:
    141
    Sehr geil! Alle überflüssigen Leerzeichen entfernt und es klappt!

    Danke!
     
  14. Moritz (Gambio)

    Moritz (Gambio) Administrator

    Registriert seit:
    26. April 2011
    Beiträge:
    5.786
    Danke erhalten:
    2.692
    Danke vergeben:
    903
    Bedenkt, dass wenn der Server für die Währungsdaten mal lahmt oder nicht zu erreichen ist, auch der Shop entsprechend lahmt oder nicht zu erreichen ist. Ist ärgerlich, wenn das dann grad ein Kunde angestoßen hat.
     
  15. Dennis (MotivMonster.de)

    Dennis (MotivMonster.de) G-WARD 2013/14/15/16

    Registriert seit:
    22. September 2011
    Beiträge:
    30.984
    Danke erhalten:
    6.097
    Danke vergeben:
    1.079
    Beruf:
    Mann für alles :)
    Ort:
    Weilburg
    da fänd ic nen cronjob der das über eine extra datei macht wohl doch sinnvoller, oder lahmt der shop dann auch?
     
  16. Moritz (Gambio)

    Moritz (Gambio) Administrator

    Registriert seit:
    26. April 2011
    Beiträge:
    5.786
    Danke erhalten:
    2.692
    Danke vergeben:
    903
    Cronjob und ein Script mit Timeout wäre die ideale Variante.
     
  17. Christian Mueller

    Christian Mueller Beta-Held

    Registriert seit:
    4. Juli 2011
    Beiträge:
    3.698
    Danke erhalten:
    889
    Danke vergeben:
    288
    Dann könnte man doch auch einfach /admin/currencies.php?action=update ausführen, oder?
     
  18. Moritz (Gambio)

    Moritz (Gambio) Administrator

    Registriert seit:
    26. April 2011
    Beiträge:
    5.786
    Danke erhalten:
    2.692
    Danke vergeben:
    903
    Dazu müsste man als Admin eingeloggt sein, was ein Cronjob nie ist.
     
  19. kai_holst

    kai_holst Erfahrener Benutzer

    Registriert seit:
    4. Mai 2022
    Beiträge:
    374
    Danke erhalten:
    145
    Danke vergeben:
    268
    Irgendwie komme ich nicht weiter...
    Dies ist der aktuellste Feed, den ich zum Thema Wechselkursautomatik finden konnte.

    Durch die aktuell hohe Inflation etc., sind die Wechselkurse auch wieder unstabiler geworden.
    Ich möchte gerne einen Cronjob einrichten, der das macht, als wenn ich manuell auf den Aktualisieren-Button klicke, was ich zur Zeit mind. 1x am Tag mache.

    Kann mir bitte jemand erklären wie ich die URL finde, um den Wechselkurs automatisch per Cronjob aktualisieren zu lassen?

    Ich habe folgenden versucht, der ohne Fehlermeldung läuft, aber die Wechselkursaktualisierung leider nicht auslöst...

    https://shop.naturschlafstudio.de/request_port.php?module=RunJobs&token=APILayer API-Key für Wechselkursaktualisierung
     
  20. Moritz (Gambio)

    Moritz (Gambio) Administrator

    Registriert seit:
    26. April 2011
    Beiträge:
    5.786
    Danke erhalten:
    2.692
    Danke vergeben:
    903
    Ich weiß grad gar nicht, ob das mit Shopfunktionalitäten geht. Jedenfalls habe ich gerade ein Script geschrieben, das du per Cronjob ansteuern kannst. Es kommt ins Hauptverzeichnis vom Shop.