Fórum OpenCart Brasil

Por um e-commerce livre, confiável e profissional

Suporte geral sobre problemas técnicos para OpenCart v2.x.
#70818
O opencart atualiza a moeda de forma automática, porem ele pega a variação do dolar a cada X "minutos".

Alguem sabe o que precisa fazer no arquivo abaixo, para que ele pegue o dolar do dia(que no caso é o dolar fechado no dia anterior)

admin/model/location/currency.php

Linha 123
curl_setopt($curl, CURLOPT_URL, 'http://download.finance.yahoo.com/d/quotes.csv?s=' . implode(',', $data) . '&f=sl1&e=.csv');


Utilizando Opencart Versão 2.3.0.2
#70853
Substitua essas linhas https://github.com/opencart/opencart/bl ... #L111-L115 por
Código: Selecionar todos

$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "currency WHERE code != '" . $this->db->escape($this->config->get('config_currency')) . "' AND DATE(`date_modified`) < '" .  date('Y-m-d') . "'");

Isso vai fazer ele a fazer atualização apenas no dia seguinte da última modificação.

*Não testei
#70877
Obrigado pela dica valdeir2000 .

Só uma dúvida.

A mudança esta no model de admin, se eu não acessar o admin a atualização no valor da loja(catalog) são afetados ?
ou seja, a atualização é de forma automática ou preciso acessar o painel para que o dolar seja atualizado ?
#70894
É necessário acessar o admin para atualizar (talvez não seja, mas pelo que lembro é somente assim).

Alguém me corrija se estiver errado.
#70899
Ok, vou fazer alguns testes para verificar esta questão.
Pq o correto é atualizar quando alguém acessar a loja, ou seja, toda vez que a loja for acessada independente da página que o internauta estiver navegando.
#70916
Só atualiza a moeda caso o administrador acesse o painel e va até a página de MOEDAS, não precisa nem clicar no botão atualizar pois o mesmo já é atualizado.
Então se uma loja virtual aonde o administrador não acessa a loja ao sábado ou ao domingo já viu a confusão nos valores neh ?

Pensei em criar uma CRON para a página admin MOEDAS mas como ela necessita de um login, não vai dar certo.
O que pode ser feito é criar uma página separada que atualiza a moeda que utiliza uma cron em determinado horário
EX:
http://www.minhalojavirtual.com.br/atualiza-moeda.php

Como o HEADER é acessado em todas as páginas da loja, o que pode ser feito tb é atualizar a moeda a partir deste controlador
C:\wamp\www\azetiquetas.com.br\catalog\controller\common\header.php

Não sei se existe um módulo que atualiza a moeda de forma automatica, se alguem souber deixe aqui a dica.
#70926
Coloca esse arquivo na pasta catalog/controller/localisation/currency.php

https://gist.github.com/valdeir2000/2b0 ... 8d841e79d9

Depois basta configurar o cron com o comando
Código: Selecionar todos
curl --url https://www.SUA-LOJA.com.br/index.php?route=localisation/currency
#70937
Boa valdeir2000, legal você ter disponibilizado no git, vai ajudar a galera.

A unica forma por enquanto é deste jeito mesmo, pq mesmo que ninguém acesse o site a cron estará acessando.

A outra opção, fica na questão do arquivo catalog\controller\common\header.php criando uma função por lá como você fez com catalog/controller/localisation/currency.php e deixar que assim que o usuário acessar a loja a consulta da moeda é feita pelo acesso do internauta, porem ai fica a questão de que toda vez que o usuário der um refresh a função sera executada e vai acessar o site finance.yahoo.com e fazer a "atualização"

No arquivo que esta no git fica só a questão da linha 9, isso para quem quiser pegar o DOLAR do dia anterior, para quem não quiser basta deixar como esta.

Atualiza no git e coloca um comentário pra galera.
Código: Selecionar todos
// MOEDA ATAULIZADA A CADA X minutos
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "currency WHERE code != '" . $this->db->escape($this->config->get('config_currency')) . "'"); // linha 9

// MOEDA FECHADA NO DIA ANTEIOR
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "currency WHERE code != '" . $this->db->escape($this->config->get('config_currency')) . "' AND DATE(`date_modified`) < '" .  date('Y-m-d') . "'");
Se eu estiver falando bobeira me corrija.

E obrigado novamente.