Jump to content
Sign in to follow this  
nikifalex

[Решено {обновление курсов валют}] В админку не заходит

Recommended Posts

Если вы вводите логин-пароль в админку, и все зависает, а потом может пишет 500, 504 или что-то еще.

То проблема связана с обновлением курсов валют через яху.

 

Открываем фафл

\admin\model\localisation\currency.php

 

находим там

	public function updateCurrencies($force = false) {
		if (extension_loaded('curl')) {
			$data = array();
			
			if ($force) {
				$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "currency WHERE code != '" . $this->db->escape($this->config->get('config_currency')) . "'");

и вставляем return;

	public function updateCurrencies($force = false) {
		return;
		if (extension_loaded('curl')) {
			$data = array();
			
			if ($force) {
				$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "currency WHERE code != '" . $this->db->escape($this->config->get('config_currency')) . "'");

Потом идем сюда и благодарим nikifalex за помощь.

Share this post


Link to post
Share on other sites

спасибо, помогло. огромный вам респект, плюсануть не могу...

Share this post


Link to post
Share on other sites

Чудесно! Проблема не у меня одного оказалось. Зашло в админку!

Но на 3х других сайтах на opencart (только верссии другие - админка работает)

Есть смысл поменять у них тоже?

Share this post


Link to post
Share on other sites

Нет!!! Это затычка!!!!

 

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 30); //30 сек ожидания - подобрать по хостингу.

Share this post


Link to post
Share on other sites

И все равно это не совсем пожет помочь, потому что это нужно фиксить

После $content = curl_exec($curl);

Нужно убедиться, что результат все же есть

Share this post


Link to post
Share on other sites
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 4); //4 сек ожидания - подобрать по хостингу.
curl_setopt($curl, CURLOPT_TIMEOUT,4);
			$content = curl_exec($curl);
			
			curl_close($curl);
if ($content) {			
			$lines = explode("\n", trim($content));
				
			foreach ($lines as $line) {
				$currency = utf8_substr($line, 4, 3);
				$value = utf8_substr($line, 11, 6);
				
				if ((float)$value) {
					$this->db->query("UPDATE " . DB_PREFIX . "currency SET value = '" . (float)$value . "', date_modified = '" .  $this->db->escape(date('Y-m-d H:i:s')) . "' WHERE code = '" . $this->db->escape($currency) . "'");
				}
			}
			
			$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

Затыкать можно как угодно, но проблема у яхи. Таймаут не виноват.

Share this post


Link to post
Share on other sites

у яхи какие проблемы?

Сервер не отвечает - отвалится по таймауту

Share this post


Link to post
Share on other sites

Спасибо!

 

Весь день вчера промучился, подзадолбал хостера)

 

Кстати, на локальном сервере всё работало.

Share this post


Link to post
Share on other sites

Если вы вводите логин-пароль в админку, и все зависает, а потом может пишет 500, 504 или что-то еще.

То проблема связана с обновлением курсов валют через яху.

...

Спасибо вам, автор. Все помогло, а то все сайты отвалились - ужас :?

Share this post


Link to post
Share on other sites

На ocStore 1.5.1.3 код несколько другой, как менять?

Share this post


Link to post
Share on other sites

какой другой? приведите тут его, т.к. такая древняя версия врядли у кого сохранилась

Share this post


Link to post
Share on other sites

nikifalex,

СПАСИБО ТЕБЕ НЕРЕАЛЬНОЕ !!! 

Все так и было

Share this post


Link to post
Share on other sites

Нашел, простите, у меня там просто не 

public function updateCurrencies($force = false) { 

а

public function updateCurrencies() { 

Добавил return - помогло!

 

Скажите, при этом автообновление валют продолжает работать?

Share this post


Link to post
Share on other sites

Нет конечно..

 

Поэтому я и писал что это "затычка"

 

А мое предложение народ игнорит, и не пробует, но оно работает!

 

Кроме того, если постараться, то можно вывести сообщение в админку - курсы не обновлены!

Share this post


Link to post
Share on other sites

Да, тогда не понятно, зачем лезть в код, если модно просто в админке отключить обновление курса.

 

Добавил строки

curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 4); //4 сек ожидания - подобрать по хостингу.
curl_setopt($curl, CURLOPT_TIMEOUT,4);

И автообновление сохраняется, я так понял. Кстати, помогло.

Edited by zorky

Share this post


Link to post
Share on other sites

А если сервак отваливается по таймауту? и вы не можете зайти в админку?

Share this post


Link to post
Share on other sites

Поставил

curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 2); //4 сек ожидания - подобрать по хостингу.
curl_setopt($curl, CURLOPT_TIMEOUT,2);

Загружается довольно быстро. 2-3 секунды.

Share this post


Link to post
Share on other sites

Если вы вводите логин-пароль в админку, и все зависает, а потом может пишет 500, 504 или что-то еще.

То проблема связана с обновлением курсов валют через яху.

 

Открываем фафл

\admin\model\localisation\currency.php

 

находим там

	public function updateCurrencies($force = false) {
		if (extension_loaded('curl')) {
			$data = array();
			
			if ($force) {
				$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "currency WHERE code != '" . $this->db->escape($this->config->get('config_currency')) . "'");

и вставляем return;

	public function updateCurrencies($force = false) {
		return;
		if (extension_loaded('curl')) {
			$data = array();
			
			if ($force) {
				$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "currency WHERE code != '" . $this->db->escape($this->config->get('config_currency')) . "'");

Потом идем сюда и благодарим nikifalex за помощь.

Огромное спасибо! Вчера столкнулся с данной проблемой, ваше решение очень помогло

Share this post


Link to post
Share on other sites
public function updateCurrencies у меня нет этой строки в этом файле opencart 2.3 как быть?

Share this post


Link to post
Share on other sites

<?php
// *    @copyright    OPENCART.PRO 2011 - 2017.
// *    @forum   http://forum.opencart.pro
// *    @source        See SOURCE.txt for source and other copyright.
// *    @license    GNU General Public License version 3; see LICENSE.txt

class ModelLocalisationCurrency extends Model {
    public function addCurrency($data) {
        $this->db->query("INSERT INTO " . DB_PREFIX . "currency SET title = '" . $this->db->escape($data['title']) . "', code = '" . $this->db->escape($data['code']) . "', symbol_left = '" . $this->db->escape($data['symbol_left']) . "', symbol_right = '" . $this->db->escape($data['symbol_right']) . "', decimal_place = '" . $this->db->escape($data['decimal_place']) . "', value = '" . $this->db->escape($data['value']) . "', status = '" . (int)$data['status'] . "', date_modified = NOW()");

        $currency_id = $this->db->getLastId();

        if ($this->config->get('config_currency_auto')) {
            $this->refresh(true);
        }

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

    public function editCurrency($currency_id, $data) {
        $this->db->query("UPDATE " . DB_PREFIX . "currency SET title = '" . $this->db->escape($data['title']) . "', code = '" . $this->db->escape($data['code']) . "', symbol_left = '" . $this->db->escape($data['symbol_left']) . "', symbol_right = '" . $this->db->escape($data['symbol_right']) . "', decimal_place = '" . $this->db->escape($data['decimal_place']) . "', value = '" . $this->db->escape($data['value']) . "', status = '" . (int)$data['status'] . "', date_modified = NOW() WHERE currency_id = '" . (int)$currency_id . "'");

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

    public function deleteCurrency($currency_id) {
        $this->db->query("DELETE FROM " . DB_PREFIX . "currency WHERE currency_id = '" . (int)$currency_id . "'");

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

    public function getCurrency($currency_id) {
        $query = $this->db->query("SELECT DISTINCT * FROM " . DB_PREFIX . "currency WHERE currency_id = '" . (int)$currency_id . "'");

        return $query->row;
    }

    public function getCurrencyByCode($currency) {
        $query = $this->db->query("SELECT DISTINCT * FROM " . DB_PREFIX . "currency WHERE code = '" . $this->db->escape($currency) . "'");

        return $query->row;
    }

    public function getCurrencies($data = array()) {
        if ($data) {
            $sql = "SELECT * FROM " . DB_PREFIX . "currency";

            $sort_data = array(
                'title',
                'code',
                'value',
                'date_modified'
            );

            if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
                $sql .= " ORDER BY " . $data['sort'];
            } else {
                $sql .= " ORDER BY title";
            }

            if (isset($data['order']) && ($data['order'] == 'DESC')) {
                $sql .= " DESC";
            } else {
                $sql .= " ASC";
            }

            if (isset($data['start']) || isset($data['limit'])) {
                if ($data['start'] < 0) {
                    $data['start'] = 0;
                }

                if ($data['limit'] < 1) {
                    $data['limit'] = 20;
                }

                $sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit'];
            }

            $query = $this->db->query($sql);

            return $query->rows;
        } else {
            $currency_data = $this->cache->get('currency');

            if (!$currency_data) {
                $currency_data = array();

                $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "currency ORDER BY title ASC");

                foreach ($query->rows as $result) {
                    $currency_data[$result['code']] = array(
                        'currency_id'   => $result['currency_id'],
                        'title'         => $result['title'],
                        'code'          => $result['code'],
                        'symbol_left'   => $result['symbol_left'],
                        'symbol_right'  => $result['symbol_right'],
                        'decimal_place' => $result['decimal_place'],
                        'value'         => $result['value'],
                        'status'        => $result['status'],
                        'date_modified' => $result['date_modified']
                    );
                }

                $this->cache->set('currency', $currency_data);
            }

            return $currency_data;
        }
    }

    public function refresh($force = false) {
        $data = array();

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

        foreach ($query->rows as $result) {
            $data[] = $this->config->get('config_currency') . $result['code'] . '=X';
        }

        $curl = curl_init();

        curl_setopt($curl, CURLOPT_URL, 'http://download.finance.yahoo.com/d/quotes.csv?s=' . implode(',', $data) . '&f=sl1&e=.csv');
        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);

        $lines = explode("\n", trim($content));

        foreach ($lines as $line) {
            $currency = utf8_substr($line, 4, 3);
            $value = utf8_substr($line, 11, 6);

            if ((float)$value) {
                $this->db->query("UPDATE " . DB_PREFIX . "currency SET value = '" . (float)$value . "', date_modified = '" .  $this->db->escape(date('Y-m-d H:i:s')) . "' WHERE code = '" . $this->db->escape($currency) . "'");
            }
        }

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

    public function getTotalCurrencies() {
        $query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "currency");

        return $query->row['total'];
    }
}

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.

Sign in to follow this  

  • 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.