提问交流

提问交流

使用问题咨询
经验分享

经验分享

开发经验交流分享
功能建议

功能建议

官方开发功能建议
BUG反馈

BUG反馈

使用BUG反馈
模块&插件&数据包

模块&插件&数据包

模块插件数据包分享
框架发布

框架发布

静态页面缓存

dragonlhp 发表了文章 • 0 个评论 • 215 次浏览 • 2018-01-18 16:39 • 来自相关话题

缓存必须要关闭调试模式才能生效
将behavior目录的文件放在common/behavior目录下 再在tags.php的文件中添加return [
// 应用初始化
'app_init' => [],
// 应用开始
'app_begin' => [
'app\\common\\behavior\\ReadHtmlCacheBehavior',// 读取静态缓存
],
// 模块初始化
'module_init' => [],
// 操作开始执行
'action_begin' => [],
// 视图内容过滤
'view_filter' => [
'app\\common\\behavior\\WriteHtmlCacheBehavior',// 写入静态缓存
],
// 日志写入
'log_write' => [],
// 应用结束
'app_end' => [],
];
config.php// +----------------------------------------------------------------------
// | 静态缓存设置
// +----------------------------------------------------------------------
//'配置值'
'html_cache_on' => true, // 开启静态缓存
'html_cache_time' => 7200, // 全局静态缓存有效期(秒)
'html_file_suffix' => '.html', // 设置静态缓存文件后缀
'html_cache_compile_type' => 'file',//缓存存储驱动
'html_cache_rules' => [
// 定义静态缓存规则
// // 定义格式1 数组方式
//'静态地址' => array('静态规则', '有效期', '附加规则'),
//1.任意控制器的任意操作都适用
'cms>' => array('{$_SERVER.REQUEST_URI|md5}', 0),
// //2.任意控制器的md5操作
// 'md5' => array('{:module}/{:controller}/{:action}_{id|md5}'),
// //3.Static控制器的所有操作
// 'Static:' => array('{:module}/{:controller}/{:action}', 50),//第一个参数是构造的字符串,后面是缓存50秒
// //4.Hmtl控制器的md5操作
// 'Html:md5' => array('{:module}/{:controller}/{:action}'),
], 查看全部
缓存必须要关闭调试模式才能生效
将behavior目录的文件放在common/behavior目录下 再在tags.php的文件中添加
return [
// 应用初始化
'app_init' => [],
// 应用开始
'app_begin' => [
'app\\common\\behavior\\ReadHtmlCacheBehavior',// 读取静态缓存
],
// 模块初始化
'module_init' => [],
// 操作开始执行
'action_begin' => [],
// 视图内容过滤
'view_filter' => [
'app\\common\\behavior\\WriteHtmlCacheBehavior',// 写入静态缓存
],
// 日志写入
'log_write' => [],
// 应用结束
'app_end' => [],
];

config.php
// +----------------------------------------------------------------------
// | 静态缓存设置
// +----------------------------------------------------------------------
//'配置值'
'html_cache_on' => true, // 开启静态缓存
'html_cache_time' => 7200, // 全局静态缓存有效期(秒)
'html_file_suffix' => '.html', // 设置静态缓存文件后缀
'html_cache_compile_type' => 'file',//缓存存储驱动
'html_cache_rules' => [
// 定义静态缓存规则
// // 定义格式1 数组方式
//'静态地址' => array('静态规则', '有效期', '附加规则'),
//1.任意控制器的任意操作都适用
'cms>' => array('{$_SERVER.REQUEST_URI|md5}', 0),
// //2.任意控制器的md5操作
// 'md5' => array('{:module}/{:controller}/{:action}_{id|md5}'),
// //3.Static控制器的所有操作
// 'Static:' => array('{:module}/{:controller}/{:action}', 50),//第一个参数是构造的字符串,后面是缓存50秒
// //4.Hmtl控制器的md5操作
// 'Html:md5' => array('{:module}/{:controller}/{:action}'),
],

markdown插件

回复

gyh9711 发起了问题 • 2 人关注 • 0 个回复 • 410 次浏览 • 2017-10-26 11:43 • 来自相关话题

自定义表单项目之select2ajax

yangweijie 发表了文章 • 0 个评论 • 719 次浏览 • 2017-09-06 15:10 • 来自相关话题

因为公司有个下拉列表有几千的数据,而过多的json在前端会造成浏览器卡 崩溃,故研究ajax 搜索下拉。
form

addSelect2ajax 注意定义ajax请求地址,参数固定q page=1

ajax_url

返回 data: 列表 键值分别为text 和id 即可

测试代码


测试代码

public function test_table($q='', $page = 1){
if(Request::instance()->isAjax()){
// 静态模拟
return json([
'data'=>[
['text'=>'吉佳便利超市','id'=>2],
['text'=>'吉祥馄饨','id'=>880],
]
]);
// 动态查询
$where['company_name'] = ['like', "%{$q}%"];
$shop_list = Db::name('Shop')->where($where)->field('company_name AS text,id')->paginate(10);
return json($shop_list);
}else{
return ZBuilder::make('form')
->addSelect2ajax('select', '测试','', [], '', url('test_table'))
->fetch();
}
}下载附件放入extend/form/里解压出来select2ajax 目录,
在表单里如上面方式使用,addSelect2ajax ,  注意 ajax_url 搜索的处理。
 
注意自定义表单项的模板 里 变量时builder里的 不要直接copy common builder里的 查看全部

TIM截图20170906150516.jpg

因为公司有个下拉列表有几千的数据,而过多的json在前端会造成浏览器卡 崩溃,故研究ajax 搜索下拉。
form

addSelect2ajax 注意定义ajax请求地址,参数固定q page=1

ajax_url

返回 data: 列表 键值分别为text 和id 即可

测试代码


测试代码

public function test_table($q='', $page = 1){
if(Request::instance()->isAjax()){
// 静态模拟
return json([
'data'=>[
['text'=>'吉佳便利超市','id'=>2],
['text'=>'吉祥馄饨','id'=>880],
]
]);
// 动态查询
$where['company_name'] = ['like', "%{$q}%"];
$shop_list = Db::name('Shop')->where($where)->field('company_name AS text,id')->paginate(10);
return json($shop_list);
}else{
return ZBuilder::make('form')
->addSelect2ajax('select', '测试','', [], '', url('test_table'))
->fetch();
}
}
下载附件放入extend/form/里解压出来select2ajax 目录,
在表单里如上面方式使用,addSelect2ajax ,  注意 ajax_url 搜索的处理。
 
注意自定义表单项的模板 里 变量时builder里的 不要直接copy common builder里的

环迅支付插件

cklnk 发表了文章 • 0 个评论 • 834 次浏览 • 2017-06-30 14:18 • 来自相关话题

调用
 $payment_data = [
'GoodsName' => '充值',
'MerBillNo' => '订单号',
'Amount' => '金额',
'Attach' => '备注',
'Merchanturl' => '',
'ServerUrl' => '',
'UserRealName' => '',//自动注册
'UserId' => '',//自动注册
];
plugin_action('Ipspay/Ipspay/payment', [$payment_data, 'h5']);

解压到plugins文件夹下即可 查看全部

QQ截图20170630141641.jpg

调用
 
$payment_data = [
'GoodsName' => '充值',
'MerBillNo' => '订单号',
'Amount' => '金额',
'Attach' => '备注',
'Merchanturl' => '',
'ServerUrl' => '',
'UserRealName' => '',//自动注册
'UserId' => '',//自动注册
];
plugin_action('Ipspay/Ipspay/payment', [$payment_data, 'h5']);


解压到plugins文件夹下即可

SwiftMailer邮件类插件

july 发表了文章 • 0 个评论 • 464 次浏览 • 2017-06-27 13:11 • 来自相关话题

需要用邮件所以做了个初版的SwiftMailer邮件类插件,静态方法调用

 
安装此插件前,请先使用命令composer require swiftmailer/swiftmailer 安装SwiftMailer
 





测试方法public function send_email(){
$res = SwiftMailer::send_email('测试宝宝','测试内容',to_user_emial);
dump($res);
} 查看全部
需要用邮件所以做了个初版的SwiftMailer邮件类插件,静态方法调用

 
安装此插件前,请先使用命令composer require swiftmailer/swiftmailer 安装SwiftMailer
 
TIM图片20170627130540.png


测试方法
public function send_email(){
$res = SwiftMailer::send_email('测试宝宝','测试内容',to_user_emial);
dump($res);
}

百度合成语音插件,初学初试,请各位指教

july 发表了文章 • 0 个评论 • 563 次浏览 • 2017-06-20 17:52 • 来自相关话题

初学初试,试做了一个语音插件,可以使用,不知道代码是否臃肿,有更好的方法请各位指点迷津






根据百度合成语音的文档把基本能用的参数作为配置
因为是根据api测试的,所以报错直接$this->result();
 
下面是测试方法,请先引入use plugins\BaiduTTS\controller\BaiduTTS;测试方法public function test_tts(Request $request){
$msg = $request->param('msg');
$tts = new BaiduTTS();
$file = $tts->send($msg);
if (empty($file) || $file === false){
$this->result(null,400,'error','json');
}
$this->result(['audio'=>$file],200,'success','json');
}
在浏览器输入中文正常,postman中输入中文pathinfo接收到的参数似乎转码了,以 ? 的get参数能正常
还请各位多指教啦
  查看全部
初学初试,试做了一个语音插件,可以使用,不知道代码是否臃肿,有更好的方法请各位指点迷津

TIM图片20170620174657.png


根据百度合成语音的文档把基本能用的参数作为配置
因为是根据api测试的,所以报错直接$this->result();
 
下面是测试方法,请先引入
use plugins\BaiduTTS\controller\BaiduTTS;
测试方法
public function test_tts(Request $request){
$msg = $request->param('msg');
$tts = new BaiduTTS();
$file = $tts->send($msg);
if (empty($file) || $file === false){
$this->result(null,400,'error','json');
}
$this->result(['audio'=>$file],200,'success','json');
}

在浏览器输入中文正常,postman中输入中文pathinfo接收到的参数似乎转码了,以 ? 的get参数能正常
还请各位多指教啦
 

微信小程序用户信息解密插件

回复

jiankian 发起了问题 • 1 人关注 • 0 个回复 • 952 次浏览 • 2017-04-12 07:20 • 来自相关话题

微信小程序登录插件,换取session-key和openid

jiankian 发表了文章 • 0 个评论 • 797 次浏览 • 2017-04-12 07:14 • 来自相关话题

微信小程序登录换取openid和session_key插件。。
微信小程序代码:
wx.login({
success: function(res){
// success
console.log("wx.login成功")
console.log(res)
wx.request({
url: '服务器地址/index.php/前台控制器地址。。。',
data: {
js_code:res.code
},
method: 'GET', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
// header: {}, // 设置请求的 header
success: function(res){
// success
console.log("服务器返回:")
console.log(res)
var login_session = JSON.parse(res.data)
if (login_session.session_key){
wx.getUserInfo({
success: function(res){
// success
console.log("获取用户信息成功")
console.log(res)
wx.request({
url: '服务器地址/index.php/customer/index/decrypt前台控制器地址',
data: {
sessionKey:login_session.session_key,
encryptedData:res.encryptedData,
iv:res.iv
},
method: 'GET', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
// header: {}, // 设置请求的 header
success: function(res){
// success
console.log("服务器解密成功")
console.log(res)
},
fail: function(res) {
// fail
},
complete: function(res) {
// complete
}
})
},
fail: function(res) {
// fail
},
complete: function(res) {
// complete
}
})
}

},
fail: function(res) {
// fail
},
complete: function(res) {
// complete
}
})
},
fail: function(res) {
// fail
},
complete: function(res) {
// complete
}
})因为,系统自动返回的是  html数据头,如果小程序端收到的不是json对象而是json字符串请用配置在服务器端直接配置默认的返回数据为json  HTTP头。或者小程序本地 用  JSON.parse('json字符串')来解析json对象。。
  查看全部
微信小程序登录换取openid和session_key插件。。
微信小程序代码:
wx.login({
success: function(res){
// success
console.log("wx.login成功")
console.log(res)
wx.request({
url: '服务器地址/index.php/前台控制器地址。。。',
data: {
js_code:res.code
},
method: 'GET', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
// header: {}, // 设置请求的 header
success: function(res){
// success
console.log("服务器返回:")
console.log(res)
var login_session = JSON.parse(res.data)
if (login_session.session_key){
wx.getUserInfo({
success: function(res){
// success
console.log("获取用户信息成功")
console.log(res)
wx.request({
url: '服务器地址/index.php/customer/index/decrypt前台控制器地址',
data: {
sessionKey:login_session.session_key,
encryptedData:res.encryptedData,
iv:res.iv
},
method: 'GET', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
// header: {}, // 设置请求的 header
success: function(res){
// success
console.log("服务器解密成功")
console.log(res)
},
fail: function(res) {
// fail
},
complete: function(res) {
// complete
}
})
},
fail: function(res) {
// fail
},
complete: function(res) {
// complete
}
})
}

},
fail: function(res) {
// fail
},
complete: function(res) {
// complete
}
})
},
fail: function(res) {
// fail
},
complete: function(res) {
// complete
}
})
因为,系统自动返回的是  html数据头,如果小程序端收到的不是json对象而是json字符串请用配置在服务器端直接配置默认的返回数据为json  HTTP头。或者小程序本地 用  JSON.parse('json字符串')来解析json对象。。