[原创] OneThink模型管理详解-10分钟创建一个团队管理后台

本文为原创,根据自己在使用onethink创建web应用时的真实经历撰写而成。请支持本人版权,转载时注明出处。仅为经验分享,不代表权威,不完善不准确之处欢迎纠正,有任何问题可对本文留言。

1.1.1  Onethink模型管理是什么?如何工作的?如何调试?

  • Onethink可以让你图形化的创建新模型,创建对应的SQL表,并且记录模型的所有属性,于是可以在【模型管理】中查看-编辑模型属性-字 段,以及查看该模型的所有数据。Onethink通过ThinkController以及ModelModel来实现对这些模型的管理-编辑-新增-删除 -数据展示-数据删除-数据新增等功能。

  • 更为重要的是,你也可以在Admin下调用这些现成的功能。比如说你的系统肯定要为客户提供一个管理员后台界面,里面要对某些业务表的数据进行展 示-编辑-新增-删除。你可以让你的Controller继承ThinkController,view复制Think目录下的内容,无需Model,功 能就做好了。(后面会提供一个例子来说明)

  • 需要注意的是,Onethink的模型管理不会为你创建Controller/Model/View这些文件,你可以手动创建需要的东西来完全控制你的模型。

  • Onethink模型管理的原理就是,你通过模型管理界面创建了模型,Onethink会把模型相关的信息存储在onethink_model以 及onethink_attribute 中。通过ModelModel获取该模型的各种属性和配置,通过ThinkController完成对该模型的展示-新增-删除-更新控制。各种操作的表 单提交使用Jquery的Ajax,在js中有各种实现。操作结果的提示通过AjaxReturn显示在Admin顶部的一个hidden div中,1500毫秒后消失。即便是$this->success/error也是这样。因此跟Home下各种提示会跳到一个新页面是不同的。

  • 非常需要注意的是,trace和dump会影响Ajax对response的解析,你会发现某些提交死在那里,打开Firebug-网络 -Post-响应,会看到parser XXXX错误提示,就是这个原因。关闭调试模式,去除trace和dump会让一切回归正常。那如何调试?

    • 你可以把需要跟踪的变量记录到log中,\Think\Log::record(‘Team->del: ‘.$var,’DEBUG’);,打开\Runtime\Logs\Admin今天的log文件,最下面就是最近的log信息。

    • 你也可以通过$this->error/success输出调试信息。对于array类型的变量你可以 ob_start();var_dump($variables); $data = ob_get_clean(); $data即为array详细信息字符串(用了ob操作让var_dump的结果返回到$data而不是客户端)

    • 你还可以$return[‘status’] = 0; $return[‘info’]   = ‘mydebug: ‘.$var; $this->ajaxReturn($return);

    • 注意第二种第三种方法都会影响逻辑的继续执行,一般用在分步骤快速调试。

1.1.2  如何用Onethink模型管理快速创建新模型-实战案例-包括分析

  • 系统-模型管理-新增:创建一个新模型,可以是基于原有文档模型,也可以是新的独立模型。如果模型有标题-内容-封面图-评论-浏览数等属性,就 最好基于文档模型,添加自己特殊的字段,复用原来的字段,多余的基础字段不用就是了,虽然浪费了一些存储,但可以reuse框架关于文档模型的很多功能。

  • 如何新增一个独立模型?

    • 【字段管理】-新增,【字段名】就是SQL数据表的字段名-英文,【字段标题】是字段在Onethink框架里显示的名称-中文,【字段类型】根 据需要选择,【字段定义】一般为空,也可以count或sum,枚举/多选字段的可选项在【参数】中设置,0:选项1(换行)1:选项2…以此类推,分隔 符是英文的冒号。【字段备注】会显示在表单该字段上。

    • 【表单显示分组】是指在编辑或新增该模型数据的界面中可以分成几个tab来显示各个字段。比如你新建的是一个存储配置的模型,可以分成基础配置, 高级配置,系统配置三个界面分别显示不同level的字段。1:基础配置,2:高级配置,3:系统配置,分隔符是英文的冒号和逗号。

    • 【表单显示排序】用来规划各个字段在新增/编辑界面中的显示顺序,以及分组(如果配置了刚才的分组)。字段创建的顺序无法修改,在【字段管理】中能看到,但是显示的顺序你可以调整。

    • 【列表定义】是指onethink如何显示该模型的每个字段的数据,可以原样显示,可以获取数据后调用函数显示返回结果,还可以添加edit/del这些操作链接。具体请看onethink自身的document模型的配置,或者下面的实例。

    • 在【高级】页面中还有各种操作的模板定义,用来告诉Onethink在模型管理中如果点开了该模型的展示-编辑-新增界面,该如何显示。

    • 以上所有信息都会存储在onethink_attribute中,由onethink统一管理,于是onethink可以图形化的提供对于该模型的各种功能。

    • 对应的MySQL数据表已经创建,暂时没有数据。

    • 没有生成对应的Controller/Model/View,onethink通过ThinkController以及ModelModel以及Think/View来完成该模型的各种操作。

    • 系统-模型管理-新增:【模型标识】就是数据表的名字-英文,【模型名称】就是显示在模型管理中的名称-中文,引擎选MyISAM,主键yes, 确定后,该模型信息会存储在onethink_model中,由onethink统一管理。此时模型对应的MySQL数据表还没有建立,因为还没创建字 段。

    • 选该模型最右边的【编辑】,进入【设计】页,

    • 来看一个例子,新建了一个team模型,存储团队成员信息,包括成员名称,成员昵称

    • 1 2

    • 3

  • 新增模型数据

    • 模型管理-该模型右侧-数据

    • 当前是空的,没有数据,但是所有的列都展示出来了,此时onethink就是根据你当时创建该模型时定义的各种字段及其属性,以及【列表定义】的配置,完成数据的展示。

    • 新增,出现新增页面,此时Onethink就是根据你当时创建该模型时定义的【表单显示分组】【表单显示顺序】,完成该表单的展示。填好数据,点 确定,此时Onethink通过Ajax提交给【s=/Think/add/model/7.html】完成数据新增操作(7是该模型的编号,在模型管理 中可以看到),操作完成后通过Ajax Response返回结果提示,js的updateAlert会获取提示信息,显示在之前隐藏的top_alert div中。查看网页源代码搜索top_alert你可以看到这个隐藏的div id=”top-alert”。这个div是在\Admin\View\Public\base.html中定义的,Admin下的所有 view/*.html都是extend这个基础模板。因此如果你遇到提示出不来,但是response又确实解析正确,可以看看是不是没有extend 基础模板。

    • 新增的bug:如果你在新增页面点击‘返回’,应该是不起作用。(我用的1版本是这样的)打开Admin\View\Think \add.html找到<a class=”btn btn-return” href=”javascript:;”>返 回</a>,可以看到href是空的js,修改为
      <a class=”btn btn-return” href=”javascript:history.back(-1);”>返 回</a> 就ok了。

  • 为该模型定制一个管理TAB

    • 到目前为止,我们通过Onethink的模型管理轻松的创建了一个新的Model,添加了数据,通过模型管理可以很容易的维护它。Very good。但是我们不会为客户提供这个管理界面不是么?所以要定制一个管理TAB,未来放到为客户定制的管理页面中,接下来的实战中你会深入理解如何重用 Onethink的代码加速你的开发。Onethink不仅为你提供了一个框架,可以图形化的轻松操作一切,还为你提供了很多模块可以重用,因为它既然可 以做到,你就可以resue它为你服务。

    • 系统-菜单管理-新增:标题-团队,排序-0,链接-Team/Index,上级菜单-顶级菜单,说明-团队成员配置

    • 4

    • 于是,管理页面顶部,最左边,多了一个【团队】TAB。它会调用Team/Index,但是现在它还不能工作,因为没有对应的Controller

    • Application\Admin\Controller新建TeamController.class.php,它要继承ThinkController,代码少得难以想象。

<?php

// +———————————————————————-

// | OneThink [ WE CAN DO IT JUST THINK IT ]

// +———————————————————————-

// | Copyright (c) 2015 http://www.cleanbing.cn All rights reserved.

// +———————————————————————-

// | Author: 原子力量 <http://www.cleanbing.cn>

// +———————————————————————-

 

namespace Admin\Controller;

 

/**

* 团队成员控制器

* @author 原子力量 <http://www.cleanbing.cn>

*/

class TeamController extends ThinkController {/*注意是继承ThinkController而不是AdminController*/

private $model_name = ‘team'; /*在OneThink模型管理中查看自己模型标识(不是名称)修改此处*/

 

/**

* 团队成员管理首页

* @author 原子力量 <http://www.cleanbing.cn>

*/

public function index(){

$this->lists(); /*系统会调用View/Team/index.html来显示*/

}

 

public function lists( $model = null ){

parent::lists( $this->model_name ); /*系统会调用View/Team/list.html来显示*/

}

 

public function add( $model = null ){

$model = M(‘Model’)->getByName( $this->model_name ); /*通过Model名称获取Model完整信息*/

parent::add( $model[‘id’] ); /*系统会调用View/Team/add.html来显示*/

}

 

public function edit( $model = null, $id = 0 ){

$id || $this->error(‘请选择要编辑的用户!’);

$model = M(‘Model’)->getByName( $this->model_name ); /*通过Model名称获取Model完整信息*/

parent::edit( $model[‘id’], $id ); /*系统会调用View/Team/edit.html来显示*/

}

public function del( $model = null, $ids=null ){

$model = M(‘Model’)->getByName( $this->model_name ); /*通过Model名称获取Model完整信息*/

parent::del( $model[‘id’], $ids ); /*没有页面,只有Ajax提示返回,不需要View/Team/del.html*/

}

}

  • 正如你看到的,核心操作都是调用的parent即ThinkController的代码。Thinkcontroller会通过 ModelModel访问onethink_model和onethink_attribute表,那里面存储了所有被管理的模型-字段-配置信息,接着 会访问你的模型对应的数据表获取数据,然后按照你的view进行展示。

  • 通常我们最头疼的是不同模型有不同的字段,各种字段包括图片,日期,枚举,多选项都要不同展示和编辑,真的很麻烦,各种操作界面的html为了这 些字段不得不花很多时间去定制。接下来的事情可能会让你大跌眼镜。创建目录Application\Admin\View\Team并拷贝 \Application\Admin\View\Think的html,edit.html,lists.html,是的,是拷贝。不需要任何改动。然 后再创建一个index.html,oh,它只有一行内容:<include file=”lists” />

  • ok了,是的,ok了,现在去点左上角的【团队】,模型数据表会展示出来,而且有【新增】【删除】【编辑】,而且它们都可以完美的工作了,支持图片字段,附件字段,日期字段。。。可以新增,删除会有确认提示,所有操作都有结果提示。

  • 本实战案例暂时到此结束。欢迎留下你的任何问题。

  • 5

  • 6

  • 7

  • 8

我的站点及原文:http://www.cleanbing.cn/onethink_model_manage/
我在tower上基于Onethink的更多开源开发,欢迎你的加入!


转载于:https://my.oschina.net/cleanbing/blog/467906

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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(新版)
OneThink是一个开源的内容管理框架,基于最新的ThinkPHP3.2版本开发,提供更方便、更安全的WEB应用开发体验,采用了全新的架构设计和命名空间机制,融合了模块化、驱动化和插件化的设计理念于一体,开启了国内WEB应用傻瓜式开发的新潮流。   [ 功能特性 ] 主要特性: 基于ThinkPHP最新3.2版本。 模块化:全新的架构和模块化的开发机制,便于灵活扩展和二次开发。 文档模型/分类体系:通过和文档模型绑定,以及不同的文档类型,不同分类可以实现差异化的功能,轻松实现诸如资讯、下载、讨论和图片等功能。 开源免费:OneThink遵循Apache2开源协议,免费提供使用。 用户行为:支持自定义用户行为,可以对单个用户或者群体用户的行为进行记录及分享,为您的运营决策提供有效参考数据。 云端部署:通过驱动的方式可以轻松支持平台的部署,让您的网站无缝迁移,内置已经支持SAE和BAE3.0。 云服务支持:即将启动支持云存储、云安全、云过滤和云统计等服务,更多贴心的服务让您的网站更安心。 安全稳健:提供稳健的安全策略,包括备份恢复、容错、防止恶意攻击登录,网页防篡改等多项安全管理功能,保证系统安全,可靠、稳定的运行。 应用仓库:官方应用仓库拥有大量来自第三方插件和应用模块、模板主题,有众多来自开源社区的贡献,让您的网站“One”美无缺。   OneThink只是一个内容管理框架,并不是一个真正意义的CMS,所以你不会看到很多的功能,也不要因此而抱怨,因为一切功能都来自于您的创造或者大家的分享。这才是OneThink的理念和定位。OneThink集成了一个完善的后台管理体系和前台模板标签系统,让你轻松管理数据和进行前台网站的标签式开发。   后台主要功能: 用户Passport系统 配置管理系统 权限控制系统 后台建模系统 多级分类系统 用户行为系统 钩子和插件系统 系统日志系统 数据备份和还原 利用OneThink现有的后台功能和标签库机制,你可以轻松的定制或者开发基于OneThink的网站和应用。   [ 系统安装 ] 将OneThink压缩包解压至一个空文件夹,并上传它。 首次在浏览器中访问index.php,将会进入安装向导。 按照安装向导完成安装。若在安装过程中出现问题,请访问官网讨论区寻求帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值