二次开发文档:函数方法
系统提醒
方法名:
\Phpcmf\Service::M('member')->admin_notice($site, $type, $member, $msg, $uri, $to);
参数介绍:
@param site 站点id,公共部分0 @param type system系统 content内容相关 member会员相关 app应用相关 pay 交易相关 @param msg 提醒内容 @param uri 后台对应的链接 'member/home/edit10/123' @param to 通知对象 留空表示全部对象 array( to_uid 指定人 to_rid 指定角色组 )
处理后的通知
\Phpcmf\Service::M('member')->todo_admin_notice($uri, $site = 0);
第三方短信接口开发
需要在后台开启第三方模式
默认方法函数介绍
1、验证码发送方法
\Phpcmf\Service::M('member')->sendsms_code($mobile, $content, $config) $mobile 手机号码 $content 验证码 $config 你在后台数量的第三方配置参数
2、文本消息发送方法
\Phpcmf\Service::M('member')->sendsms_text($mobile, $content, $config) $mobile 手机号码 $content 消息内容 $config 你在后台数量的第三方配置参数
第三方接口开发举例
新建自定义函数文件./config/mysms.php
返回数据格式
1、发送成功
return dr_return_data(1, 'ok');2、发送失败
// 记录日志 $error = '失败原因'; @file_put_contents(WRITEPATH.'sms_log.php', date('Y-m-d H:i:s').' ['.$mobile.'] ['.$error.'] ('.str_replace(array(chr(13), chr(10)), '', $content).')'.PHP_EOL, FILE_APPEND); return dr_return_data(0, 'error');
邮件发送
方法介绍
\Phpcmf\Service::M('member')->sendmail($tomail, $subject, $msg, $data = []) $tomail 收件人 $subject 标题 $msg 内容或者模板 $data 模板变量,直接发送内容可不填
返回值
成功 true 失败false
用法举例
1、直接发送内容
\Phpcmf\Service::M('member')->sendmail( "a@qq.com", "邮件标题", "邮件内容");
2、模板内容发送
\Phpcmf\Service::M('member')->sendmail( "a@qq.com", "邮件标题", "email.html", ['name' => 'name变量值', 'time' => '时间变量'] ); // 它会调用test.html模板内容并替换第四个参数的变量
模板文件路径./config/notice/站点ID/email/test.html
模板内容 name: {$name} 时间:{$time}
短信发送
方法介绍
\Phpcmf\Service::M('member')->sendsms_code($mobile, $code); // 用于发送验证码 \Phpcmf\Service::M('member')->sendsms_text($mobile, $string); // 用于发送文本内容
返回值
[ 'code' => 0/1, 'msg' => '' ]
用法举例
1、发送一条验证码
\Phpcmf\Service::M('member')->sendsms_code("1380000000", "898989");
2、发送一条消息
\Phpcmf\Service::M('member')->sendsms_text("1380000000", "你好 PHP7 语言");
增减金币值
方法介绍
\Phpcmf\Service::M('member')->add_score($uid, $val, $note = '', $url = '', $mark = '', $count = 0) $uid 用户id $val 增减值,负数表示扣金币 $note 备注说明 $url 相关链接 $mark 唯一标注值,和count参数配合用 $count 扣减次数,只允许操作限制
返回值
[ 'code' => 0/记录id, 'msg' => '' ]
增减积分值
experience表示升级积分,只能用于升级参考值
方法介绍
\Phpcmf\Service::M('member')->add_experience($uid, $val, $note = '', $url = '', $mark = '', $count = 0) $uid 用户id $val 增减值,负数表示扣金币 $note 备注说明 $url 相关链接 $mark 唯一标注值,和count参数配合用 $count 扣减次数,只允许操作限制
返回值
[ 'code' => 0/记录id, 'msg' => '' ]
增减资金
方法介绍
\Phpcmf\Service::M('member')->add_money($uid, $value) $uid 用户id $val 增减值,负数表示扣
返回值
[ 'code' => 0/1, 'msg' => '' ]
注意,此方法不会生成交易记录日志,可以使用本教程来记录日志:https://www.xunruicms.com/doc/922.html
发送提醒通知
方法介绍
\Phpcmf\Service::M('member')->notice($uid, $type, $note, $url = '', $mark = '') $uid 会员id $type 类型:1系统 2用户 3内容 4应用 5交易 6订单,也可以由开发者自己定义类型分组 $note 通知内容 $url 相关链接 $mark 一般用于二次开发时的判断作用
返回值 无
开发者如何自己定义类型分组呢?
后台-用户-站内消息-自定义消息类型
其中上图的id号就是$type变量对应的值。
当这个分组不存在时,比如分组type的id号为99,那么我们还可以在程序里面直接创建99的分组,代码是:
dr_notice_update(99, $name = '名称', $icon = '图标')
增加冻结资金
将一笔钱冻结住
方法介绍
\Phpcmf\Service::M('Member')->add_freeze($uid, $value) $uid 用户id $val 金额值
返回值
[ 'code' => 0/1, 'msg' => '' ]
注意,此方法不会生成交易记录日志,可以使用本教程来记录日志:https://www.xunruicms.com/doc/922.html
取消冻结资金
将冻结住的一笔钱返回到账户中
方法介绍
\Phpcmf\Service::M('Member')->cancel_freeze($uid, $value) $uid 用户id $val 金额值
返回值
[ 'code' => 0/1, 'msg' => '' ]
注意,此方法不会生成交易记录日志,可以使用本教程来记录日志:https://www.xunruicms.com/doc/922.html
提醒管理员 admin_notice
用于提醒管理员将要做的任务
1、发起通知任务
\Phpcmf\Service::M('Member')->admin_notice($site, $type, $member, $msg, $uri); * @param site 站点id,公共部分0 * @param type system系统 content内容相关 member会员相关 app应用相关 pay 交易相关 * @param msg 提醒内容 * @param uri 后台对应的链接(必须填写uri,不能填写url)
2、处理通知任务
一般放到修改控制器的地方
\Phpcmf\Service::M('Member')->todo_admin_notice($uri, $site); * @param site 站点id,公共部分0 * @param uri 后台对应的链接(也就是1中的uri)
实列:
1、在php页面中发起通知任务:
// 通知后台 \Phpcmf\Service::M('member')->admin_notice(0, 'app', $this->member, "测试通知标题", 'my/home/index')
2、然后在后台面板中可以看到一条通知信息
标题:测试通知标题 地址:admin.php?s=my&c=home&m=index
3、需要在admin.php?s=my&c=home&m=index中处理通知已经接受到了,否则他会永远显示在提醒表中,处理代码:
\Phpcmf\Service::M('Member')->todo_admin_notice('my/home/index', 0);
uri一定要和(1)中的uri对应起来
判断字段是否存在
\Phpcmf\Service::M()->db->fieldExists('username', \Phpcmf\Service::M()->dbprefix('member'))
验证member表中是否存在字段username,成功返回true
判断表是否存在
\Phpcmf\Service::M()->db->tableExists(\Phpcmf\Service::M()->dbprefix('member'))
判断member表是否存在,成功返回true
重写控制网站自动跳转函数
方法名:
is_redirect_url
作用:控制网站域名重定向,301跳转,终端识别跳转
自定义重新方法:
/dayrui/Fcms/Library/Router.php
1、新建文件:dayrui/My/Library/Router.php
2、新写方法体:
1) { return; // 排除分页 } elseif (IS_CLIENT) { return; // 排除终端 } // 跳转 if ($url != dr_now_url()) { if (IS_DEV) { \Phpcmf\Service::C()->_admin_msg(1, '开发者模式:
当前URL['.dr_now_url().']
与其本身地址['.$url.']不符
正在自动跳转本身地址(关闭开发者模式时即可自动跳转)', $url, 9); } else { dr_redirect($url, 'location', '301'); } } } }
这里继承了系统Library类,可以重写系统类
你可以自由修改本函数内容了,不影响升级!,放心改
IP类函数
当前访客的IP
\Phpcmf\Service::L('input')->ip_address();
当前访客的agent
\Phpcmf\Service::L('input')->get_user_agent();
将ip转换为实际地址的省+城市
\Phpcmf\Service::L('ip')->address('IP地址');
将ip转换为实际地址的城市
\Phpcmf\Service::L('ip')->city('IP地址');
将ip转换为实际地址的省份
\Phpcmf\Service::L('ip')->province('IP地址');
session类方法
\Phpcmf\Service::C()
表示控制器对象,如果在控制器中可以将它改为 $this
一、正常存储session数据
读取
\Phpcmf\Service::C()->session()->get('变量名称');
保存
\Phpcmf\Service::C()->session()->set('变量名称', '变量值');
删除
\Phpcmf\Service::C()->session()->remove('变量名称');
二、临时(定时)存储session数据
存储
\Phpcmf\Service::C()->session()->setTempdata('变量名称', '变量值', '存储多少秒');
读取
\Phpcmf\Service::C()->session()->get('变量名称');
删除
\Phpcmf\Service::C()->session()->removeTempdata('变量名称');
cookie类方法
存储
\Phpcmf\Service::L('input')->set_cookie('变量名称', '变量值', '有效期,秒');
获取
\Phpcmf\Service::L('input')->get_cookie('变量名称');
下载远程文件
函数名称:dr_catcher_data
函数作用:将http的网络资源下载存储到变量中,类似于file_get_contents函数的加强版
函数格式:
dr_catcher_data($url地址, $超时时间)
超时时间不填写表示不超时
返回格式:字符串,没获取到返回空白
增加交易流水记录
增加交易流水记录
方法介绍
\Phpcmf\Service::M('Pay')->add_paylog([ 'uid' => "交易人uid号", 'username' => "交易人账号", 'touid' => "对方uid号,默认设置0", 'tousername' => '对方账号,默认设置空', 'mid' => 'system', // 特征字符串,system表示系统 'title' => "交易说明标题文字", 'value' => 100, // 交易金额,正数表示增加金额,负数表示消费金额 'type' => 'finecms', // 支付方式,alipy,weixin,finecms表示余额 'status' => 1, // 1表示交易成功,0表示未成功 'result' => "交易说明详细记录文字", 'paytime' => SYS_TIME, // 付款时间,默认当前时间 'inputtime' => SYS_TIME, // 流水参生时间,默认当前时间 ]);
返回值
交易详情数组
时间戳函数strtotime
php自带的时间戳获取函数:strtotime
常用参数介绍:
var_dump(date("Y-m-d", strtotime("last day of last month", time())));////上个月 月底 var_dump(date("Y-m-d", strtotime("last day of -1 month", time())));// 上个月 月底 var_dump(date("Y-m-d", strtotime("first day of +1 month", time())));//// 下个月 月初 var_dump(date("Y-m-d", strtotime("first day of next month", time())));//// 下个月 月初 var_dump(date("Y-m-d", strtotime("first day of", time()))); // 本月1号 var_dump(date("Y-m-d", strtotime("last day of", time()))); // 本月底
固定时间的月初和月末:
echo date("Y-m-d", strtotime("2017-02 first day of")).'
'; //2017-02-01 echo date("Y-m-d", strtotime("2017-02 last day of")).'
'; //2017-02-28 echo date("Y-m-d", strtotime("2017-05 last day of")).'
'; //2017-05-31
前后时间:
date('Y-m-d', strtotime('midnight last day of -1 month')) 获取上个月的最后一天的日期
前后时间:
5个小时之后 strtotime('+5 hours') 5个小时之前 strtotime('-5 hours') 1天之后 strtotime('+1 day')
前后时间:
一周后的今天:strtotime("+1 week") 一月后的今天:strtotime("+1 month") 一年后的今天:strtotime("+1 year")
文件/文件夹操作
zip文件解压到指定目录:
\Phpcmf\Service::L('file')->unzip($zipfile, $path); zipfile 指zip文件路径 path 指解压的目录
zip压缩指定目录:
$rt = \Phpcmf\Service::L('file')->zip($zipfile, $path); zipfile 新的zip文件名 path 指目录
文件复制:
\Phpcmf\Service::L('file')->copy_file($fromFile, $toFile); fromFile指需要复制的文件地址 toFile指复制后的文件地址,就是目标文件
本方法会自动创建文件层级目录。
文件夹复制:
\Phpcmf\Service::L('file')->copy_dir($filepath, $filepath, $savepath);
源文件目录$filepath,源文件目录$filepath,(两个参数需要填写一样的值,为了兼容老版本)
新文件目录$savepath
图片文件转为base64格式的图片:
\Phpcmf\Service::L('file')->base64_image($image_file) image_file是图片文件路径 输出base64编码
数组剪切函数 dr_arraycut
数组剪切函数 v4.5.3以上支持
dr_arraycut(数组,个数)
作用:将数组剪切指定个数输出
用法:
1、剪切2个元素
$arr = dr_arraycut($arr, '2');
2、从第一个元素起剪切,保留2个元素
$arr = dr_arraycut($arr, '1,2');
文本转化为拼音
\Phpcmf\Service::L('pinyin')->result("文本内容")
模板写法:
{php echo \Phpcmf\Service::L('pinyin')->result("文本内容");}
临时加密和解密字符串 dr_authcode
用于对字符串进行加密和解密操作,有效期24小时。
加密操作:
dr_authcode($string, 'ENCODE')
解密操作:
dr_authcode($string, 'DECODE')
数组随机 dr_array_rand
数组剪切函数 v4.6以上支持
dr_array_rand(数组,个数可选)
作用:将数组随机输出,支持剪切指定个数输出
用法:
1、随机数组并剪切2个元素
$arr = dr_array_rand($arr, '2');
2、随机数组并全部输出
$arr = dr_array_rand($arr);