xt:Commerce Währungskurse automatisch aktualisieren

Bietet man Produkte in verschiedenen Ländern an, dann wird der Preis natürlich in der Landeswährung angezeigt. Bei den teilweise starken Bewegungen auf den Finanzmärkten ist ein tagesaktueller Umrechnungskurs dabei besonders wichtig. xt:Commerce bietet von Haus aus leider keine Möglichkeit, diese Kurse automatisch zu aktualisieren. Mit einem kleinen Kniff lässt sich das aber leicht realisieren. Meine Kursaktualisierung habe ich in die Datei _includes/classes/xtcPrice.php_ gepackt, und zwar in die Methode _xtcPrice_ selbst (Konstruktormethode bei PHP 4.x):

        // [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

Das war’s schon. Damit werden die konfigurierten Währungen im xt:Commerce Shop alle 24 Stunden automatisch an den aktuellen Wechselkurs der europäischen Zentralbank angepasst.

14 Kommentare

  1. Hallo,

    ganau so was habe ich gesucht! Leider bin ich nicht gerade ein PHP-Experte. Könnt Ihr mir sagen, an welcher Stelle ich den Code einfügen muss? Meine bisherigen Versuche endeten immer mit einer Fehlermeldung :- (

  2. Hallo, erst mal danke fuer dein Beitrag.
    Ich habe versucht dein Script zu installieren aber ich habe gar keine Pfad mit den Namen /classes/xtcPrice.php
    includes ja aber danach nur noch die verzeichnisse -src und config.php

    Mus man /classes/xtcPrice.php

    Verzeichnis erstellen ?

    Gruss

    Oliver

      1. Bekomme nach Einbau die Fehlermeldung:

        Parse error: syntax error, unexpected T_VARIABLE, expecting T_FUNCTION in /users/digicam/www/includes/classes/xtcPrice.php on line 387

        In Line 387 steht:
        $ccache = DIR_FS_DOCUMENT_ROOT . ‚cache/last_currency_run.txt‘;

        Kann mir jemand helfen?
        Danke.

  3. Danke für die Antwort. Ist genauso reinkopiert worden, wie es oben steht. Die Zeile davor ist:
    // [start] :ADDED: exanto.de – get current rates
    Habe die PHP-Datei im UltraEdit geändert, der würde mir einen Syntax-Fehler anzeigen, tut er aber nicht. Ich habe wirklich keinen Plan..

  4. Hi, dann steht’s an der falschen Stelle. Der Block muß unter „function xtcPrice($currency, $cGroup) {„, also in die Methode mit rein, innerhalb der geschweiften Klammern.

  5. Jetzt habe ich das nächste Problem: ich habe 2 Währungen, CZK (Standard) und EUR. Ich habe die Refresh-Zeit auf 60 Sekunden eingestellt, aber die Währungen werden nicht upgedatet, Muss ich im XTC-Admin irgendwas einstellen?
    Danke.

    1. Hi, die Kurse müssen nur alle 24 Stunden aktualisiert werden, so oft ändern die sich nicht. Wenn ein Produkt aufgerufen wird o.ä. passiert das automatisch. Manchmal kann es vorkommen, daß die Funktion „simplexml_load_file“ auf dem Server gesperrt ist – einfach mal das @ davor wegnehmen und dann schauen ob eine Fehlermeldung kommt.

  6. Hi IT, die Funktion “simplexml_load_file” scheint auf gem Server gesperrt zu sein. Ich habe das @ davor weggenommen und bekomme folgende Fehlermeldung:
    Warning: simplexml_load_file() [function.simplexml-load-file]: http:// wrapper is disabled in the server configuration by allow_url_fopen=0 in /users/digicam/www/includes/classes/xtcPrice.php on line 73

    Warning: simplexml_load_file(http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml) [function.simplexml-load-file]: failed to open stream: no suitable wrapper could be found in /users/digicam/www/includes/classes/xtcPrice.php on line 73

    Warning: simplexml_load_file() [function.simplexml-load-file]: I/O warning : failed to load external entity „http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml“ in /users/digicam/www/includes/classes/xtcPrice.php on line 73

    Kann ich das irgendwie umgehen?
    Danke.

  7. ein workaround wäre curl zu nutzen…

        $ccache = DIR_FS_DOCUMENT_ROOT . 'cache/last_currency_run.txt';
        if (filemtime($ccache) + 60 < time()) {
            // get new values from ecb
        function load_file($url) {
            $ch = curl_init($url);
            #Return http response in string
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            $xml = simplexml_load_string(curl_exec($ch));
            return $xml;
    

    }

    $feedurl = ‚http://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml‘;
    $rss = load_file($feedurl);

            if (is_object($rss)) {
                touch($ccache);
                foreach ($rss->Cube->Cube->Cube as $curEntry) {
                    xtDBquery("
                        UPDATE  " . TABLE_CURRENCIES . "
                        SET     value = '" . $curEntry['rate'] . "', last_updated = now()
                        WHERE   code = '" . $curEntry['currency'] . "'
                        LIMIT   1
                        ");
                }
            }
        }
    

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert