首先是介绍一下微擎的框架,微擎是一个基于微信开发的框架,可以开发微信H5和微信小程序,但微擎微信小程序的框架已经很长时间没有更新了,用于微擎开发的h5还怪多的,在微擎商城中可以购买使用别人开发好的模块有名气的如人人商城,之前公司是使用微擎框架做H5的,项目是一些简单的单页面H5,所有了解一些微擎的使用,下面我就来详细的说说微擎的使用
这是安装模块manifest需要注意的东西
这是安装微擎的基本目录,addons中是存放模块目录,可以这么说,在addons中每一个文件就是一个模块,在微擎框架中分为app端和web端,app端就是正常访问模块的链接,web呢是访问微擎后台的链接,framework目录也是比较重要的目录,需要使用的class也是在该目录中的class目录中,
这是appons/模块 下面的正常目录,site.php和manifest.xml是必不可少的文件,site是相当于路由吧,manifest是安装模块时候的文件,如果没有manifest文件微擎是无法安装该板块的,当然没有安装该模块是访问不到该模块的 inc可以在有site的条件下充当路由吧,比如你访问到一个模块的index方法,如果site中没有定义该方法可以到inc目录下找该方法无论在site或者inc目录下都有分前后台区别
这是site中定义方法
inc下分别前后台的是不同目录
里面php文件名称就是不同的方法,都要加.inc的尾缀
通过该url的形式访问到该模块
安装模块和访问模块就这样的可以了,下面是具体功能、
获取用户信息
在用户没有关注公众号的情况下,不能使用$_W['fans']的数据,这是关注公众号的用户才有这数据,那么用户没有关注公众号,但又需要用户数据怎么办呢
mc_oauth_userinfo(); //进入h5 授权获取用户信息
之后在获取$_W['fans']就会有用户信息,需要注意的是,进入h5先判断有没有用户信息没有在授权获取用户信息,如果是关注了的用户不需要授权也是可以获取到用户信息的,如果不做判断可能用户体验较差
生成url
$this->creatrMobileUrl('index'); //前台地址 index方法
路由的前台地址
$this->createWebUrl('confs'); //后台地址 confs方法
路由的后台地址
在视图中如需要发送ajax请求的时候url可以这么写
{php echo $this->creatrMobileUrl('index')}
模板调用
{template '路径/模板名称'} //引入模板 相对路径
{template 'common/模板名称'} //这是调用公共模板 建议使用
公共模板在那呢
微擎视图中使用功能
$verify -> imgcode();//验证码 checkcaptcha($code) //验证//验证码 前端显示,PHP文件中验证只需要 checkcaptcha($code) 返回值 bool
解:用法是单独提供一个路由方法给验证码,然后在前端页面中获取该路由的方法显示验证码,后端使用checkcaptcha($code) 验证
静态文件目录 相当于页面下面addons/模块名/resource/
define("S_URL", "/addons/{$_GET['m']}/resource/"); //在site中定义
模板中输出变量
{$name} //输出变量
循环
{loop 数组 $row}
//单个数据为$row{/loop}
判断
{if 条件}
//true{else}
//false{/if}
写php代码
{php $变量=$变量+1;} //混编php //实例php混编
单文件上传
{php echo tpl_form_field_image('name值');} //单文件上传
数据库
增删改查
注意 pdo_insert/pdo_delete/ pdo_update/pdo_get/pdo_getall方法表名不需要前面的 ims_
tablename() 这个方法是加表前缀的(需要的加不需要的不加)
pdo_insert('表名', 数据数组, $replace=false[是否替换]) //增 第三个参数 没有就添加 有就替换pdo_delete('表名', 条件数组, $glue='AND/OR') //删 第三个参数 条件条件 与 或pdo_update('表名' ,数据数组, 条件数组, $glue='AND/OR') //改 第三个参数 条件条件 与 或pdo_get('表名' ,条件数组 ,字段数组); //查一条pdo_getall('表名', 条件数组 , 字段数组,) //查多条
pdo_fetchcolumn("select count(*) from ".表名." where iswin = :iswin ",array('iswin'=>1));
//查询满足条件的个数
pdo_query('sql') //执行一条非查询语句pdo_query("DELETE FROM".tablename('表名')."WHERE 条件字段=:站位符",array(':前面的站位符'=>2))
数据分页
$list = pdo_fetchall('SELECT * FROM ' . tablename('hbyh_qrj_gift') . ' LIMIT ' . (页数 - 1) * 每页多少条 . ', ' . 每页多少条); //分页数据
在模板中循环遍历数据 {$page} 显示现在页数
链式查询
查询用户表中的前十条男性的用户数据
实例:
$query = load()->object('query');
$row = $query->from('表名')->where('条件', '1')->orderby('字段', 'desc倒叙')->limit(10 条数)->getall();
左关联的表
实例:
$query = load()->object('query');
$row = $query->from('users', 'u')->leftjoin('users_profile', 'b')->on('u.id', 'b.uid')->where('u.id', '525')->get();
//来自 users 左链接 users u.id=b.uid 条件是u.id=525 的一条记录
链表查询
注意 原生的sql 操作需要加表的前缀
pdo_fetchall('SELECT * FROM ' . tablename($this->table_activity) . ' as i inner join '. tablename($this->table_actclass) .' as c on i.class_id = c.id WHERE i.id=:id', array(':id'=> $id));
//查询来自 表i 内连接 表c on关联条件 i的class_id=c的id 条件(i的id=占位符)pdo_fetch($sql) // 根据SQL语句,查询一条记录pdo_fetchall($sql); // 查询全部记录
微擎函数
公共函数
TIMESTAMP 常量当前时间戳 (秒)
istripslashes($var) //去除字符串或者数组中的转义符 (\)
字符串/数组
ihtmlspecialchars ($var) //转义字符串或数组中的的HTML,例如将 “php” 转化为 "PHP"
字符串/数组
isetcookie($key, $value, $expire = 0, $httponly = false) //cookie 操作
cookie名称 cookie值 过去时间 是否允许Javascript读取防止xss攻击 建议登录等信息开启此项
token() //提交表单时的来源校验码 与 checksubmit() 函数配置使用,提交表单时的来源校验码
// 与 token() 一样
checksubmit($var = 'submit', $allowget = false) // 验证一下表单提交,表单中必须带有token
提交表单按钮的名称 是否验证一个get请求
random($length, $numeric = FALSE) //获取一个随机数
要获取随机数的长度 是否是纯数字随机数
checkcaptcha($code) //验证用户提交的验证码是否正确
用户填写的验证码
tablename($tablename) //微擎所有数据表均有前缀,此函数就是返回加表前缀的表名
数据表名
array_elements($keys, $src) //从一个数组中取得若干元素
需要筛选的键名列表(数组) 进行筛选的数组
range_limit($num, $downline, $upline, $returnNear = true) //判断给定参数是否位于区间内或将参数转换为区间内的数
检测的数 区间的最小值 区间的最大值 为true时小于区间则返回最小值,大于区间则返回最大值,否则返回本身的值
ijson_encode($value, $options = 0) //转换json格式
需要转化的字符串/数组 此值为 JSON_UNESCAPED_UNICODE 时,则不转义中文
iserializer($str) //序列化格式
需要序列化的字符串或数组
is_serialized($str, $strict = TRUE) //判断是否序列化
需要检测的数据 是否为严格模式
iunserializer($str) //反序列化格式
需要反序列化的字符串或数组
is_base64($str) //判断是否为base64加密的字符串
需要检测的数据
tomedia($src) //转化地址?
需要进行转换的路径 mages/noavatar_middle.gif
referer($default = '') //获取引用页的地址
默认引用页地址
strexists($string, $find) //判断字符串是否包含字串
字符串 需要查找的字符串
cutstr($string, $length, $havedot = false, $charset = '') //截取字符串
字符串 截取的长度 超长字符串结尾是否加省略号 指定编码
istrlen($string, $charset = '') //忽略字符编码获取字符串的个数,中文英文皆为1个字符
字符串 指定编码
authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) //字符串加密或解密
字符串 操作DECODE或ENCODE 秘钥 过期时间
isimplexml_load_string($string, $class_name = 'SimpleXMLElement', $options = 0, $ns = '', $is_prefix = false) //将一个 xml 字符串转化为 xml 对象
xml字符串 'impleXMLElement' LIBXML_NOCDATA
parse_path($path) //过滤路径中可能包含的非法字符,建议通过get或是post传递的路径皆用此函数过滤
路径
http 函数
http函数使用时load()->func('communication') 引用
ihttp_request($url, $post = '', $extra = array(), $timeout = 60) //模拟http请求
要获取内容的url 数据(数组) 请求附加值 超时时间 //详情看手册
ihttp_get($url) //GET 请求方法
要获取内容的URL,必须是以http或是https开头
ihttp_post($url, $data) //POST 请求方法
要获取内容的url 数据(数组)
ihttp_email($to, $subject, $body, $global = false) //发送邮件Email
收件人邮箱 邮件主题 邮件内容数组格式 是否使用系统邮箱配置信息 //具体手册
操作文件函数
操作文件时候 引用 load()->func('file')
file_is_image($url) //检测是否为图像文件 路径
//自我感觉 文件操作函数不是很常用 //需要的话直接看 http://s.w7.cc/index.php?c=wiki&do=view&id=1&list=249
全局变量
微擎有 二个全局变量 $_W $ _GPC
$_GPC
全局请求变量, 获取 $GET, $POST, $_COOKIES 中的变量
$_W
$_W 中 是系统中最为重要的全局变量,微擎系统中很多常用的数据都存储在这个变量之中
这边记录一些常用的 $_W 里的用法
$_W[‘timestamp’] //当前时刻的时间戳
$_W[‘clientip’] //当前客户端ip
$_W[‘siteroot’] //网站的跟路径
$_W[‘isajax’] //是否是ajax请求
$_W[‘ispost’] //是否是post请求
$_W[‘ishttps’] //是否是https协议Web 端可见
$_W[‘uid’] //当前登录的操作用户 uid
$_W[‘username’] //当前操作用户名称
$_W[‘user’] //当前操作用户信息App 端可见
$_W[‘member’] //当前粉丝用户信息
$_W[‘member’][‘uid’] //当前粉丝用户 uid
$_W[‘openid’] //当前粉丝用户标识
$_W[‘fans’] //当前粉丝用户信息 但在使用$_W['fans']时,没有关注的用户是无法获取到$_W['fans']里的信息的
缓存机制
cache_write(string $key, mixed $data) //按照指定的键名存储缓存数据 参数指定要存储缓存数据的键名,键名必须保证是唯一 数据的内容,可以为字符串,数组等
cache_load(string $key) //读取指定键名缓存数据 键名
cache_delete(string $key) //删除指定键名的缓存数据 键名
cache_clean() //清除所有缓存
文件加载器
load()->func(string $string) //加载系统公共函数// framework/function/logging.func.php load()->func('logging');
load()->classs(string $string) //加载系统公共类 可以自己封装class// framework/class/account.class.php load()->classs('account');
对接微信的sdk
文档中需要 一些复杂的数据 如 appid 什么的,
微擎封装的
$account_api=WeAccount::create();
$jssdk=$account_api->getJssdkConfig(); //这样$jssdk中就有了我们需要 链接jssdk的所有数据include $this->tempalte('index') //模板中可以直接使用
微擎的语音信息响应
在微擎中配置 非关键字响应
触发模块
触发模块后site同级文件中,processor.php 文件,如
class Viva_csModuleProcessor extends WeModuleProcessor { //Viva_cs是模块 public function respond() {
$content = $this->message; //信息数据 (数组) //$json=json_encode($content,JSON_UNESCAPED_UNICODE); return $this->respText($content['recognition']); //必须要这样响应 //这里定义此模块进行消息处理时的具体过程, 请查看微擎文档来编写你的代码 }
}
微擎封装自定义分享
在这个公共模板地方创建这个文件 下面是html的内容
wx.ready(function(){wx.hideMenuItems({menuList:['menuItem:copyUrl','menuItem:openWithQQBrowser','menuItem:openWithSafari','menuItem:share:email']});});
这个是视图中使用自定义分享的时候 引用这个模板后,可以使用微信sdk中的方法
下面是内容
{template "common/wxsdknew"}
wx.ready(function() { //封装了微信wxsdk可以调用微信方法
window.wxshare = {
title: "你好e贷暖心福利来袭——安心宅家,新鲜直达!",
link: "{$_W['siteurl']}",
desc: '超多惊喜等你来',
imgUrl: 'https://file.cdn.finance.vivatech.cn/191213helloe_dai/images/index/icon.jpg',
success: function () {}
};
wx.onMenuShareTimeline(wxshare);
wx.onMenuShareAppMessage(wxshare);
wx.updateAppMessageShareData(wxshare);
wx.updateTimelineShareData(wxshare);
});