onethink入门笔记(一)

本文分享了Onethink框架的使用心得,包括数据库配置、分页、样式修改、前后台交互技巧,以及导出CSV和Excel的实用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

onethink入门笔记(一)

由于公司需求所以大概花了一个星期搞了一个一个基于onethink的数据管理平台demo不得不说onethink这个基于thinkphp3.2.3的框架还是很棒的 让我这个没基础过php的人也能在一星期能搞出东西来整理一下所遇到的坑 希望能给看到这篇文章的你有所帮助

首先安装onethink   

1.连接数据库

 由于onethink是基于mysql的如果你需要用mongo的话需要做数据表迁移由于后台权限逻辑本来就不适合mongo来搞 所以这里建议用mysql如果需求需要mongo数据库那么最好用mysql和mongo数据库结合的方式那么坑就来了

由于thinkphp的原因它本身对mongo的扩展没那么好 亲测 如果mongo为主mysql为辅 使用官方介绍的方法切换数据库完全没问题 反过来那就蛋疼了thinkphp官方接锅需要改底层代码 我这里说具体的解决方案尽量不改源代码 首先参考手册介绍的在common 文件夹下的config里的mysql的链接配置后将mongo数据库的信息写入如下图:(注意这里mongo的表前缀写与不写无所谓由于thinkphp问题(bug)导致它只会用全局的即上面mysql的前缀     解决方法见这里

接下来在Model在新建例如BooksModel.class.php内容如下(thinkphp底层会将表名强行转成小写所以这里使用$trueTableName绕过转化否则会找不到表 也可以采用这里的方法改底层文件):

 

 然后你就可以愉快的在BooksController操作使用D("Books")进行数据库的操作这里的 M方法不能用会报找不到表错误的信息仔细一看还是表前缀出的问题(官方背锅M方法里面的也是用的全局前缀你可以通过修改解决)

2.onethink的分页

你可以参考onthink 的ConfigController里的内容 它实现分页是通过红线标出的这一句继承自AdminController 里的lists你可以查看它使用方法这里有更为详细的介绍可以自己去实例化lists

 

3.onethink给的增删改例子都是在mysql下的这里提供在mongo下的增删改供参考

增:

(1)如果你也是将edit和add用一个页面采用在表单里隐藏_id的方法 注意这里有坑先看一下下面的edit的实现由于create方法创建时会把表单里的隐藏的空的_id(如果你name里不用_id那就会在新增时新创建这个为空的垃圾字段)拉过来导致数据新增失败这里采用在Model里写:

 

 或者使用field方法详细介绍见这里

 

后台新增方法:

注意这里如果你想获得插入的id可以通过下面的方法 我是用$id = $book->add()返回是空

 

删:

onethink给的menu和config都有点问题这里给出我的

界面显示效果:

 

批量删除按钮:

需要批量删除的对象name命名和进行单一删除对象命名一个是id[]另一个是id

后台删除方法:

改:

前台:这里貌似一定要使用_id

后台方法:

 

 4.样式修改

onethink 里a 标签实现鼠标放上去显示下划线使用的是border-bottom的方式 使用border:none 进行覆盖 text-decoration:none 是无效的   这个坑 坑了我好久wtf

 

onethink入门笔记(二)

5.onethink页面端获得后台服务器传值的方法

1:一般后台通过assign的值前台通过{$value}显示出来;

2:如果需要在js中使用 则可以通过 在js中写 var m = "{$value}"得到传来的值 注意这里的js需要与html在同一页面 不是封装的js

3:如果需要在dom元素中通过自定义属性获得后台传值 可以这样:<a  del ="{$value}" url="{:U('books/del')}">删除</a>这里的del 即为自定义的属性可以通过 this.del获得del中暂存的数据 this为前面的a标签

4.如果后台穿的是一个数组 则前台可以通过使用volist或者foreach标签进行 遍历 可以通过组合if 或者 neq eq 等标签进行组合判断

例如:

<foreach name="category" item="vo">

<neq name="category_id" value="$key">

<a href="{:U('books/index?category='.$key)}">

{$vo}</a>

<else/>

<strong>

{$vo}

</strong>

</neq>

</foreach>

 

或者:

<volist name="search_type" id="res" >

<if condition ="I('search') eq $key ">

<option value="{$key}" selected >

{$res}

</option>

<else/>

<option value="{$key}" >{$res}</option>

</if>

</volist>

6.onethink 通过url传值的方法

通常你可以通过url传一个变量例如:

<a title="资源" href="{:U('Resource/index?search=ry_book_id&content='.$book['bo_book_id'])}">

如果你想通过url里传多个变量的话

则需要使用js来拼接url 可以采用下面的方式:

html:

<a class="sch-btn" href="javascript:;" id="search" url="{:U('books/index')}"><i class="btn-search"></i></a>

js:

$("#search").click(function()

{

var url = $(this).attr('url');

var query = $('.search-form').find('input').val();

//去空格 var search = 'search=' + $("#search_type").val();

query = '&content=' + $.trim(query);

if (url.indexOf('?') > 0)

{ url += '&' + search + query; }

else

{ url += '?' + search + query; }

window.location.href = url; });

 

php使用ajax导出CSV或者EXCEl(thinkphp)方法

首先我强烈推荐看到这篇文章的你将导出文件设置为csv格式的文件 实际测试导出csv文件的速度是excel文件的10几倍左右

首先我先介绍csv文件的导出的方法:

如果你单纯是在数据导出界面上通过用户点击生成csv或者excel按钮通过服务器往浏览器输出excel或者csv 如果数据量小的化可以使用这样的方法(这种方法无法使用ajax)网上百度一下一堆介绍

这里有较为详细的方法介绍 和源码

我这里介绍的是 当数据量比较大时比如生成excel或者csv文件可能需要 几分钟这时候我们需要在用户点击生成按钮后先生成一个loading框阻止用户随意乱点 将excel或者 csv文件先导出到

服务器端后然后通过ajax方法返回给浏览器一个下载地址用户点击下载地址后下载文件

1.导出csv的话非常简单

核心生成代码:

//这里传入的$data为二维数组

//即为$data = ( array ,array,array)

function create_csv($data,$filename='simple.xls')

{

ini_set('max_execution_time', '0');

//这里的CSV即你项目的根目录下新建一个CSV文件夹

$path = ('CSV/'.iconv('UTF-8','gb2312',$filename));

$fp = fopen($path, 'w');

foreach( $data as $k => $v)

{

foreach ($v as $key => &$value)

{

//将数据值进行在编码 避免中文乱码问题

$value = iconv('UTF-8','gb2312',$value);

}

fputcsv($fp, $v); }

fclose($fp);

$result = array( 'status' => 1, 'path' =>'CSV/'.$filename );

return $result;

exit;

}

后台调用代码:

public function generate()

{

 

//这里data需要处理为二维数据及最终为 $data = (array,array,array)这样

$data = array();

$excel_title =array( "_id" , "bo_subject", );

array_push($data,$excel_title);

...处理真实数据并将其push入$data中

 $result = create_csv($data,$filename);

$this->ajaxReturn($result);

}

前台通过jquery进行post:建议先去学习一下layer这个弹出层组件特别不错传送门

代码:

<button style=" float: right;" class="btn" id="generate" url="{:U('generate')}">生成</button>

$('#generate').click(function(event)

{

var url = $(this).attr('url');

//loading层

var index = layer.load(1);

function download(content)

{

layer.open({

type: 1,

content: content,

skin: 'layui-layer-demo',

//样式类名

closeBtn: 1,

shift: 0,

area: ['200px', '105px'],

shadeClose: true,

//开启遮罩关闭

content:content }); }

$.post(url, function(data) {

if (data.status)

{

layer.close(index);

data.path = '__ROOT__' +'/'+(data.path);

var test = '<a class="download" href =' + data.path + ' target="_blank" >点击下载</a>';

download(test); }

else {

layer.close(index);

layer.alert('出现错误') } }, "json"); });

2.导出excel:(导出excel特别慢 适用场景为更复杂的问题比如导出字体的颜色大小排版控制 并且导出图片之类)

首先我们需要引入phpexcel这个插件下载完后去掉没必要的放在 /ThinkPHP/Library/Vendor/PHPExcel

 注意目录结构为如图 

 

核心函数为:

function create_xls($data,$filename='simple.xls')

{

ini_set('max_execution_time', '0');

Vendor('PHPExcel.PHPExcel');

$phpexcel = new PHPExcel();

$phpexcel->getProperties() ->setCreator("HYZ") ->setLastModifiedBy("HYZ") ->setTitle("Office 2007 XLSX Test Document") ->setSubject("Office 2007 XLSX Test Document") ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.") ->setKeywords("office 2007 openxml php") ->setCategory("Test result file");

$phpexcel->getActiveSheet()->fromArray($data);

$phpexcel->getActiveSheet()->setTitle('Sheet1');

$phpexcel->setActiveSheetIndex(0);

function saveExcelToLocalFile($objWriter,$filename)

{

// make sure you have permission to write to directory

$filePath = 'Excel/'.$filename; $objWriter->save($filePath); return $filePath; }

// 导出到本地语法 $objWriter = new PHPExcel_Writer_Excel5($phpexcel);

// 导出到界面语法

// $objwriter = PHPExcel_IOFactory::createWriter($phpexcel, 'Excel5');

saveExcelToLocalFile($objWriter,iconv('utf-8','gb2312',$filename));

$response = array( 'result' => 1, 'url' =>'Excel/'.$filename );

return json_encode($response);

exit;

}

 其他的部分基本可以参考生成csv的一样

OneThink个开源的内容管理框架,基于最新的ThinkPHP3.2版本开发,提供更方便、更安全的WEB应用开发体验,采用了全新的架构设计和命名空间机制,融合了模块化、驱动化和插件化的设计理念于体,开启了国内WEB应用傻瓜式开发的新潮流。   [ 功能特性 ] 主要特性: 基于ThinkPHP最新3.2版本。 模块化:全新的架构和模块化的开发机制,便于灵活扩展和二次开发。 文档模型/分类体系:通过和文档模型绑定,以及不同的文档类型,不同分类可以实现差异化的功能,轻松实现诸如资讯、下载、讨论和图片等功能。 开源免费:OneThink遵循Apache2开源协议,免费提供使用。 用户行为:支持自定义用户行为,可以对单个用户或者群体用户的行为进行记录及分享,为您的运营决策提供有效参考数据。 云端部署:通过驱动的方式可以轻松支持平台的部署,让您的网站无缝迁移,内置已经支持SAE和BAE3.0。 云服务支持:即将启动支持云存储、云安全、云过滤和云统计等服务,更多贴心的服务让您的网站更安心。 安全稳健:提供稳健的安全策略,包括备份恢复、容错、防止恶意攻击登录,网页防篡改等多项安全管理功能,保证系统安全,可靠、稳定的运行。 应用仓库:官方应用仓库拥有大量来自第三方插件和应用模块、模板主题,有众多来自开源社区的贡献,让您的网站“One”美无缺。   OneThink只是个内容管理框架,并不是个真正意义的CMS,所以你不会看到很多的功能,也不要因此而抱怨,因为切功能都来自于您的创造或者大家的分享。这才是OneThink的理念和定位。OneThink集成了个完善的后台管理体系和前台模板标签系统,让你轻松管理数据和进行前台网站的标签式开发。   后台主要功能: 用户Passport系统 配置管理系统 权限控制系统 后台建模系统 多级分类系统 用户行为系统 钩子和插件系统 系统日志系统 数据备份和还原 利用OneThink现有的后台功能和标签库机制,你可以轻松的定制或者开发基于OneThink的网站和应用。   [ 系统安装 ] 将OneThink压缩包解压至个空文件夹,并上传它。 首次在浏览器中访问index.php,将会进入安装向导。 按照安装向导完成安装。若在安装过程中出现问题,请访问官网讨论区寻求帮助。
OneThink源码最新官方版,OneThink V1.0.130929 开发版发布,V1.0.130929开发版本在中秋发布的1.0beta版本的基础上,做了些架构的改进和优化,功能部分也有所增加,以及个别用户体验的改进。(详细参考后面的更新日志) 如果没有特别通知,国庆假期后每周五会出新的开发版本,用于修正BUG和优化,以及新功能体验。 在正式版发布之前,BUG反馈和建议请到 http://www.thinkphp.cn/topic/onethink.html 文档工作我们正在紧张整理中,再次感谢大家对OT的关注和支持,你们的努力让OT走的更远! OneThink v1.0.131011,注意事项:1、再次提醒,OneThink安装要求PHP5.3+版本,否则会出错。2、目前开发版不支持升级功能,所以请备份好之前的数据和文件后重新安装。3、因为插件机制调整,如果自己有开发过插件,请注意按照新的插件命名和方法进行调整。 4、目前不支持BAE,SAE的支持会在正式版发布的时候增加。 更新日志: [ 1.0.131011开发版 ] + 新增 导航管理支持层级 + 新增 数据备份 + 新增 "内容"增加"目录文档"导入功能 + 改进 "系统/配置管理"列表支持分页和搜索 + 改进 文档标识只需在同根节点下不重复 + 改进 富文本编辑器可以设置高度 + 修复 “内容” 左侧菜单不显示二级以上分类bug; + 修复 如果后台回收站没有数据时,点击清空,会把所有文章数据都清空 + 修复 草稿不能发布的问题 更新日志: [ 1.0.131025开发版 ] + 独立模型的创建,字段的创建,支持通过已有数据表导入模型 + 独立模型字段排序 + 数据列表的定制,可自由定制显示列 + 新增和编辑表单的自动生成 (目前支持的类型有限,下周继续完善) + 权限管理添加按模型授权支持 [ 1.0.131018开发版 ] + 新增 数据库备份支持压缩功能 + 新增 数据库压缩功能可以配置是否开启,并可以设置压缩级别 + 新增 数据库还原功能 + 新增 插件入口文件$info属性增加url字段,用于配置插件官网url, 没配置则链接到插件上传者onethink官网用户中心(目前连接到onethink官网首页) + 新增 基础文档表新增root字段,便于子文档的搜索及其他操作 + 新增 分类的移动和合并操作 + 新增 后台添加新用户功能 + 新增 后台用户搜索功能 + 新增 Upload上传增加SAE驱动 * 完善 文档的标识只在同根节点下不重复 - 修复 批量导入没有进行自动验证和自动完成 - 修复 文档外链获取链接错误BUG # 变更 编辑器插件markdown编辑变更为 thinkeditor(新版)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值