發佈於

最佳的免費電子商務系統(Best E-commerce Solution),第一名由 OpenCart 獲得

CMS Critic Awards 網站公佈了2017年網友票選結果,最佳的免費電子商務系統(Best E-commerce Solution),第一名由 OpenCart 獲得。

資料來源 : https://www.cmscritic.com/awards/

OpenCart 是全球知名度高、功能強大的開源電商系統,
OpenCart 主要的系統功能包括了 :

[系統類]
 系統原始程式完全開源(Open Source),可自行下載及修改。
 支援多國語言、貨幣。
 支援版型、擴充模組,安裝及設定功能。
 提供資料庫備份及還原工具。
 可自訂首頁及內頁排版樣式。
 可自訂商店頁面內容。
 支援搜尋引擎優化(SEO)。

[購物結帳]
 多種運費計算模組。
 多種付款方式模組。
 紅利積點機制。
 優惠券(折扣碼)機制。
 購物禮券機制。

[管理類]
 商品、模組、版面、訂單、客戶、行銷活動之管理。
 可自訂會員群組(例如老客戶、經銷商、一般會員)。
 提供會員通知功能(電子報)。
 提供商品退換貨記錄管理。
 可列印交易明細/出貨單。
 多種銷售統計報表。

[商品類]
 可自訂商品分類及子分類,商品分類及層級皆無限制
 可自行上架商品,商品數無限制。
 可設定商品優惠價格及優惠期間。
 可設定商品階梯式量大優惠折扣(例如10件以上九折)。
 可設定商品選項(尺寸、顏色、自訂)。
 可設定相關商品(例如在某相機商品頁面,出現記憶卡商品)。
 可設定商品的品牌,自行編輯品牌資料。
 提供商品評價功能。

不過奇怪,我介紹這麼多,也從來沒有人要找我架設 購物車系統過。

發佈於

台灣開店平台大集合-調查日期2017年10

很多開店平台都有提供試用方案、說明會,我們強烈建議商家們在租用服務之前,務必先試用過系統的各項功能,不要只是走馬看花,不要只是覺得後台介面看起來很順眼,就預期系統會很棒,從商品建檔、上架、測試註冊會員、下單、結帳、後台訂單管理、確認付款、更新訂單狀態等等,把網站上線營運後的基本流程式跑一遍,再評估是否順手、是否滿足需求。另外客服的支援也是重點,不過這部分難以分析比較,建議多 google 一下前人留下的意見。

有些平台會以一次簽約多年提供優惠的方式,來誘導商家簽訂長期租賃契約,如果您對平台還不是非常了解(包括系統適用性、平台穩定性、客服品質),建議不要為了省幾千塊,貿然簽下長期租賃契約,讓自己可能陷入進退不得的困境。

以下是我們收錄的台灣開店平台,我們以各家平台的 Alexa 排名來做排序,排名在前的代表網站流量排名比較高,但未必等同於服務比較優或功能比較強,有的只是因為廣告預算花得比較多而已,此清單將不定期更新,以維持資料的參考價值。

91APP https://www.91app.com/
SHOP2000 http://www.shop2000.com.tw/
QDM http://qdm.com.tw/
meepShop http://meepshop.com/
EasyStore https://www.easystore.co/
Shopline https://shopline.tw/
Cyberbiz 架EZ https://www.cyberbiz.co/
mymy http://open.mymy.tw/
網路開店123 https://www.shop123.com.tw/index.php?
XAPP https://www.xapp.tw/
WACA Store https://www.waca.net/
FUNOO http://www.funoo.tw/
365SHOP https://www.365shop.com.tw/
KD8開店吧! https://www.boutir.com/
網站達人 http://www.oo.com.tw/
Boutir 掌舖 https://kd8shop.net/shop
Joo https://www.joo.com.tw/joo/
Oopen開開店(已併入 funoo.tw) http://www.oopen.com.tw/agent/oopen/
31APP.com https://31app.com/xmobile/
EZcart https://www.ezcart.com.tw/
I4U Web https://www.i4uweb.com
Topwebx https://www.topwebx.com/
尚青 http://www.shangching.com/
若森 MoshiMori https://www.moshimori.com/zh/homepage/
正月 http://www.januarytc.com/sa/index.aspx
YEESGO http://yeesgo.com/
新竹物流 https://scm.hct.com.tw/B2B/index.htm
WebDiY http://www.web-diy.com.tw/
SMARTSHOP http://www.smartshop.com.tw/
微酸番茄 http://www.openrwd.com.tw/
有塊地 http://www.haveafarm.com.tw/

如果您也是提供開店服務的平台,而我們尚未收錄到您的網站,請來信 告知我們,我們會盡快將您的網站收錄到上面的清單中。

新增了幾家,並重新調整排序(依最新的 Alexa 排名),感覺開店的需求依然很強勁,不過要投入的新同學,還是建議要審慎評估開店平台,因為幾乎每個月都會遇到有人詢問,從某某平台(不特定)搬家到 OpenCart 的可行性,偶爾還會遇到已一次繳交3年費用的 ….

若您的商店有一些特殊需求需要客制,建議不要太期待開店平台廠商會為您專案設計,有這種情形還是建議以 OpenCart 作為優先考量。

發佈於

OPENCATY 原版錯誤 的地方2

=====================================================================
OPENCART 關於EMAIL 通知信功能 功能 20171124完工
=====================================================================
可以設定EMAIL通知信位置的地方有2個
1.後台登入後=>系統管理=>商店設置->編輯=>商店->電子郵件
2.後台登入後=>系統管理=>商店設置->編輯=>郵件主機->附加其它通知信箱
商店->電子郵件:
前台網頁下方 聯絡我們 的留言功能 EMAIL 就寄到這裡
郵件主機->附加其它通知信箱:
當有通知店家信件時,將同時寄送至這些信箱,逗號分隔

 

問:網頁下方 聯絡我們 的留言功能 EMAIL 是 寄到哪
答:那個 是單純的 寄1封信功能 只會寄給 商店設定中=>電子郵件的位置

這個功能 原版 還有錯誤 就是 幹! 寄件人 收件人 都是 管理員 你不知道誰寄給你的
我以貼心寫了OCMOD做出3點修正
1.把寄件人 改為客戶,
2.同時寄信給 附加其它通知信箱 所有人
3.信件內容我加了2行字(加哪2行字,你裝好就知道了)

 

<?xml version=”1.0″ encoding=”UTF-8″?>

-<modification>

<name>前台-聯絡我們的留言原本只會寄一封EMAIL通知1個人改成寄給多個人</name>

<code>information_contact_alert_email</code>

<version>v1.0.0.1適用OPENCART2.3.X</version>

<link/>

<email>suffixbig@gmail.com</email>

<author>suffixbig</author>

<!–註解:修改檔案–>

 

-<file path=”catalog/controller/information/contact.php”>

 

-<operation>

 

-<search>

<![CDATA[$mail->setFrom($this->config->get(‘config_email’));]]>

</search>

 

-<add position=”replace”>

<![CDATA[ $mail->setFrom($this->request->post[’email’]);//寄件者 改成客人的 ]]>

</add>

</operation>

 

-<operation>

 

-<search>

<![CDATA[$mail->setText($this->request->post[‘enquiry’]);]]>

</search>

 

-<add position=”replace”>

<![CDATA[ $mail->setText($this->request->post[‘enquiry’].”\n\n客戶EMAIL:\n”.$this->request->post[’email’]); ]]>

</add>

</operation>

 

-<operation info=”Adding sitekey in controller”>

 

-<search>

<![CDATA[$mail->send();]]>

</search>

 

-<add position=”after”>

<![CDATA[ // 發送到其他附加電子郵件 的程式原碼 S $emails = explode(‘,’, $this->config->get(‘config_alert_email’)); foreach ($emails as $email) { if ($email && filter_var($email, FILTER_VALIDATE_EMAIL)) { $mail->setTo($email); $mail->send(); } } // 發送到其他附加電子郵件 的程式原碼 END ]]>

</add>

</operation>

</file>

</modification>

發佈於

OPENCATY 原版錯誤 的地方1-可以不輸入-驗證碼-就到下一個頁面

==============================
#OPENCATY 原版錯誤 的地方1
2.3.02 與 3.0.2.0
==============================
可以不輸入-驗證碼-就到下一個頁面

原因例如3個地方有驗證碼
登入 留言 評論
其中之一有輸入過-驗證碼-就可以不用再輸入驗證碼-按送出就到下一個頁面
設置方法
[系統管理] [商店管理] [選項設定] 最下方的 [驗證碼] 去設定。
可以在這幾個地方添加
註冊
非會員結帳
評論
退換貨
與我聯絡

正確修改建議
例如
1.在網站任意位置輸入過一次驗證碼就把所有有驗證碼的地方拿掉
2.每次都要驗證沒有例外
你認為應該如何修


session->data['gcapcha'])) {

$this->load->language('extension/captcha/google_captcha');//載入語言

$data['text_captcha'] = $this->language->get('text_captcha');

$data['entry_captcha'] = $this->language->get('entry_captcha');

if (isset($error['captcha'])) {
$data['error_captcha'] = $error['captcha'];
} else {
$data['error_captcha'] = '';
}

$data['site_key'] = $this->config->get('google_captcha_key');

$data['route'] = $this->request->get['route'];

return $this->load->view('extension/captcha/google_captcha', $data);

}//驗證通過一次後就不在檢查 END
}
//驗證用
public function validate() {
//驗證通過一次後就不在檢查
if (empty($this->session->data['gcapcha'])) {
$this->load->language('extension/captcha/google_captcha');
//3.0多這段
if (!isset($this->request->post['g-recaptcha-response'])) {
return $this->language->get('error_captcha');
}

$recaptcha = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret=' . urlencode($this->config->get('google_captcha_secret')) . '&response=' . $this->request->post['g-recaptcha-response'] . '&remoteip=' . $this->request->server['REMOTE_ADDR']);

$recaptcha = json_decode($recaptcha, true);

if ($recaptcha['success']) {
$this->session->data['gcapcha'] = true;
} else {
return $this->language->get('error_captcha');
}
}
}
}

發佈於

各位知道-訂單通知信可以不只寄給管理員-你要同時寄給10個人都可以

各位知道-訂單通知信可以不只寄給管理員-你要同時寄給10個人都可以

還有一個重點-這功能OPENCART v.2.3.0.2 原版是壞的-你怎樣按存檔設定值都不會儲存

============
#20171030
============
OPENCART v.2.3.0.2 原版就壞掉的功能
系統管理 => 商店設置 => 郵件設定 => 額外的通知信箱 存檔無用

在ntcart論壇 管理員 教大家

請直接開啟檔案 admin/view/template/setting/setting.tpl
找到 config_mail_alert_email 1166行
取代成 config_alert_email
儲存後重讀畫面設定試試。 以上方法OK
———————————–
如法泡製-以下是詳細修改過程
———————————–
20171031 研究 OPENCART 版本 2.3.0.2
系統管理 => 郵件設定 => 額外的通知信箱 存檔無用 正確修法
請直接開啟檔案 admin/view/template/setting/setting.tpl
1166行 找


打完收工

但 OPENCART 版本 3.0.2.0 這功能正常 的變數名稱 就完全不一樣了 不過 3.0.2.0 這功能也沒有壞就是了

OPENCART 版本 3.0.2.0
系統管理 => 郵件設定 => 額外的通知信箱 存檔OK
admin\view\template\setting\setting.twig

admin\controller\setting\setting.php
787行
if (isset($this->request->post[‘config_mail_alert_email’])) {
$data[‘config_mail_alert_email’] = $this->request->post[‘config_mail_alert_email’];
} else {
$data[‘config_mail_alert_email’] = $this->config->get(‘config_mail_alert_email’);
}
發送訂單信時
$emails = explode(‘,’, $this->config->get(‘config_mail_alert_email’));
foreach ($emails as $email) {
if ($email && filter_var($email, FILTER_VALIDATE_EMAIL)) {
$mail->setTo($email);
$mail->send();
}
}

發佈於

上哪找的到,天天寫OCMOD插件的人

上哪找的到,天天寫OCMOD插件的人
天天寫OCMOD插件的人在這裡
最近想到-其實大家看我FB-也都不知道 我到底在做什麼職業的,我是一位工程師,專業幫客人客製化修改購物車,把一套穩定經得起試驗的開源購物系統 修改的更在地化,而且我可以自己寫出OCMOD插件,這在台灣也沒幾個人寫OCMOD插件是很熟練的,我是天天寫, 這是我前一陣子的工作內容。
 
前台 商品圖大小調整 2017/10/13
後台 商品編輯器錯誤已修正 2017/10/13
前台 台新金流刷卡後-您請求的頁面不存在問題已修正 2017/10/13
後台 後台增加-管理員換密碼公功能 2017/10/13
前台 不用讓客戶看到-庫存狀況 2017/10/13
前台 網頁下方-拿掉-商品退換,品牌專區,購物禮券,利潤共享 2017/10/16
前台 一頁式結帳模組和 觀看購物車內容都拿掉-運費試算-優惠券-購物禮券 2017/10/16
前台 會員註冊-拿掉 *城市city *公司名 company 和傳真 拿掉姓氏 2017/10/17
後台 “多分出一個功能 對帳報表 和 統計報表
其中 對帳報表 預設只顯示成立訂單,但還可以查詢,失敗訂單” 2017/10/17
 
所謂 失敗訂單 就是使用者到付款刷卡頁面-就直接關掉瀏覽器的-這種狀況很多-大約占成功訂單的1/3左右
發佈於

跟大家分享一下MYSQL 語法 群組最新一筆資料如何取

跟大家分享一下MYSQL 語法 群組最新一筆資料如何取
〠▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧
於多筆重複資料中取得該重複群組中最新一筆資料
〠▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧
mySQL group by 默認取分組結果的第一條記錄
#有錯資料都是撈第1筆
SELECT `money_en`,`sell_price`,`buy_price`,`price`,`sub`,`datatype` FROM ( SELECT * FROM oc_money_price WHERE `money_en` =’ETH’ ORDER BY `datatype` DESC ) AS a GROUP BY `datatype`
#修正為-沒用
SELECT `money_en`,`sell_price`,`buy_price`,`price`,`sub`,`datatype` FROM ( SELECT * FROM oc_money_price WHERE `money_en` =’ETH’ ORDER BY `datatype`,`sno` DESC ) AS a GROUP BY `datatype`
#撈出資料還是不對,撈的事最日期最前的一筆oc_money_price
SELECT * FROM (SELECT * FROM `oc_money_price` ORDER BY `sno` DESC) `oc_money_price` GROUP BY datatype ORDER BY sno DESC 沒用-還是第1筆
#重新整理思緒
先搞到最大各類最大SNO號
select max(sno) as max_sno from oc_money_price group by datatype #這是對的
select `sell_price`,max(sno) as max_sno from oc_money_price group by datatype #但配對sell_price會錯
max_sno
5074
5068
5071
5076
——————————————-
#整理如下
select f.* from( select max(sno) as max_sno from oc_money_price group by datatype ) as x inner join oc_money_price as f on f.sno = x.max_sno ORDER BY f.datatype ASC
#但由於1家公司會有2種幣值所以要限制條件
select f.* from( select max(sno) as max_sno from oc_money_price WHERE `money_en` =’ETH’ group by datatype ) as x inner join oc_money_price as f on f.sno = x.max_sno ORDER BY f.datatype ASC
#註 這時候 ORDER BY f.datatype ASC 有沒有這個條件都不會提升速度
———————————————–
#員工最大產值的例子
———————————————–
pid:員工代碼
pyear:年度
pvalue:年度產值
 
SELECT a.pid,a.pyear,MAX(a.pvalue)
FROM mytable a JOIN
(SELECT pid, pvalue = MAX(pvalue)
FROM mytable GROUP BY pid) AS b ON
a.pid= b.pid AND a.pvalue= b.pvalue
GROUP BY a.pid,a.pyear
———————————————-
發佈於

即時匯率換算系統的實作-帶入金額-及時換算匯率-的程式

#即時匯率換算系統的實作
帶入金額-及時換算匯率-的程式
===
我今天試用hackmd線上協作筆記本, 原創發表了一篇討論文 #即時匯率換算系統的實作 有興趣的朋友 歡迎共筆 https://hackmd.io/s/rJNm8WSFb

 

#即時匯率換算系統的實作
帶入金額-及時換算匯率-的程式

###帶入金額-和貨幣代碼 轉換成顯示出含貨幣前置符號的金額

D:\wamp\www\o03\system\library\cart\currency.php 這支

$this->currency->format($result['tax'], $this->config->get('config_currency')),//帶入金額-和貨幣代碼 轉換成顯示出含貨幣前置符號的金額
$this->currency->format(金額, 貨幣代碼一般是TWD) 	//帶入金額-轉換成顯示出含貨幣前置符號的金額
	//$this->currency->format(金額, 貨幣代碼一般是TWD,匯率=不輸入就是用資料庫的,是否不顯示貨幣符號)
currency

使用Yahoo API 抓取即時匯率

http://myskilltree.blogspot.tw/2016/03/yahoo-api.html

您可以在 http://www.xe.com/iso4217.php 找到完整的 ISO 貨幣代碼及設定。

http://download.finance.yahoo.com/d/quotes.csv?e=.csv&f=c4l1&s=TWDUSD=x,TWDJPY=x  2總幣的兌換比例
http://download.finance.yahoo.com/d/quotes.csv?e=.json&f=c4l1&s=TWDUSD=x,TWDJPY=x

其中URL裡的f=c4l1是只取下兌換幣別(美金)的代碼與匯率
如果想取下更詳細的資料可以換成f=sl1d1t1,分別指定了代碼(含原始幣別跟對換幣別)、匯率、日期、時間這四個欄位

而s=TWDUSD=x ,其中TWD (新台幣) 為原始幣別 USD (美金)為兌換幣別,可以依需求自行更換,如果要查詢多筆資料則在後在後接續即可。

後台一天抓一次匯率的程式

D:\wamp\www\o03\admin\controller\common\dashboard.php

// Run currency update
if ($this->config->get('config_currency_auto')) {
    $this->load->model('localisation/currency');

    $this->model_localisation_currency->refresh(false);//執行後台一天抓一次匯率的程式
}
 

D:\wamp\www\o03\admin\model\localisation\currency.php

	//抓取匯率資料-入資料庫 參數=false 是自己國家以外,更新資料抓取時間大於1天的 ,參數=true自己國家以外資料全更新
	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 {
			//SELECT * FROM oc_currency WHERE code != 'TWD' AND date_modified < '2017-08-30 14:20:18' 自己國家以外,更新資料抓取時間大於1天的
			$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'))) . "'");
		}
		//組合文字把貨幣代碼加上=X
		foreach ($query->rows as $result) {
			$data[] = $this->config->get('config_currency') . $result['code'] . '=X';
		}
		$url='http://download.finance.yahoo.com/d/quotes.csv?s=' . implode(',', $data) . '&f=sl1&e=.csv';

		//去線上抓取資料
		$curl = curl_init();

		curl_setopt($curl, CURLOPT_URL,$url);
		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);
		/*
		送出去的網址
			http://download.finance.yahoo.com/d/quotes.csv?s=TWDCNY=X,TWDHKD=X,TWDGBP=X,TWDUSD=X,TWDEUR=X&f=sl1&e=.csv"TWDCNY=X",0.2180
		抓回來資料
			"TWDHKD=X",0.2587
			"TWDGBP=X",0.0256
			"TWDUSD=X",0.0331
			"TWDEUR=X",0.0279
		echo $url,"<br>\n";print($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) . "'");
			}
		}
		//更新我國匯率為1.00000
		$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');//刪除緩存檔案
	}
 

SELECT * FROM oc_currency WHERE code != ‘TWD’ AND date_modified < ‘2017-08-30 14:20:18’


#OPENCART 3.0 的匯率系統

1.它用curl抓取了yahoo的關於匯率的數據,
D:\wamp\www\o06\admin\model\localisation\currency.php 這只有首頁 才會讀取

	$curl = curl_init();
	//就是這裡了,看到木有
	curl_setopt($curl, CURLOPT_URL, 'http://download.finance.yahoo.com/d/quotes.csv?s=' . implode(',', $currency_data) . '&f=sl1&e=.json');
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

它用curl抓取了yahoo的關於匯率的數據,結合這2段代碼可以看出,其實它的功能就是打開這個頁面的時候自動更新數據庫中匯率數據。
到此問題找到原因了,那麼解決的方法總結一下:
可以關閉自動更新匯率(Dashboard>System>Setting>Your Store>edit>local>Auto Update Currency 選擇No)
系統管理=>商店管理.編輯=>本地化設定=>匯率自動更新
系統管理=>在地化管理=>幣別管理


-----------------------------------------------
詳細實驗
送出值是先抓SELECT * FROM `oc_currency` 的資料
-----------------------------------------------

Array
(
    [0] => TWDCNY=X
    [1] => CNYTWD=X
    [2] => TWDHKD=X
    [3] => HKDTWD=X
    [4] => TWDGBP=X
    [5] => GBPTWD=X
    [6] => TWDUSD=X
    [7] => USDTWD=X
    [8] => TWDEUR=X
    [9] => EURTWD=X
)
http://download.finance.yahoo.com/d/quotes.csv?s=&f=sl1&e=.json	目標 結果抓一個空值
http://download.finance.yahoo.com/d/quotes.csv?s=TWDCNY=X,CNYTWD=X,TWDHKD=X,HKDTWD=X,TWDGBP=X,GBPTWD=X,TWDUSD=X,USDTWD=X,TWDEUR=X,EURTWD=X&f=sl1&e=.json 正常抓資料
結論:慢的原因不是這個-這一天只會抓一次而且只在你登入後台首頁時抓

帶入金額-及時換算匯率-的程式

D:\wamp\www\o03\system\library\cart\currency.php 是這支

<?php
namespace Cart;
class Currency {
	private $currencies = array();

	public function __construct($registry) {
		$this->db = $registry->get('db');
		$this->language = $registry->get('language');

		$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "currency");//資料庫查出數據

		foreach ($query->rows as $result) {
			$this->currencies[$result['code']] = array(
				'currency_id'   => $result['currency_id'],//貨幣代號
				'title'         => $result['title'],//貨幣名稱
				'symbol_left'   => $result['symbol_left'],//貨幣符號金額左邊顯示(eg:$32、¥45、)
				'symbol_right'  => $result['symbol_right'],//貨幣符號金額右邊顯示
				'decimal_place' => $result['decimal_place'],//保留小數點後幾位有效數字
				'value'         => $result['value']//匯率
			);
		}
	}
	//帶入金額-轉換成顯示出含貨幣前置符號的金額$this->currency->format(金額, 貨幣代碼一般是TWD)
	//$this->currency->format(金額, 貨幣代碼一般是TWD,匯率=不輸入就是用資料庫的,是否不顯示貨幣符號)
	public function format($number, $currency, $value = '', $format = true) {
		$symbol_left = $this->currencies[$currency]['symbol_left'];
		$symbol_right = $this->currencies[$currency]['symbol_right'];
		$decimal_place = $this->currencies[$currency]['decimal_place'];

		if (!$value) {
			$value = $this->currencies[$currency]['value'];
		}
		//金額浮點數*匯率
		$amount = $value ? (float)$number * $value : (float)$number;
		
		$amount = round($amount, (int)$decimal_place);//金額取到小數幾位
		//是否不顯示貨幣符號
		if (!$format) {
			return $amount;
		}
		//以下顯示貨幣符號
		$string = '';

		if ($symbol_left) {
			$string .= $symbol_left;
		}
        //千進位加標點函式
		$string .= number_format($amount, (int)$decimal_place, $this->language->get('decimal_point'), $this->language->get('thousand_point'));

		if ($symbol_right) {
			$string .= $symbol_right;
		}

		return $string;//返回有貨幣符號的金額
	}

	public function convert($value, $from, $to) {
		if (isset($this->currencies[$from])) {
			$from = $this->currencies[$from]['value'];
		} else {
			$from = 1;
		}

		if (isset($this->currencies[$to])) {
			$to = $this->currencies[$to]['value'];
		} else {
			$to = 1;
		}

		return $value * ($to / $from);
	}
	//返回貨幣代號
	public function getId($currency) {
		if (isset($this->currencies[$currency])) {
			return $this->currencies[$currency]['currency_id'];
		} else {
			return 0;
		}
	}
	//返回貨幣符號
	public function getSymbolLeft($currency) {
		if (isset($this->currencies[$currency])) {
			return $this->currencies[$currency]['symbol_left'];
		} else {
			return '';
		}
	}

	public function getSymbolRight($currency) {
		if (isset($this->currencies[$currency])) {
			return $this->currencies[$currency]['symbol_right'];
		} else {
			return '';
		}
	}

	public function getDecimalPlace($currency) {
		if (isset($this->currencies[$currency])) {
			return $this->currencies[$currency]['decimal_place'];
		} else {
			return 0;
		}
	}

	public function getValue($currency) {
		if (isset($this->currencies[$currency])) {
			return $this->currencies[$currency]['value'];
		} else {
			return 0;
		}
	}
	//返回貨幣資料
	public function has($currency) {
		return isset($this->currencies[$currency]);
	}
}