二次开发文档:函数方法

系统提醒

方法名:

\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);


第三方短信接口开发

需要在后台开启第三方模式

QQ20161013-0@2x.png


默认方法函数介绍

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 一般用于二次开发时的判断作用

返回值 无


开发者如何自己定义类型分组呢?

后台-用户-站内消息-自定义消息类型

{xunruicms_img_title}

其中上图的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地址, $超时时间)

超时时间不填写表示不超时


返回格式:字符串,没获取到返回空白


增加交易流水记录

增加交易流水记录image


方法介绍

\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);