Jump to content
mimme

Вопрос про автообновления валюты

Recommended Posts

Здравствуйте!

Скажите, пожалуйста, по какому событию (или во сколько) происходит автообновление валют на сайте?

Хотелось бы немного поуправлять данным процессом, но не очень понятно кто что дёргает.

Обновление (с кнопки) работает, в настройках автообновление вытавлено.

Но обновление происходит не каждый день.

Share this post


Link to post
Share on other sites
55 минут назад, mimme сказал:

Скажите, пожалуйста, по какому событию (или во сколько) происходит автообновление валют на сайте?

Если выставлена галочка "Автообновление" тогда оно происходит при заходе в админку товара.
В какое время зайдете (нового дня) в то время и будет обновляться валюта.

Share this post


Link to post
Share on other sites
1 minute ago, Fedka said:

Если выставлена галочка "Автообновление" тогда оно происходит при заходе в админку товара.
 В какое время зайдете (нового дня) в то время и будет обновляться валюта.

Оо спасибо! То-есть, достаточно дёрнуть какую-нибудь карточку товара из админки и оно обновится...

А не подскажете, можно ли это дёргать по крону, например.

Я нашёл вариант со сделать контроллер и дёргать его по крону.

Может в третьей версии есть варианты лучше?

Share this post


Link to post
Share on other sites
1 час назад, mimme сказал:

Оо спасибо! То-есть, достаточно дёрнуть какую-нибудь карточку товара из админки и оно обновится...

Не, там чуть по другому работает.

Нужно зайти именно на главную страницу админки. Только в этом случае будет идти обновление.

1 час назад, mimme сказал:

А не подскажете, можно ли это дёргать по крону, например.

Можно

1 час назад, mimme сказал:

Может в третьей версии есть варианты лучше?

Насколько я помню, так же само

Share this post


Link to post
Share on other sites

Это оказалось очень просто.

Из админ модели был скопирован метод для обновления курса.

Кстати, метод не тот, что в комплекте... он не работает, а что-то типа такого:

Spoiler

public function refreshRF($force = false) {
        $currenciesForUpdate = array();
        $defaultCurrency = $this->config->get('config_currency');
        if ($force) {
            $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "currency WHERE code != '" . $this->db->escape($defaultCurrency) . "'");
        } else {
            $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "currency WHERE code != '" . $this->db->escape($defaultCurrency) . "' AND date_modified < '" .  $this->db->escape(date('Y-m-d H:i:s', strtotime('-1 day'))) . "'");
        }

        if (! $query->num_rows) {
            return false;
        }
        $currenciesForUpdate[$defaultCurrency] = 1;
        foreach ($query->rows as $result) {
            $currenciesForUpdate[$result['code']] = 1;
        }

        $cur_date = date("d/m/Y");
        $url_for_curl = 'http://www.cbr.ru/scripts/XML_daily.asp?date_req='.$cur_date;
        //var_dump($url_for_curl);
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url_for_curl);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curl, CURLOPT_HEADER, false);
        curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 30);
        curl_setopt($curl, CURLOPT_TIMEOUT, 30);
        $content = curl_exec($curl);
        curl_close($curl);

        if (! $content) {
            return false;
        }

        $currenciesRF = simplexml_load_string($content);
              
        if (! $currenciesRF || count($currenciesRF) == 0) {
            return false;
        }

        foreach ($currenciesRF as $currency) {
            if (isset($currenciesForUpdate[(string)$currency->CharCode]) && $currency->Nominal > 0) {
                $currenciesForUpdate[(string)$currency->CharCode] = str_replace(',', '.', (string)$currency->Value) / $currency->Nominal;
            }
        }

        foreach ($currenciesForUpdate as $code => $val) {
            if ($code != $defaultCurrency) {
                $currenciesForUpdate[$code] = $currenciesForUpdate[$defaultCurrency] / $val;
            }
        }
        $currenciesForUpdate[$defaultCurrency] = 1;

        foreach ($currenciesForUpdate as $code => $val) {
            if ((float)$val) {
                $value = (float)$val;
                
                $this->db->query("UPDATE " . DB_PREFIX . "currency SET value = '" . $value . "', date_modified = '" .  $this->db->escape(date('Y-m-d H:i:s')) . "' WHERE code = '" . $this->db->escape($code) . "'");
            } else {
                $this->db->query("UPDATE " . DB_PREFIX . "currency SET value = '1.00000', date_modified = '" .  $this->db->escape(date('Y-m-d H:i:s')) . "' WHERE code = '" . $this->db->escape($this->config->get('config_currency')) . "'");
            }
        }

        $this->cache->delete('currency');
    }

 

 

В новом контроллере я добавил дёргание этого метода и редирект на главную.

В крон добавил дёргание этой страницы... профит.

Для пущей секурности, можно ещё добавить какой-нибудь параметр, чтобы его смотреть и не дёргать обновлялку понапрасну.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.