Post by umarius » Sun Feb 25, 2018 8:52 pm

Am cautat o extensie care sa faca acest lucru pentru opencart 3 si nu am gasit, asa ca am creat ceva rapid.
Postez aici pentru alte persoane care vor o solutie rapida, iar cei care se pricep mai bine pot veni cu sugestii.

Cum am procedat eu:

1. Am creat un controller in catalog/controller/account/bnro.php, o functie php care preia XML-ul de pe bnro cu toate monezile

Code: Select all

class ControllerAccountBnro extends Controller {
	public function index() {
		
		$this->load->model('account/bnro');
		// url bnro
		$url="http://www.bnro.ro/nbrfxrates.xml";
		$ch = curl_init();
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
		curl_setopt($ch, CURLOPT_URL, $url); 
		// data
		$data = curl_exec($ch); 
		curl_close($ch);
		$rates = array();
		// xml
		$xml = simplexml_load_string($data);
		//echo '<pre>'.var_export($xml->Body->Cube->Rate->attributes()['currency'],1); 
		foreach($xml->Body->Cube->Rate as $rate){   
			$final = array();
			foreach($rate->attributes() as $att=>$value){
				
				if(strcmp($att, 'currency') == 0) $final['currency'] = (string) $value;
				if(strcmp($att, 'multiplier') == 0) $final['multiplier'] = (string) $value;
				 
			}
			if(empty($final['multiplier'])) $final['multiplier'] = 1;
			$final['rate'] = (string) $rate;  
			$final['date'] = (string) $xml->Body->Cube->attributes()[0];
			
			array_push($rates, $final);  	       
		} 
		//echo '<pre>'.var_export($rates,1); 
		// introducem in db
		foreach($rates as $curs){
			// daca e euro
			if($curs['currency'] == "EUR"){
				// insert
				$this->model_account_bnro->add_currency($curs['rate']);
				//$this->users->add_currency($curs); 
				//echo '<pre>'.var_export($curs['rate'],1);  
			}
		}
		

	}
}
2. Am creat un model catalog/model/account/bnro.php cu functia care face update la valoarea cursului.

Code: Select all

class ModelAccountBnro extends Model {
	public function add_currency($val) {
		
		$this->db->query("UPDATE `" . DB_PREFIX . "currency` SET `value` = '" . $this->db->escape($val) . "', `date_modified` = NOW()  WHERE currency_id = 4 "); 
	}
}
Mentiuni: currency_id reprezinta id-ul monedei din database pentru care se doreste update( ar trebui sa se stie acest id, se poate lua din link in admin cand se editeaza moneda).

Acest cod face update pentru moneda LEI in raport cu Euro.
Va poate ajuta daca aveti un magazin care afiseaza preturile si in euro si in lei, ceea ce am avut eu nevoie.

Acum aveti nevoie de un cronjob:

Code: Select all

/usr/local/bin/php /home/user_gazduire/public_html/index.php account bnro>/dev/null 2>&1
Sau puteti crea in admin un link pe care sa dati click zilnic atunci cand se doreste actualizarea, tinand cont si de ora la care Bnro actualizeaza lista.
https://numesite.ro/index.php?route=account/bnro

Newbie

Posts

Joined
Mon Jan 29, 2018 3:36 pm

Post by hypemedia » Mon Feb 26, 2018 1:27 am

Nu inteleg pentru ce aveai nevoie de o implementare separata pentru o functie care deja exista in OC3?
Poti deja face update la curs-ul valutei faptul ca vine de la bnr sau din alta sursa rata de schimb este aceiasi. Ce aduce implementarea ta in plus fata de ce exista acum la ?route=localisation/currency?

Opencart trage datele legate de valuta de aici: http://download.finance.yahoo.com/d/quotes.csv

Active Member

Posts

Joined
Fri Aug 17, 2012 5:39 pm

Post by umarius » Mon Feb 26, 2018 4:23 am

Nu face nimic in plus, dar nu am stiut ca exista deja o functie care actualizeaza cursul.

Scuze

Newbie

Posts

Joined
Mon Jan 29, 2018 3:36 pm

Post by asistentu » Thu Mar 01, 2018 4:51 am

hypemedia wrote:
Mon Feb 26, 2018 1:27 am
Opencart trage datele legate de valuta de aici: http://download.finance.yahoo.com/d/quotes.csv
link-ul e mort de ceva timp

New member

Posts

Joined
Thu Jan 30, 2014 12:58 am


Post by hypemedia » Fri Mar 02, 2018 3:37 pm

Da scuze in OC 3 s-a schimbat engine-ul link-ul de mai sus era din OC2. In OC3 trage cursul de aici: https://api.fixer.io/latest?base=

Active Member

Posts

Joined
Fri Aug 17, 2012 5:39 pm

Post by oliversuc » Fri Mar 04, 2022 5:05 pm

@umarius Nice Work!

În versiunea OC 3.0.3.7 este tot Yahoo nefuncțional pentru actualizare valută. Setat în currency.php:
url_setopt($curl, CURLOPT_URL, 'http://download.finance.yahoo.com/d/quotes.csv?s=' . implode(',', $currency_data) . '&f=sl1&e=.json');

Soluția de mai sus este bine venită pentru versiunile de OC3 care doresc actualizarea valutei RON cu curs BNR pentru valuta EUR ca implicită.

Newbie

Posts

Joined
Mon Nov 12, 2012 9:17 pm
Who is online

Users browsing this forum: No registered users and 95 guests