上哪找的到,天天寫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]);
	}
}

 

 

無論你怎樣都改不掉後台下方版權訊息-因為根本不在程式中

———————————————————————————-

#如何改掉 OPENCART 下方版權訊息

—————————————–

D:\wamp\www\o03\admin\view\template\common\login.tpl <?php //echo $footer; ?>或修改D:\wamp\www\o03\admin\view\template\common\footer.tpl <footer id=”footer”> <br /></footer></div><!–/#container這個ID有強制最小高度–>但他還是會變多<footer id=”footer”> <br><p><a href=”http://www.opencart.idv.tw” target=”_blank” style=”color:#B4CD3C;”>OpenCart中文版</a></p></footer>

 

好樣的版權訊息不在任何程式中,而是在JS中

common.js

$(“#footer”).append(‘\x3c\x70\x3e\x3c\x61\x20\x68\x72\x65\x66\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x6f\x70\x65\x6e\x63\x61\x72\x74\x2e\x69\x64\x76\x2e\x74\x77\x22\x20\x74\x61\x72\x67\x65\x74\x3d\x22\x5f\x62\x6c\x61\x6e\x6b\x22\x20\x73\x74\x79\x6c\x65\x3d\x22\x63\x6f\x6c\x6f\x72\x3a\x23\x42\x34\x43\x44\x33\x43\x3b\x22\x3e\x4f\x70\x65\x6e\x43\x61\x72\x74\u4e2d\u6587\u7248\x3c\x2f\x61\x3e\x3c\x2f\x70\x3e’);

我查了過了主程式,VIEW檔,翻譯檔和資料庫都沒有-要不是我是全端 那我還真會找到放棄。

然後你把這行加個註解-就可以沒有版權訊息了

//$(“#footer”).append(‘\x3c\x70\x3e\x3c\x61\x20\x68\x72\x65\x66\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x6f\x70\x65\x6e\x63\x61\x72\x74\x2e\x69\x64\x76\x2e\x74\x77\x22\x20\x74\x61\x72\x67\x65\x74\x3d\x22\x5f\x62\x6c\x61\x6e\x6b\x22\x20\x73\x74\x79\x6c\x65\x3d\x22\x63\x6f\x6c\x6f\x72\x3a\x23\x42\x34\x43\x44\x33\x43\x3b\x22\x3e\x4f\x70\x65\x6e\x43\x61\x72\x74\u4e2d\u6587\u7248\x3c\x2f\x61\x3e\x3c\x2f\x70\x3e’);

我們工程師群,有人整理出-大家推薦參考配色的網站

我們工程師群,有人整理出-大家推薦參考配色的網站,
我把連結整理出來,提供大家參考.
material design colors
http://www.designskilz.com/colors/
日式色系
http://nipponcolors.com/#kamenozoki
colorhexa(相似度顏色)
http://www.colorhexa.com/
colorhunt(多組配色參考)
http://colorhunt.co/
colorme(單一顏色調配)
https://colorme.io/
cirs.cc
http://clrs.cc/
webcolourdata(多組配色參考)
http://webcolourdata.com/
colordrop(多組配色參考)
https://colordrop.io/
design-seeds(從圖片看配色系)
https://www.design-seeds.com/
palettable (推薦配色)
http://www.palettable.io/B8B063
grabient(漸層)
https://www.grabient.com/
webgradients(漸層)
https://webgradients.com/
colorlisa(多種風格配色)
http://www.colorlisa.com/
顏色轉換碼
https://www.ifreesite.com/color/color-code-converter.htm
色碼錶(轉換)
https://issisi.wordpress.com/…/%E8%89%B2%E7%A2%BC%E8%A1%A8…/

密碼要包含大小寫字母+數字+符號,提這個建議的人承認他錯了

密碼要包含大小寫字母+數字+符號,提這個建議的人剛剛承認他錯了

孟小白 ‧ 22小時前 ‧ 海外創投
這則趣聞是一堂產品經理課,產品越簡單越好。因為如果複雜的話,你不會知道客戶將會怎麼使用它;即便知道,可能是13年之後了。
密码要包含大小写字母+数字+符号,提这个建议的人刚刚承认他错了

Bill Burr在2003年為美國政府工作時,寫下了密碼安全領域的「聖經「:使用大寫字母、數字和非字母符號,原因是,複雜的密碼難以被猜到;另外,Burr也建議經常更換密碼。

所以,Burr是下列事情的始作俑者:迫使我們想出「Wohao5huA!」或者「P@55w0rd」這樣折磨打字人的密碼;迫使我們記住像「Uj3k@u90」這樣的系統分配密碼;根據公司IT部門的要求,90天,更換一次密碼。

現在,Burr承認,他的建議是錯的,這些辦法實際上不能提高密碼的安全性。相反,這些密碼組合會讓電腦系統更容易受到攻擊,因為用戶在創造了一個複雜密碼之後,會重複使用這些密碼,或者為了防止遺忘,會寫下來貼到電腦旁邊。而且,數字和符號的加入並沒有讓電腦更加免疫於黑客嘗試所有組合可能性的「強力(brute force)」攻擊。

定期更換密碼的建議也是錯誤的。因為密碼複雜,所以用戶只會更換其中一個字母或數字,例如把「Wohao5huA!」改成「Wohao5huA?」。這種更改對阻止黑客來說毫無意義。而且,定期更改密碼引起的不便比有限的密碼安全更糟糕。

現在,美國國家科學技術研究所的線上密碼指南已經更新,並提醒用戶避免傳統誤區:

l  不要重複使用密碼

l  結合大小寫字母設置的密碼沒有你想像的安全,沒有太大意義

l  更好的選擇是那些長但是易記的密碼,或者密碼短語:「yinglianxunguimo(營練訓鬼魔)」比「Wohao5huA!」這個密碼難破解的多。

l  另外,更安全的辦法是,使用雙重驗證,在登陸的時候最好得到短信的確認。

數億人在過去10多年間遵循了這個看似有道理的密碼原則,但是卻沒有考慮到行為因素的疊加。我從沒意識到密碼安全包括了密碼本身的安全,還有我們對待密碼的態度和使用方式。對於產品經理來說,這個經驗很重要:如果產品不夠簡單,那麼用戶可能根本不會按照預想的方式使用這個產品。

複雜的密碼本身有助於提高密碼安全性,但是複雜密碼導致的用戶習慣可能會讓賬戶變得更加不安全。Burr承認自己的建議錯了,並不是技術上認為複雜密碼不對,而更多是在用戶使用層面上的反思。

只是,對於普通用戶來說,我會想生活中還有多少我們完全不懂為什麼但是還依然遵照的原則。

OPENCART3.0繁體中文版-有用戶反映mysqli.php第7行有問題

由網友-Simon 2017/08/07發現問題

補充發現問題(HTTP500)
1.版面設計>版面排版
2.會員管理>自動欄位
發現錯誤的位置語法都是類似像下面這樣
mysqli::__construct(): (HY000/1045): Access denied for user ‘root’@’localhost’ (using password: YES) in D:\wamp\www\o06\system\library\db\mysqli.php on line 7
應該是你上傳的安裝檔這部分需要調整
(因為我們下載安裝後不一定是在D槽)

 

mysqli.php 這個檔案的第7行需要修正-我已修正

安裝檔重新打包下載位置-我放在 GOOGLE 雲端空間

https://drive.google.com/open?id=0B6bsecNk4PY2T2N0eWY4LUNjTmM

你媽BB蛋-OPENCART30-模組-啟用規則是誰訂的

#FB登入功能 只有 在2個資料庫有多資料 在2.0這樣就會出現在面版選單, 但是3.0卻不行-3.0說沒啟用 原因facebook_status 要改 module_facebook_status

然後功能啟用名又必須是module_$code_status 那不就變相規定模組名子就要叫module_$code //只好自己破除這個限制

#模組是否啟用 `oc_setting` 一個值 但外圍為何會讀取狀態錯誤
———————————–
SELECT * FROM `oc_setting` 裡面 啟用 名 module_facebook_status
———————————–
模組是否啟用 是從哪判斷
———————————–
———————————–
#功能擴充模組-真正-版面位置
———————————–
http://o06.test.com/admin/index.php?route=marketplace/extension&user_token=Afx8XdVY164nB85KibL6b78EM7ikK1w5
D:\wamp\www\o06\admin\view\template\marketplace\extension.twig #這只是外圍功能擴充模組 (17)#內容在這

{{ module.status }}

D:\wamp\www\o06\admin\view\template\extension\extension\module.twig
D:\wamp\www\o06\admin\controller\extension\extension\module.php
‘status’ => (isset($setting_info[‘status’]) && $setting_info[‘status’]) ? $this->language->get(‘text_enabled’) : $this->language->get(‘text_disabled’),
方法有2
方法一
‘status’ => $this->config->get(‘module_’ . $extension . ‘_status’) ? $this->language->get(‘text_enabled’) : $this->language->get(‘text_disabled’),
在 SELECT * FROM `oc_setting` WHERE code =’facebook’ 中
(179, 0, ‘facebook’, ‘facebook_status’, ‘1’, 0), 改成 (179, 0, ‘facebook’, ‘module_facebook_status’, ‘1’, 0)

方法2 讀資料庫來
$query = $this->db->query(“SELECT * FROM `” . DB_PREFIX . “module` WHERE `code` = ‘” . $this->db->escape($code) . “‘ ORDER BY `name`”);
SELECT * FROM `oc_module` 這裡有資料才是啟用
手動增加-這是其中一個方法
INSERT INTO `oc_module` (`module_id`, `name`, `code`, `setting`) VALUES(NULL, ‘FB登入&註冊’, ‘facebook’, ‘{“status”:”1″}’)
———————————–
#FB登入功能 只有 在2個資料庫有多資料 在2.0這樣就會出現在面版選單, 但是3.0卻不行-3.0說沒啟用 原因facebook_status 要改 module_facebook_status
———————————–
SELECT * FROM `oc_extension` WHERE code =’facebook’ 模塊擴展
INSERT INTO `oc_extension` (`extension_id`, `type`, `code`) VALUES
(29, ‘module’, ‘facebook’);
————————————-
SELECT * FROM `oc_setting` WHERE code =’facebook’
INSERT INTO `oc_setting` (`setting_id`, `store_id`, `code`, `key`, `value`, `serialized`) VALUES
(177, 0, ‘facebook’, ‘facebook_apikey’, ‘12345’, 0),
(178, 0, ‘facebook’, ‘facebook_apisecret’, ‘12345’, 0),
(179, 0, ‘facebook’, ‘facebook_status’, ‘1’, 0),
(180, 0, ‘facebook’, ‘facebook_button_1’, ”, 0);

目錄 catalog/controller/facebook 不允許被寫入!
———————————–
#FB登入功能 只有 在2個資料庫有多資料 在2.0這樣就會出現在面版選單, 但是3.0卻不行-3.0說沒啟用 原因facebook_status 要改 module_facebook_status
———————————–
找$this->model_setting_setting->editSetting(‘facebook’, $this->request->post);
改$this->editSetting2->(‘facebook’, $this->request->post);//採用自寫方式入資料
//自寫設定存檔-因為原版限制欄位值開頭一定要和$code相同-然後功能啟用名又必須是module_$code_status 那不就變相規定模組名子就要叫module_$code
//只好自己破除這個限制
public function editSetting2($code, $data, $store_id = 0) {
$this->db->query(“DELETE FROM `” . DB_PREFIX . “setting` WHERE store_id = ‘” . (int)$store_id . “‘ AND `code` = ‘” . $this->db->escape($code) . “‘”);
foreach ($data as $key => $value) {
//if (substr($key, 0, strlen($code)) == $code) {
if (!is_array($value)) {
$this->db->query(“INSERT INTO ” . DB_PREFIX . “setting SET store_id = ‘” . (int)$store_id . “‘, `code` = ‘” . $this->db->escape($code) . “‘, `key` = ‘” . $this->db->escape($key) . “‘, `value` = ‘” . $this->db->escape($value) . “‘”);
} else {
$this->db->query(“INSERT INTO ” . DB_PREFIX . “setting SET store_id = ‘” . (int)$store_id . “‘, `code` = ‘” . $this->db->escape($code) . “‘, `key` = ‘” . $this->db->escape($key) . “‘, `value` = ‘” . $this->db->escape(json_encode($value, true)) . “‘, serialized = ‘1’”);
}
//}
}
}
SELECT * FROM `oc_setting` WHERE code LIKE ‘%facebook%’

修改值的方法
public function editSettingValue($code = ”, $key = ”, $value = ”, $store_id = 0) {

OPENCART 2.3插件 改3.0要改那些地方

其中之一
———————————–
#OPENCART 3.0 版 2.0版差別
———————————–
找$this->load->model(‘extension/module’);    改=> $this->load->model(‘setting/module’);
———————————–
#OPENCART 2.3 版 用法
———————————–
$this->load->model(‘extension/module’);
if (($this->request->server[‘REQUEST_METHOD’] == ‘POST’) && $this->validate()) {
    if (!isset($this->request->get[‘module_id’])) {
        $this->model_extension_module->addModule(‘html’, $this->request->post);
    } else {
        $this->model_extension_module->editModule($this->request->get[‘module_id’], $this->request->post);
    }
———————————–
#OPENCART 3.0 版 用法
———————————–
$this->load->model(‘setting/module’);
if (($this->request->server[‘REQUEST_METHOD’] == ‘POST’) && $this->validate()) {
    if (!isset($this->request->get[‘module_id’])) {
        $this->model_setting_module->addModule(‘html’, $this->request->post);
    } else {
        $this->model_setting_module->editModule($this->request->get[‘module_id’], $this->request->post);
    }
———————————–
#相關語法3句沒變
———————————–
    $this->model_extension_module->addModule(‘html’, $this->request->post);
    $this->model_extension_module->editModule($this->request->get[‘module_id’], $this->request->post);
    $data[‘googlelogin’] = $this->model_extension_module->getModule($module_id);