框架发布

框架发布

最新版本发布信息
提问交流

提问交流

使用问题咨询
经验分享

经验分享

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

功能建议

官方开发功能建议
BUG反馈

BUG反馈

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

模块&插件&数据包

模块插件数据包分享

js二维码插件

回复

经验分享mx2118 发起了问题 • 1 人关注 • 0 个回复 • 33 次浏览 • 2019-04-13 17:45 • 来自相关话题

自定义分片上传字段

经验分享yangweijie 发表了文章 • 1 个评论 • 127 次浏览 • 2019-03-23 16:26 • 来自相关话题

有用户说要断点续传,然后自己没研究过,但是发现webupload里支持分片上传的,就研究实现了下,本来试了一个stream js 但是在海豚里各种ui没调通。
 
 还有官方手册,终于把他搞出来了。
 
 
思路,第一自己扩展sendFile 事件第二,改变分片上传参数,包括上传地址
第三 实现分片上传的方法。
 
WebUploader.Uploader.register({
"name": "cutfile_uploader",
"before-send": "beforeSend" // 整个文件上传前
}, {
beforeSend:function(block){
var deferred = WebUploader.Deferred();
if(is_upload)//跳过到开始上传的哪一个分片时
{
deferred.resolve();
}else if(totalFiles) {
//已经获取过文件数量则直接判断是否跳过
//当前分片下标小于等于目录下的文件数量就认为分块存在,因为分块上传下标是由小到大
// console.log(block.chunk);
// console.log(totalFiles);
// console.log(!totalFiles.in_array(block.chunk));
if (!totalFiles.in_array(block.chunk - 1)) {
deferred.resolve();
} else {
//分块存在,跳过
deferred.reject();
}
} else {
$.post(cutfile_conf.check_upload_url, {md5: fileMd5}, function (data) {
console.log(data);
if (data.code) {
totalFiles = data.data;
//当前分片下标小于等于目录下的文件数量就认为分块存在,因为分块上传下标是由小到大
if (!data.data.in_array(block.chunk-1)) {
deferred.resolve();
} else {
//分块存在,跳过
deferred.reject();
}
} else {
is_upload = true;
deferred.resolve();
}
}, 'json');
}
}
});注册send-file事件
 
// 当有文件添加进来的时候
uploader.on( 'fileQueued', function( file ) {
console.log(new Date());
// 设置当前上传对象
curr_uploader = uploader;
uploader.md5File( file )
// 完成
.then(function(val) {
fileMd5 = val;
var formData = uploader.option('formData');
// console.log('md5 result:', val);
formData.md5 = fileMd5;
// console.log(formData);
uploader.option('formData',formData);
// console.log(uploader.option('formData'));
});
var $li = '<li id="' + file.id + '" class="list-group-item file-item">' +
'<span class="pull-right file-state"><span class="text-info"><i class="fa fa-sun-o fa-spin"></i> 正在读取文件信息...</span></span>' +
'<i class="fa fa-file"></i> ' +
file.name +
' [<a href="javascript:void(0);" class="download-file">下载</a>] [<a href="javascript:void(0);" class="remove-file">删除</a>]' +
'<div class="progress progress-mini remove-margin active" style="display: none"><div class="progress-bar progress-bar-primary progress-bar-striped" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 0%"></div></div>'+
'</li>';

if ($multiple) {
$file_list.append($li);
} else {
$file_list.html($li);
// 清空原来的数据
$input_file.val('');
}
});
修改file-queueshi事件,主要是每次上传时不光传file 对象还将原始md5传过去用于组成分片的文件用,方便最终检测是否存在已传过的分片。这里面有一个大坑,curr_uploader = uploader; 这个设置的在form.js里
WebUploader.Uploader.register({
            "before-send-file": "beforeSendFile" // 整个文件上传前
        }, {
            beforeSendFile:function(file){
                var $li = $( '#'+file.id );
                var deferred = WebUploader.Deferred();
                var owner = this.owner;

                owner.md5File(file).then(function(val){
                    $.ajax({
                        type: "POST",
                        url: dolphin.upload_check_url,
                        data: {
                            md5: val
                        },
                        cache: false,
                        timeout: 10000, // 超时的话,只能认为该文件不曾上传过
                        dataType: "json"
                    }).then(function(res, textStatus, jqXHR){
                        if(res.code){
                            // 已上传,触发上传完成事件,实现秒传
                            deferred.reject();
                            curr_uploader.trigger('uploadSuccess', file, res);
                            curr_uploader.trigger('uploadComplete', file);
                        }else{
                            // 文件不存在,触发上传
                            deferred.resolve();
                            $li.find('.file-state').html('<span class="text-info">正在上传...</span>');
                            $li.find('.img-state').html('<div class="bg-info">正在上传...</div>');
                            $li.find('.progress').show();
                        }
                    }, function(jqXHR, textStatus, errorThrown){
                        // 任何形式的验证失败,都触发重新上传
                        deferred.resolve();
                        $li.find('.file-state').html('<span class="text-info">正在上传...</span>');
                        $li.find('.img-state').html('<div class="bg-info">正在上传...</div>');
                        $li.find('.progress').show();
                    });
                });
                return deferred.promise();
            }
        });
里面的 妙传实现时 出发已有的webload uploadSuccess 会报为定义的方法,必须修改 form.js
将var curr_uploader = {}; 这个定义提到$(function(){ 外,变为全局变量。前端我也不太懂,
总之官方的实现 不管表单里有没有webupload 都跑去注册了一下事件,然后才加载init.js 自定义表单项的js 并且我试了用官方的 unregistered webupload 都无效。官方要考虑一下扩展性,或者官方支持分片最好。对应的上传和检测 方法我已经更改了admin里的ajax 实现了。
 
所以官方的自定义字段的后端实现 也不知道如何去扩展一个控制器方法。
 
大家把我的附件解压放到项目里,只支持1.1.0 以上。 然后修改一行form.js  就可以了。
 
 
参考页面:
public function index(){
return ZBuilder::make('form')
->setPageTitle('分片上传')
->addCutfile('file', '上传')
->fetch();
}有个疑惑,看了很多文章,chunk 发现upload都是1开始 而webupload里是从0开始的。
还有感觉获取本地信息检查妙传总感觉卡,还有断电续传的进度 不想现象的 自动晚上长,但是请求数确实会比重新传的分片数要少。希望官方参考本文章增加一个分片上传的字段体验完整的功能
  查看全部

20190323160615.png

有用户说要断点续传,然后自己没研究过,但是发现webupload里支持分片上传的,就研究实现了下,本来试了一个stream js 但是在海豚里各种ui没调通。
 
 还有官方手册,终于把他搞出来了。
 
 
思路,第一自己扩展sendFile 事件第二,改变分片上传参数,包括上传地址
第三 实现分片上传的方法。
 
 WebUploader.Uploader.register({
"name": "cutfile_uploader",
"before-send": "beforeSend" // 整个文件上传前
}, {
beforeSend:function(block){
var deferred = WebUploader.Deferred();
if(is_upload)//跳过到开始上传的哪一个分片时
{
deferred.resolve();
}else if(totalFiles) {
//已经获取过文件数量则直接判断是否跳过
//当前分片下标小于等于目录下的文件数量就认为分块存在,因为分块上传下标是由小到大
// console.log(block.chunk);
// console.log(totalFiles);
// console.log(!totalFiles.in_array(block.chunk));
if (!totalFiles.in_array(block.chunk - 1)) {
deferred.resolve();
} else {
//分块存在,跳过
deferred.reject();
}
} else {
$.post(cutfile_conf.check_upload_url, {md5: fileMd5}, function (data) {
console.log(data);
if (data.code) {
totalFiles = data.data;
//当前分片下标小于等于目录下的文件数量就认为分块存在,因为分块上传下标是由小到大
if (!data.data.in_array(block.chunk-1)) {
deferred.resolve();
} else {
//分块存在,跳过
deferred.reject();
}
} else {
is_upload = true;
deferred.resolve();
}
}, 'json');
}
}
});
注册send-file事件
 
// 当有文件添加进来的时候
uploader.on( 'fileQueued', function( file ) {
console.log(new Date());
// 设置当前上传对象
curr_uploader = uploader;
uploader.md5File( file )
// 完成
.then(function(val) {
fileMd5 = val;
var formData = uploader.option('formData');
// console.log('md5 result:', val);
formData.md5 = fileMd5;
// console.log(formData);
uploader.option('formData',formData);
// console.log(uploader.option('formData'));
});
var $li = '<li id="' + file.id + '" class="list-group-item file-item">' +
'<span class="pull-right file-state"><span class="text-info"><i class="fa fa-sun-o fa-spin"></i> 正在读取文件信息...</span></span>' +
'<i class="fa fa-file"></i> ' +
file.name +
' [<a href="javascript:void(0);" class="download-file">下载</a>] [<a href="javascript:void(0);" class="remove-file">删除</a>]' +
'<div class="progress progress-mini remove-margin active" style="display: none"><div class="progress-bar progress-bar-primary progress-bar-striped" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 0%"></div></div>'+
'</li>';

if ($multiple) {
$file_list.append($li);
} else {
$file_list.html($li);
// 清空原来的数据
$input_file.val('');
}
});
修改file-queueshi事件,主要是每次上传时不光传file 对象还将原始md5传过去用于组成分片的文件用,方便最终检测是否存在已传过的分片。这里面有一个大坑,
curr_uploader = uploader;  这个设置的在form.js里 
WebUploader.Uploader.register({
            "before-send-file": "beforeSendFile" // 整个文件上传前
        }, {
            beforeSendFile:function(file){
                var $li = $( '#'+file.id );
                var deferred = WebUploader.Deferred();
                var owner = this.owner;

                owner.md5File(file).then(function(val){
                    $.ajax({
                        type: "POST",
                        url: dolphin.upload_check_url,
                        data: {
                            md5: val
                        },
                        cache: false,
                        timeout: 10000, // 超时的话,只能认为该文件不曾上传过
                        dataType: "json"
                    }).then(function(res, textStatus, jqXHR){
                        if(res.code){
                            // 已上传,触发上传完成事件,实现秒传
                            deferred.reject();
                            curr_uploader.trigger('uploadSuccess', file, res);
                            curr_uploader.trigger('uploadComplete', file);
                        }else{
                            // 文件不存在,触发上传
                            deferred.resolve();
                            $li.find('.file-state').html('<span class="text-info">正在上传...</span>');
                            $li.find('.img-state').html('<div class="bg-info">正在上传...</div>');
                            $li.find('.progress').show();
                        }
                    }, function(jqXHR, textStatus, errorThrown){
                        // 任何形式的验证失败,都触发重新上传
                        deferred.resolve();
                        $li.find('.file-state').html('<span class="text-info">正在上传...</span>');
                        $li.find('.img-state').html('<div class="bg-info">正在上传...</div>');
                        $li.find('.progress').show();
                    });
                });
                return deferred.promise();
            }
        });
里面的 妙传实现时 出发已有的webload uploadSuccess 会报为定义的方法,必须修改 form.js
将var curr_uploader = {};  这个定义提到$(function(){ 外,变为全局变量。前端我也不太懂,
总之官方的实现 不管表单里有没有webupload 都跑去注册了一下事件,然后才加载init.js 自定义表单项的js 并且我试了用官方的 unregistered webupload 都无效。官方要考虑一下扩展性,或者官方支持分片最好。
对应的上传和检测 方法我已经更改了admin里的ajax 实现了。
 
所以官方的自定义字段的后端实现 也不知道如何去扩展一个控制器方法。
 
大家把我的附件解压放到项目里,只支持1.1.0 以上。 然后修改一行form.js  就可以了。
 
 
参考页面:
	public function index(){
return ZBuilder::make('form')
->setPageTitle('分片上传')
->addCutfile('file', '上传')
->fetch();
}
有个疑惑,看了很多文章,chunk 发现upload都是1开始 而webupload里是从0开始的。
还有感觉获取本地信息检查妙传总感觉卡,还有断电续传的进度 不想现象的 自动晚上长,但是请求数确实会比重新传的分片数要少。希望官方参考本文章增加一个分片上传的字段体验完整的功能
 

thinkphp5.1和5.0下的中文分词

经验分享cc110110 发表了文章 • 3 个评论 • 503 次浏览 • 2019-01-25 16:24 • 来自相关话题

thinkphp5.1中文分词方法
config目录下的app.php文件中增加//中文分词的目录
'CONF_PATH' => Env::get('root_path') . 'application' . DIRECTORY_SEPARATOR . '你的模块' . DIRECTORY_SEPARATOR . '中文分词的目录'.DIRECTORY_SEPARATORthinkphp5.0的config.php //中文分词的目录
'CONF_PATH' => ROOT_PATH . 'application' . DS . '你的模块' . DS . '中文分词的目录'.DS

公共方法:/**
* 中文分词
* @params string $title 需要分词的语句
* @params int $num 分词个数,默认不用填写
**/
function get_tags($title,$num=null){
$pscws = new \app\你的模块\中文分词目录\Pscws();
$pscws->set_dict(config('app.CONF_PATH') . 'dict.utf8.xdb');
$pscws->set_rule(config('app.CONF_PATH') . 'rules.utf8.ini');
$pscws->set_ignore(true);
$pscws->send_text($title);
$words = $pscws->get_tops($num);
$pscws->close();
$tags = array();
foreach ($words as $val) {
$tags = $val['word'];
}
return implode(',', $tags);
}Tp5.0框架下config('app.CONF_PATH') 改成 CONF_PATH调用方法:dump(get_tags('积分第三方鉴定是非得失佛挡杀佛度是的不舒服'));die;本地测试结果:string(50) "是非得失,第三方,鉴定,是的,舒服,积分" 查看全部
thinkphp5.1中文分词方法
config目录下的app.php文件中增加
//中文分词的目录
'CONF_PATH' => Env::get('root_path') . 'application' . DIRECTORY_SEPARATOR . '你的模块' . DIRECTORY_SEPARATOR . '中文分词的目录'.DIRECTORY_SEPARATOR
thinkphp5.0的config.php 
//中文分词的目录
'CONF_PATH' => ROOT_PATH . 'application' . DS . '你的模块' . DS . '中文分词的目录'.DS


公共方法:
/**
* 中文分词
* @params string $title 需要分词的语句
* @params int $num 分词个数,默认不用填写
**/
function get_tags($title,$num=null){
$pscws = new \app\你的模块\中文分词目录\Pscws();
$pscws->set_dict(config('app.CONF_PATH') . 'dict.utf8.xdb');
$pscws->set_rule(config('app.CONF_PATH') . 'rules.utf8.ini');
$pscws->set_ignore(true);
$pscws->send_text($title);
$words = $pscws->get_tops($num);
$pscws->close();
$tags = array();
foreach ($words as $val) {
$tags = $val['word'];
}
return implode(',', $tags);
}
Tp5.0框架下
config('app.CONF_PATH') 改成 CONF_PATH
调用方法:
dump(get_tags('积分第三方鉴定是非得失佛挡杀佛度是的不舒服'));die;
本地测试结果:
string(50) "是非得失,第三方,鉴定,是的,舒服,积分"

迟到的教程:【Excel 插件】 导入 Excel 教程

经验分享etuos 回复了问题 • 8 人关注 • 5 个回复 • 3043 次浏览 • 2018-09-14 10:40 • 来自相关话题

添加提示文字

经验分享cc110110 发表了文章 • 0 个评论 • 416 次浏览 • 2018-08-23 14:35 • 来自相关话题

在配置管理->系统->配置值  里面添加 tiptext:提示文本
需要修改的代码文件
common->builder->table->Builder.php 第1885行后添加case 'tiptext':
$row[$column['name'].'__'.$column['type']] = '<div class="el-tooltip" aria-describedby="el-tooltip-127" tabindex="0" style="color: rgb(64, 158, 255); text-overflow: ellipsis; overflow: hidden; white-space: nowrap;" title="'.$row[$column['name']].'" data-toggle="tooltip" >'.$row[$column['name']].'</div>';
break; 查看全部
在配置管理->系统->配置值  里面添加 tiptext:提示文本
需要修改的代码文件
common->builder->table->Builder.php 第1885行后添加
case 'tiptext':
$row[$column['name'].'__'.$column['type']] = '<div class="el-tooltip" aria-describedby="el-tooltip-127" tabindex="0" style="color: rgb(64, 158, 255); text-overflow: ellipsis; overflow: hidden; white-space: nowrap;" title="'.$row[$column['name']].'" data-toggle="tooltip" >'.$row[$column['name']].'</div>';
break;

阿里云oss对象存储插件

经验分享wangchunfu 发表了文章 • 4 个评论 • 561 次浏览 • 2018-08-17 15:42 • 来自相关话题

亲自开发的阿里云oss对象存储上传插件,需要的自行下载,安装上就可以用!
亲自开发的阿里云oss对象存储上传插件,需要的自行下载,安装上就可以用!

关于框架中模块多数据库调用的方法探讨

经验分享小兔言言 发表了文章 • 1 个评论 • 613 次浏览 • 2018-03-05 16:11 • 来自相关话题

自己手中接到一个项目,是需要链接多个数据库的,结合百度的经验和自己的实践操作,分享一点小心得给大家。
首先我复制了application目录中的database.php,然后命名为database2.php,我的数据库是pgsql的
<?php
return [
// 数据库类型
'type' => 'pgsql',
// 服务器地址
'hostname' => '172.2.2.254',
// 数据库名
'database' => 'cmsdb',
// 用户名
'username' => 'postgres',
// 密码
'password' => 'postgres',
// 端口
'hostport' => '5432',
// 连接dsn
'dsn' => '',
// 数据库连接参数
'params' => [],
// 数据库编码默认采用utf8
'charset' => 'utf8',
// 数据库表前缀
'prefix' => 'dp_',
// 数据库调试模式
'debug' => true,
// 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
'deploy' => 0,
// 数据库读写是否分离 主从式有效
'rw_separate' => false,
// 读写分离后 主服务器数量
'master_num' => 1,
// 指定从服务器序号
'slave_no' => '',
// 是否严格检查字段是否存在
'fields_strict' => false,
// 数据集返回类型
'resultset_type' => 'array',
// 自动写入时间戳字段
'auto_timestamp' => false,
// 时间字段取出后的默认时间格式
'datetime_format' => false,
// 是否需要进行SQL性能分析
'sql_explain' => false,
];
然后修改application/config.php
增加以下代码:
$db_hikvision = require_once('database2.php');
//海康数据库配置
'db_hikvision' => $db_hikvision,这样配置部分就配置好了。
项目里面调用的时候就直接使用以下命令
$data_list = Db::connect('db_hikvision')
->table('oc_person')
->where($map)
->order($order)
->paginate();如果不加connect('db_hikvision')那么仍旧连接的是默认的数据库配置,希望能对大家有帮助!
当然在用thinkphp连接pgsql的时候,请在pgsql里面执行下:thinkphp\library\think\db\connector\pgsql.slq 这个文件 查看全部
自己手中接到一个项目,是需要链接多个数据库的,结合百度的经验和自己的实践操作,分享一点小心得给大家。
首先我复制了application目录中的database.php,然后命名为database2.php,我的数据库是pgsql的
<?php
return [
// 数据库类型
'type' => 'pgsql',
// 服务器地址
'hostname' => '172.2.2.254',
// 数据库名
'database' => 'cmsdb',
// 用户名
'username' => 'postgres',
// 密码
'password' => 'postgres',
// 端口
'hostport' => '5432',
// 连接dsn
'dsn' => '',
// 数据库连接参数
'params' => [],
// 数据库编码默认采用utf8
'charset' => 'utf8',
// 数据库表前缀
'prefix' => 'dp_',
// 数据库调试模式
'debug' => true,
// 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
'deploy' => 0,
// 数据库读写是否分离 主从式有效
'rw_separate' => false,
// 读写分离后 主服务器数量
'master_num' => 1,
// 指定从服务器序号
'slave_no' => '',
// 是否严格检查字段是否存在
'fields_strict' => false,
// 数据集返回类型
'resultset_type' => 'array',
// 自动写入时间戳字段
'auto_timestamp' => false,
// 时间字段取出后的默认时间格式
'datetime_format' => false,
// 是否需要进行SQL性能分析
'sql_explain' => false,
];
然后修改application/config.php
增加以下代码:
$db_hikvision = require_once('database2.php');
//海康数据库配置
'db_hikvision' => $db_hikvision,
这样配置部分就配置好了。
项目里面调用的时候就直接使用以下命令
$data_list = Db::connect('db_hikvision')
->table('oc_person')
->where($map)
->order($order)
->paginate();
如果不加connect('db_hikvision')那么仍旧连接的是默认的数据库配置,希望能对大家有帮助!
当然在用thinkphp连接pgsql的时候,请在pgsql里面执行下:thinkphp\library\think\db\connector\pgsql.slq 这个文件

关于用户权限多级

经验分享chuangsjh 回复了问题 • 2 人关注 • 2 个回复 • 828 次浏览 • 2018-03-03 10:28 • 来自相关话题

Tp5与Ucenter用户整合

经验分享wpcost 发表了文章 • 0 个评论 • 664 次浏览 • 2018-02-18 09:35 • 来自相关话题

Tp5中api开发中异常输出为html的问题

经验分享dragonlhp 发表了文章 • 0 个评论 • 557 次浏览 • 2018-02-05 20:06 • 来自相关话题

现在谁不开发接口的呢?但是在接口开发过程中,报错误异常后居然返回错误的信息依然是html信息!TP官方也不知道为啥不添加,说好的为接口而生,我的解决方案也很简单,把系统的异常处理类复制出来,去掉模板相关,直接以json方式输出;下面是解决方案:

1:按照TP扩展异常的方式引用这个文件
看云 /manual/thinkphp5_1/354092

2:判断一下配置文件的默认输出类型
配置文件:
    //    判断默认输出类型
    if ($app['default_return_type'] == 'json') {
        // 异常处理handle类 留空使用 \think\exception\Handle
        $app['exception_handle'] = '\\app\\common\\exception\\JsonException';
    }


    return $app;

  查看全部
现在谁不开发接口的呢?但是在接口开发过程中,报错误异常后居然返回错误的信息依然是html信息!TP官方也不知道为啥不添加,说好的为接口而生,我的解决方案也很简单,把系统的异常处理类复制出来,去掉模板相关,直接以json方式输出;下面是解决方案:

1:按照TP扩展异常的方式引用这个文件
看云 /manual/thinkphp5_1/354092

2:判断一下配置文件的默认输出类型
配置文件:
    //    判断默认输出类型
    if ($app['default_return_type'] == 'json') {
        // 异常处理handle类 留空使用 \think\exception\Handle
        $app['exception_handle'] = '\\app\\common\\exception\\JsonException';
    }


    return $app;

 

多表查询怎么写

经验分享dolphinphp 回复了问题 • 2 人关注 • 1 个回复 • 742 次浏览 • 2018-01-09 17:55 • 来自相关话题

关于linkages标签 三个选项框不能对应三层结构数据的问题

经验分享chhnang 发表了文章 • 0 个评论 • 479 次浏览 • 2017-10-23 16:13 • 来自相关话题

在做省市县三个选项框时, 经常出现 直辖市: 两级结构;  省: 四级结构(市多一个市辖区)  ,导致linkages标签不能愉快的使用, 在下做了一个数据调整,供大家参考!
在做省市县三个选项框时, 经常出现 直辖市: 两级结构;  省: 四级结构(市多一个市辖区)  ,导致linkages标签不能愉快的使用, 在下做了一个数据调整,供大家参考!

1.06升级1.07 快捷编辑都不能用【已解决】

经验分享hefeng 回复了问题 • 1 人关注 • 1 个回复 • 657 次浏览 • 2017-10-01 11:12 • 来自相关话题

text 文本框 的 input-group 类型

经验分享清风笑对人生 发表了文章 • 0 个评论 • 515 次浏览 • 2017-09-23 17:08 • 来自相关话题

修改了一下,可以支持按钮的添加
修改了一下,可以支持按钮的添加

关于升级到DolphinPHP1.0.7后,报错的解决办法

经验分享dolphinphp 发表了文章 • 2 个评论 • 1043 次浏览 • 2017-09-20 11:20 • 来自相关话题

1.升级后,打开页面报错







解决办法:
手动删除runtime目录下的所有缓存文件
 
2.自建模块报错








解决办法:
打开 \application\common\builder\table\Builder.php
将is_object($row_list[0]) 改为 is_object(current($row_list))
 
3.创建自定义表单项报错







解决办法:
打开 \application\common.php

if (!empty($_layout && isset($_layout[$form['name']]))) {
改为
if (!empty($_layout) && isset($_layout[$form['name']])) {
 
4.节点无法禁用和启用
下载“Menu.zip”附件,将Menu.php覆盖到 application\admin\controller
5.无法使用水印
 
下载“修复水印问题.zip”附件,覆盖到框架内

6.编辑模块顶级节点后,模块节点不显示的问题
 
下载“修复节点问题.zip”覆盖
 
7.表格顶部下拉菜单筛选超过2个时,样式错误的问题
 
下载“修正顶部下拉筛选样式问题.zip”覆盖
  查看全部
1.升级后,打开页面报错

QQ图片20170920111954.png



解决办法:
手动删除runtime目录下的所有缓存文件
 
2.自建模块报错


QQ图片20170920111738.png



解决办法:
打开 \application\common\builder\table\Builder.php
将is_object($row_list[0]) 改为 is_object(current($row_list))
 
3.创建自定义表单项报错


QQ图片20170920115149.png


解决办法:
打开 \application\common.php

if (!empty($_layout && isset($_layout[$form['name']]))) {
改为
if (!empty($_layout) && isset($_layout[$form['name']])) {
 
4.节点无法禁用和启用
下载“Menu.zip”附件,将Menu.php覆盖到 application\admin\controller
5.无法使用水印
 
下载“修复水印问题.zip”附件,覆盖到框架内

6.编辑模块顶级节点后,模块节点不显示的问题
 
下载“修复节点问题.zip”覆盖
 
7.表格顶部下拉菜单筛选超过2个时,样式错误的问题
 
下载“修正顶部下拉筛选样式问题.zip”覆盖
 

扩展表格按树状显示

经验分享freebirdy 发表了文章 • 2 个评论 • 1291 次浏览 • 2017-08-24 21:05 • 来自相关话题

先看显示效果




 
具体修改方法:
 
第一步:在table的Builder.php里面增加一个方法 setTreeMode/**
* 设置树状表格,此模式建议设置为无分页模式
* @param string $key 唯一标识字段
* @param string $pkey 父结点字段
* @param int $pos 可控制列位置,默认为0,即第一列
* @param int $expand 默认展开层级,默认为1
*/
public function setTreeMode($key = "id", $pkey = "pid", $pos = 0, $expand = 1)
{
if (!empty($key) && !empty($pkey)) {
$this->_vars['tree_mode'] = [
'key' => $key,
'pkey' => $pkey,
'pos' => $pos,
'expand' => $expand,
];
}
return $this;
}第二步:修改table的layout.html
 
找到 tbody元素,加入属性<tbody{present name='tree_mode'} id="tree_table" expand="{$tree_mode.expand|default=1}" pos="{$tree_mode.pos|default=0}"{/present}</tbody>在tbody的循环体的tr里面,加入属性<tr class="{$row['_tr_class']|default=''}"{present name='tree_mode'} id="{$row[$tree_mode['key']]}" pid="{$row[$tree_mode['pkey']]}"{/present}></tr>
第三步:下载附件 treeTable.zip,解压后放至 __LIBS__ 目录,并利用dolphinPHP引入css和js的方法,将相应的JS和CSS文件引入,即可

第四步:加入树特效的执行代码,可以放到layout.html,也可以引入自定义的js文件$('#tree_table').treeTable({
expandLevel:$('#tree_table').attr("expand"),
column:$('#tree_table').attr("pos")
}); 
第五步:在控制器输出表格之前调用 setTreeMode 方法return ZBuilder::make('table')
....
->setTreeMode("id", "pid", 1, 99)
->noPages() //建议使用无分页模式,取数据的时候,一次性将数据取出来
->fetch();

记↓得↓不↓要↓忘↓了↓下↓载↓附↓件!
  查看全部
先看显示效果
1.png

 
具体修改方法:
 
第一步:在table的Builder.php里面增加一个方法 setTreeMode
/**
* 设置树状表格,此模式建议设置为无分页模式
* @param string $key 唯一标识字段
* @param string $pkey 父结点字段
* @param int $pos 可控制列位置,默认为0,即第一列
* @param int $expand 默认展开层级,默认为1
*/
public function setTreeMode($key = "id", $pkey = "pid", $pos = 0, $expand = 1)
{
if (!empty($key) && !empty($pkey)) {
$this->_vars['tree_mode'] = [
'key' => $key,
'pkey' => $pkey,
'pos' => $pos,
'expand' => $expand,
];
}
return $this;
}
第二步:修改table的layout.html
 
找到 tbody元素,加入属性
<tbody{present name='tree_mode'} id="tree_table" expand="{$tree_mode.expand|default=1}" pos="{$tree_mode.pos|default=0}"{/present}</tbody>
在tbody的循环体的tr里面,加入属性
<tr class="{$row['_tr_class']|default=''}"{present name='tree_mode'} id="{$row[$tree_mode['key']]}" pid="{$row[$tree_mode['pkey']]}"{/present}></tr>

第三步:下载附件 treeTable.zip,解压后放至 __LIBS__ 目录,并利用dolphinPHP引入css和js的方法,将相应的JS和CSS文件引入,即可

第四步:加入树特效的执行代码,可以放到layout.html,也可以引入自定义的js文件
$('#tree_table').treeTable({
expandLevel:$('#tree_table').attr("expand"),
column:$('#tree_table').attr("pos")
});
 
第五步:在控制器输出表格之前调用 setTreeMode 方法
return ZBuilder::make('table')
....
->setTreeMode("id", "pid", 1, 99)
->noPages() //建议使用无分页模式,取数据的时候,一次性将数据取出来
->fetch();

记↓得↓不↓要↓忘↓了↓下↓载↓附↓件!
 

关于出现“服务器发送错误~”提示信息时如何排错的方法

经验分享dolphinphp 发表了文章 • 3 个评论 • 882 次浏览 • 2017-07-26 16:58 • 来自相关话题

如果在开发过程中,出现“服务器发送错误~”的提示信息,请打开chrome的浏览器调试工具,打开“network”标签,找到红色报错的链接,然后点击。
 




然后切换到“preview”标签即可查看服务器返回的错误信息,根据信息排查即可。





  查看全部
如果在开发过程中,出现“服务器发送错误~”的提示信息,请打开chrome的浏览器调试工具,打开“network”标签,找到红色报错的链接,然后点击。
 
QQ截图20170726164004.png

然后切换到“preview”标签即可查看服务器返回的错误信息,根据信息排查即可。

QQ截图20170726165730.png

 

关于1.0.5版本,文件或图片上传出错的解决办法

经验分享dolphinphp 发表了文章 • 4 个评论 • 1030 次浏览 • 2017-07-13 15:16 • 来自相关话题

下载补丁,覆盖即可。
 
此问题由于误删除代码造成的,给大家带来不便了,抱歉。
 
也可以重新在官网下载完整补丁,或者下载完整版。
下载补丁,覆盖即可。
 
此问题由于误删除代码造成的,给大家带来不便了,抱歉。
 
也可以重新在官网下载完整补丁,或者下载完整版。

IIS 7.下面URL Rewrite的路由配置

经验分享小兔言言 发表了文章 • 0 个评论 • 1045 次浏览 • 2017-06-28 22:17 • 来自相关话题

海豚PHP的源码Rewrite配置是针对Linux下面的Apache设置的.htaccess,但是像我使用的是Windows Server IIS 7的用户来说,需要手动设置URL Rewrite的规则,才可以使得前台通过index.php路由访问正常,具体的做法很简单,安装好Rewrite组件后,在网站根目录下新建一个web.config,然后复制以下内容,保存后,前台即可路由正常了
<?xml version="1.0" encoding="UTF-8"?>  
<configuration>  
  <system.webServer>  
    <rewrite>  
      <rules>  
        <rule name="thinkPhp" enabled="true" stopProcessing="true">  
          <match url=".*" />  
          <conditions logicalGrouping="MatchAll">  
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />  
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />  
          </conditions>  
          <action type="Rewrite" url="index.php/{R:0}" />  
        </rule>  
      </rules>  
    </rewrite>  
  </system.webServer>  
</configuration> 查看全部
海豚PHP的源码Rewrite配置是针对Linux下面的Apache设置的.htaccess,但是像我使用的是Windows Server IIS 7的用户来说,需要手动设置URL Rewrite的规则,才可以使得前台通过index.php路由访问正常,具体的做法很简单,安装好Rewrite组件后,在网站根目录下新建一个web.config,然后复制以下内容,保存后,前台即可路由正常了
<?xml version="1.0" encoding="UTF-8"?>  
<configuration>  
  <system.webServer>  
    <rewrite>  
      <rules>  
        <rule name="thinkPhp" enabled="true" stopProcessing="true">  
          <match url=".*" />  
          <conditions logicalGrouping="MatchAll">  
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />  
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />  
          </conditions>  
          <action type="Rewrite" url="index.php/{R:0}" />  
        </rule>  
      </rules>  
    </rewrite>  
  </system.webServer>  
</configuration>

表格页面的时间快捷编辑无法使用的解决方法

经验分享dolphinphp 发表了文章 • 0 个评论 • 712 次浏览 • 2017-06-09 16:51 • 来自相关话题

打开
application\admin\view\layout.html
 
大概439行左右,添加
<script src="__LIBS__/bootstrap-datetimepicker/moment.min.js"></script>




  查看全部
打开
application\admin\view\layout.html
 
大概439行左右,添加
<script src="__LIBS__/bootstrap-datetimepicker/moment.min.js"></script>

QQ截图20170609164740.png