1. 程式人生 > >微擎的二次開發使用講解

微擎的二次開發使用講解

第一節: 公眾號砸金蛋應用和笑話大全小程式介紹

笑話小程式簡單介面

在這裡插入圖片描述

公眾號砸金蛋營銷應用功能介紹
1 使用者只能在微信裡面開啟
2 必須先關注公眾號才能才加活動 (發模板)
3 同一個使用者和同一個手機號碼只能參加一次
4 抽到紅包發生獎金給使用者,併發送模板訊息給使用者,使用者可以點選再次回到指定頁面
5 可以設定總金額
6 可以設定抽獎概率

2 微擎介紹/安裝

1 框架介紹
2 應用市場介紹
3 優勢介紹

微擎安裝

學習版(破解版) 【比較穩定】

3 微擎新增公眾號
目標 :解決在微擎系統新增繫結公眾號

準備材料: 微信公眾號(演示用微信服務號)

步驟: 配置微擎 配置微信公眾號

檢驗是否配置成功

4 微擎外掛模組安裝(安裝過程採坑排雷)

課程目標
1 瞭解線上安裝應用

2 線下模組安裝實操 (一種別人的模組 ,一種是我們自己開發的模組)

3 安裝遇到的坑處理

現象 微擎/微贊安裝模組時提示:此模組已設定版權保護,您只能通過雲平臺來安裝

解決辦法
修改開啟 \framework\model\cloud.mod.php 檔案,
有三處需要修改

1、註釋掉第23、24、25行程式碼(位於函式cloud_prepare中)

//if(empty(W[setting][site][key])empty(_W['setting']['site']['key']) || empty(

_W[‘setting’][‘site’][‘token’])) { // return error(’-1’, “您的程式需要在微贊雲服務平臺註冊你的站點資料, 來接入雲平臺服務後才能使用相應功能.”); //}

2、註釋掉第 36、37、38行程式碼(位於函式 cloud_m_prepare 中)

//if ($dat[‘content’] == ‘install-module-protect’) { // return error(’-1’, ‘此模組已設定版權保護,您只能通過雲平臺來安裝。’); //}

3、註釋掉第151、152、153行程式碼(位於函式 cloud_t_prepare 中)

//if ($dat[‘content’] == ‘install-theme-protect’) { // return error(’-1’, ‘此模板已設定版權保護,您只能通過雲平臺來安裝。’); //}

注:不要用記事本開啟檔案編輯,用程式編輯器編輯,如EmEditor,Editplus,Sublime Text等,或者開發IDE等

5 微擎如何在開發者中心建立自己的開發外掛模組

目標
1 成為微擎開發者 (花300元)
2 建立自己的外掛模組詳解
A 外掛命名規則 (且只能以字母開頭,格式如:aa1_bb1或aa_bb)

3 安裝自己的外掛模組

6 微擎模組工作流程

目標
1 瞭解外掛模組安裝流程

2 瞭解外掛執行過程

外掛前臺
域名/app/index.php?i=2&c=entry&do=index&m=gold_eggs
do=index ===>site.php () 寫前臺方法 doMobileXXX

外掛後臺 寫後臺方法 doWebXXX
域名/web/index.php?c=site&a=entry&do=Confs&m=gold_eggs

do=Confs==> site.php ()

MVC

參考內容一

1、模組的程式碼複製
這個就不用多說了吧,當然需要把相應的addons資料夾裡的模組複製到自己系統的目錄裡,不然不要做以下的事情了

2、資料庫表結構修改
程式碼複製過來,如果有相應的xml安裝包或者install.php檔案,可以直接安裝,但是我們這裡講的是沒有,那隻能把原來要複製的表結構記錄複製過來,插入或更新到自己的伺服器上,這樣就可以正常的運行了,需要處理的表結構參見如下表:

ims_modules 模組表,一個模組應該有一個記錄
ims_modules_bindings ,模組後臺選單表記錄,一個模組有N多記錄
ims_uni_account_modules,公眾號應該有的許可權及配置資訊,如果沒有可以忽略

3、後臺更改許可權
做過以上兩步後,後臺就能在系統-> 模組列表顯示新增的模組了,如果還沒有顯示自己檢查以上兩步驟,這樣修改套餐對應的套餐裡的模組功能,使其公眾號裡的套餐具備新加入的模組功能,儲存配置

4、使用手動新增的模組
儲存配置後,進入相應的微信公眾賬號,進入模組裡,查詢相應功能,一般可以正常使用

參考內容二

web目錄下的index.php 包含了require ‘…/framework/bootstrap.inc.php’;
在bootstrap.inc.php的最後讀取controller,action,do

$controller = $_GPC[‘c’];
$action = $_GPC[‘a’];
$do = $_GPC[‘do’];

index.php繼續往下走,require _forward($controller, action);functionforward(action); function _forward(c, $a) {
$file = IA_ROOT . ‘/web/source/’ . $c . ‘/’ . $a . ‘.ctrl.php’;
return $file;
}
包含了 /web/source/site/entry.ctrl.php

在entry.ctrl.php裡:
從ims_modules_bindings表裡讀取eid=6的記錄到$entry,然後根據記錄載入模組,
site=WeUtility::createModuleSite(site = WeUtility::createModuleSite(entry[‘module’]);
define(‘IN_MODULE’, $entry[‘module’]);

method=doWeb.ucfirst(method = 'doWeb' . ucfirst(entry[‘do’]);
exit(site>site->method());

例如$entry[‘do’]是stores,那實際呼叫的方法是模組目錄下site.php裡的doWebStores

7 微擎常量變數/路由

目標
1 瞭解 微擎的預定義常量
2 瞭解 微擎的比較常用的變數

3 瞭解微擎路由

4 使用微擎建立路由方法建立路由

URL

插播一條絕招
開啟微擎的 開發者模式 .

學習目標
1 $this->template 的作用 類似smarty 模板引擎

這句話include $this->template(‘index’); 如果是寫在模組的前臺方法 function doMobileIndex(){}

Addons/gold_eggs/template/mobile/index.html

這句話include $this->template(‘index’); 如果是寫在模組的後臺方法 function doWebConfs(){}

Addons/gold_eggs/template/index.html

2 輸出變數

3 迴圈

4 判斷
5 PHP程式碼

6 建立url

7 呼叫模板

9 微擎資料庫函式
官方文件http://s.we7.cc/index.php?c=wiki&do=view&id=1&list=173
目標
1 建立一個微擎要求的命名規則的資料表
Ims_模組名字_表名
Ims_gold_eggs_orders

2 微擎資料庫操作函式(增刪改查)


int | boolean pdo_insert($tablename, $data = array(), $replace = false)


int | boolean pdo_delete($tablename, $condition = array(), $glue = ‘AND’)


array | boolean pdo_update($tablename, $data = array(), $condition, $glue = ‘AND’)


查單條
array | boolean pdo_get($tablename, $condition = array(), $fields = array());

查多條
array | boolean pdo_getall($tablename, $condition = array(), $fields = array(), keyfield=,keyfield = '',orderby = array(), $limit = array()) {

查多表
SELECT ims_little_pay_category . * , ims_little_pay_article . *
FROM ims_little_pay_article
INNER JOIN ims_little_pay_category ON ims_little_pay_article.cid = ims_little_pay_category.id

$sql=“select o.* , m.realname as realname,m.phone as phone,m.nickname as nickname ,a.title as title from " . tablename(“domall_zc_order”) . " o” . " left join " . tablename(“domall_zc_member”) . " m on m.openid=o.openid " . " left join " . tablename(“domall_zc_goods”) . " a on a.id=o.goods_id “.” $where ORDER BY o.ordersn DESC ";
1
-查詢

orderse=pdofetchall(orderse=pdo_fetchall(sql,$params);

資料基本操作
微擎系統資料庫操作使用 PDO 相容方式,以引數繫結的形式進行查詢操作。
系統已對 PDO 相容性進行檢測及封裝。下面具體說明一下資料庫的幾種基本操作方法。

tablename()
為了防止微擎系統的表與其它系統命名衝突,安裝微擎時均會指定一個表字首,在寫SQL語句時,需要將表名稱附加上表字首。可以使用 tablename() 函式。

$sql = "SELECT * FROM ".tablename(‘users’);
echo $sql;

//輸出 SELECT * FROM ims_users
範圍條件操作
在微擎20160601以後的版本中,增加了pdo_get、pdo_getall、pdo_getcolumn、pdo_getslice、pdo_insert、pdo_update、pdo_delete的範圍條件的支援,具體支援的範圍操作符如下:

array(’>’, ‘<’, ‘<>’, ‘!=’, ‘>=’, ‘<=’, ‘NOT IN’, ‘not in’, ‘+=’, ‘-=’);
欄位名與操作符組成條件陣列的鍵名,欄位名與操作符中間間隔一個空格,具體使用方法如下:

//獲取acid大於269的公眾號
$account = pdo_get(‘account’, array(‘acid >’ => ‘269’));

//增加一次使用者的錯誤登入次數,兩次變為2即可
pdo_update(‘users_failed_login’, array(‘count +=’ => 1), array(‘username’ => ‘mizhou’));
查詢
查詢是資料庫操作中使用最頻繁的操作,微擎系統封裝了一些函式適用於不同的場景,以下逐個說明

pdo_get
根據條件(AND連線)到指定的表中獲取一條記錄

$tablename 引數指定要查詢的資料表名,此處傳入的表名不要使用tablename()函式
$condition 引數指定查詢的條件,以是 AND 連線,支援大於,小於等範圍條件。具體使用檢視本章節第二段範圍條件操作
$fields 引數指定查詢返回的欄位列表
limitarraybooleanpdoget(limit 引數指定查詢表中獲取一條記錄 array | boolean pdo_get(tablename, $condition = array(), $fields = array());
示例:

//根據uid獲取使用者的使用者名稱和使用者Id資訊
//生成的SQL等同於:SELECT username, uid FROM ims_users WHERE uid = ‘1’ LIMIT 1
$user = pdo_get(‘users’, array(‘uid’ => 1), array(‘username’, ‘uid’));

//生成的SQL等同於:SELECT username FROM ims_users WHERE username = ‘mizhou’ AND status = ‘1’ LIMIT 1
$user = pdo_get(‘users’, array(‘username’ => ‘mizhou’, ‘status’ => 1), array(‘username’));
pdo_getcolumn
根據條件(AND連線)到指定的表中獲取一條記錄的指定欄位

$tablename 引數指定要查詢的資料表名,此處傳入的表名不要使用tablename()函式
$condition 引數指定查詢的條件,以是 AND 連線,支援大於,小於等範圍條件.。具體使用檢視本章節第二段範圍條件操作
$field 引數指定查詢返回的欄位
limitstringintpdogetcolumn(limit 引數指定查詢表中獲取一條記錄 string | int pdo_getcolumn(tablename, $condition = array(), $field, $limit=1);
示例:

//根據uid獲取使用者的使用者名稱
//生成的SQL等同於:SELECT username FROM ims_users WHERE uid = ‘1’ LIMIT 1
$username = pdo_getcolumn(‘users’, array(‘uid’ => 1), ‘username’,1);
pdo_getall
根據條件(AND連線)到指定的表中獲取全部記錄

$condition 引數指定查詢的條件,以是 AND 連線,支援大於,小於等範圍條件.。具體使用檢視本章節第二段範圍條件操作
$keyfield 引數傳入一個已存在的欄位名稱,結果陣列鍵值就為該欄位,否則為自然排序
$orderby 引數指定查詢結果按哪個欄位排序
limitLIMITarray(start,end)2,3pdogetarraybooleanpdogetall(limit 引數指定查詢語句的LIMIT值,array(start, end) 或是直接傳入範圍 2,3 其它引數同pdo_get函式 array | boolean pdo_getall(tablename, $condition = array(), $fields = array(), keyfield=,keyfield = &#x27;&#x27;,orderby = array(), $limit = array()) {
示例:

//獲取全部啟用的使用者
//生成的SQL等同於:SELECT * FROM ims_users WHERE status = ‘1’
$user = pdo_getall(‘users’, array(‘status’ => 1));
//獲取從第一條資料開始的10條啟用的使用者
//生成的SQL等同於:SELECT * FROM ims_users WHERE status =’ 2’ ORDER BY uid,groupid LIMIT 0, 10
$user = pdo_getall(‘users’, array(‘status’ => 1), array() , ‘’ , array(‘uid’,‘groupid’) , array(1,10));

$user1 = pdo_getall(‘users’, array(‘status’ => 1), array() , ‘’ , ‘uid DESC’ , array(1,10));
pdo_getslice
根據條件(AND連線)到指定的表中獲取某個區間的記錄,此函式和 pdo_getall 的區別是可以指定limit 值

$condition 引數指定查詢的條件,以是 AND 連線,支援大於,小於等範圍條件.。具體使用檢視本章節第二段範圍條件操作
$limit 引數指定查詢語句的LIMIT值,array(start, end) 或是直接傳入範圍 2,3
$total 引數指定查詢結果的總條數,方便進行分頁操作
orderbyarraybooleanpdogetslice(orderby 引數指定查詢結果按哪個欄位排序 array | boolean pdo_getslice(tablename, $condition = array(), KaTeX parse error: Expected 'EOF', got '&' at position 18: …mit = array(), &̲total = null, $fields = array(), $keyfield = ‘’, $orderby = array())
示例:

//獲取從第一條資料開始的10條啟用的使用者
//生成的SQL等同於$user = SELECT * FROM ims_users WHERE status =‘2’ ORDER BY uid,groupid LIMIT 0, 10
$user = pdo_getslice(‘users’, array(‘status’ => 2), array(1,10) , $total , array() , ‘’ , array(‘uid’,‘groupid’));
#####pdo_fetch
根據SQL語句,查詢一條記錄

$sql 引數指定要返回記錄集的SQL語句
paramsSQLSQL使SQL使arraybooleanpdofetch(params 引數指定為SQL語句中的引數繫結傳值,防止SQL注入 需要注意的是使用引數繫結時,SQL語中等號後不需要使用引號,傳入的值必須與繫結的名稱一致 array | boolean pdo_fetch(sql, $params = array());
示例:

// :uid 是引數的一個佔位符,沒有使用引號,傳入的第二個引數中要與SQL中的佔位名稱相同
$user = pdo_fetch(“SELECT username, uid FROM “.tablename(‘users’).” WHERE uid = :uid LIMIT 1”, array(’:uid’ => 1));
// LIKE 佔位的使用方法
$user = pdo_fetch(“SELECT * FROM “.tablename(‘users’).” WHERE username LIKE :username”, array(’:username’ => ‘%mizhou%’));
pdo_fetchcolumn
根據SQL語句,查詢第一條記錄的第N列的值,此語句與 pdo_fetch 使用相同,只是此函式返回的不是一個數組而是一個字串

columnstringbooleanpdofetchcolumn(column 引數指定返回記錄集的第幾列資料 string | boolean pdo_fetchcolumn(sql, $params = array(), $column = 0)
示例:

// 獲取使用者的總數,返回的值是一個數字
$user_total = pdo_fetchcolumn("SELECT COUNT(*) FROM ".tablename(‘users’));
pdo_fetchall
根據SQL語句,查詢全部記錄,使用方法與pdo_fetch相同

array | boolean pdo_fetchall($sql, $params = array(), $keyfield = ‘’)
示例:

// 需要注意的是,返回的陣列的鍵值為使用者的uid
$user = pdo_fetchall("SELECT username, uid FROM ".tablename(‘users’), array(), ‘uid’);
####變更
以下說明插入,更新,刪除操作的幾個函式。

pdo_insert
對指定資料表插入一條新記錄

$tablename 引數指定要插入記錄的資料表名,此處傳入的表名不要使用tablename()函式
$data 引數指定要插入的記錄,格式為與資料表字段對應的關聯陣列
replace使INSERTREPLACE(update)intbooleanpdoinsert(replace 引數指定插入方式使用 INSERT 語句或是 REPLACE 語句(查詢到主鍵相同的資料選擇update) int | boolean pdo_insert(tablename, $data = array(), $replace = false)
示例:

//新增一條使用者記錄,並判斷是否成功
$user_data = array(
‘username’ => ‘mizhou1’,
‘status’ => ‘1’,
);
$result = pdo_insert(‘users’, userdata);if(!empty(user_data); if (!empty(result)) {
$uid = pdo_insertid();
message(‘新增使用者成功,UID為’ . $uid);
}
pdo_update
更新指定的資料表的記錄

$glue 引數指定前面