Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

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


Recommended Posts

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

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

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

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

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

Надіслати
Поділитися на інших сайтах


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

 

 

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

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

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

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.