Перейти к содержанию
mimme

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

Рекомендуемые сообщения

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

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
55 минут назад, mimme сказал:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 minute ago, Fedka said:

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

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
1 час назад, mimme сказал:

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

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

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

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

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

Можно

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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');
    }

 

 

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Join the conversation

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

Гость
Вы комментируете как гость. Если у вас есть аккаунт, пожалуйста, войдите
Ответить в этой теме...

×   Вы вставили контент с форматированием.   Удалить форматирование

  Разрешено использовать не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.