1、ThinkOX 二次开发手册 想天软件工作室1ThinkOX 开发手册想天软件工作室ThinkOX 二次开发手册 想天软件工作室2版本号 修订人 修订时间 备注0.01 蔡培超、陈一枭 2014.4.4 初稿0.02 陈一枭 2014.4.23 补充 AdminBuilder 搜索部分,JS 常用函数部分,重新排版0.03 陈一枭 2014.4.26 补充点赞插件0.04 陈一枭 2014.5.4 补充模态窗口0.05 陈一枭 2014.6.18 补充后台权限0.06 陈一枭 2014.6.18 加入目录结构说明,排版0.07 陈一枭 2014.7.1 加入控制器的 SEO 优化说明Think
2、OX 二次开发手册 想天软件工作室3目录目录 3一、 文件结构 4二、 常用函数 5(一) PHP 函数 5(二) JS 函数 6三、 后台管理页面 6(一) 后台权限约定 .6(二) 配置页面 .6(三) 列表页面 .8(四) 排序页面 .9四、 积分提示 .10五、 点赞插件的使用 10六、 模态窗口的使用 10ThinkOX 二次开发手册 想天软件工作室41、文件结构+Addons 插件目录+Application 模块目录+Admin 后台模块+Api Api 模块,放置一些可用于手机应用开发的接口+Common 公共模块,放置一些通用的模型,视图模板+Forum 贴吧模块+Home
3、主模块,主要包含了登陆和注册的页面+Install 程序安装模块+Issue 专辑模块+People 会员模块+User 用户中心,只存放用户中心的接口,没有模板+Usercenter 新增的个人中心,资料修改等的操作均放于此+Weibo 微博模块+Data 数据库备份文件存放处+Database 存放临时的 sql 升级。+Public 静态文件存放处,一般存放 js 和 css+static 公共静态文件+oneplus 存放 thinkox 的 css 和 js+css 样式-oneplus.less 样式的 less 模板-oneplus.css 通过 less 编译生成的样式+js
4、js 文件+ext 第三方 js 插件+atwho 插件+magnific 弹窗插件+placeholder input 组件占位符 IE8 兼容插件+slimscroll 滚动条插件+toastr 提示插件+images 公共用到的图片+QuickPacks v0.5 版新增的补丁存放位置+Runtime 动态缓存存放文件夹+Thinkphp TP 内核+Uploads 上传文件夹+Avatar 头像存放文件夹ThinkOX 二次开发手册 想天软件工作室52、常用函数(1)PHP 函数is_login()返回当前登录的用户编号。如果没有登录,则返回 0。op_t($text)过滤 html
5、代码,防止 XSS。参数:$text 字符串。返回值:经过过滤的字符串。getPagination($totalCount, $countPerPage=10)获取翻页 html 代码。参数:$totalCount:数据总数。$countPerPage:每页显示的数据数量。返回值:翻页的 html 代码。用法举例:class TestController extends Controller public function test($page=1)$list = D(MyData)-page($page,10)-select();$totalCount = D(MyData)-count()
6、;$this-assign(totalCount, $totalCount);$this-display();test.html.:getPagination($totalCount,10)query_user($fields,$uid=0)获取用户的详细信息。参数:$fields,字符串数组,表示需要获取的字段。目前支持:uid username mobile email signature avatar32 avatar64 avatar128 avatar 256 ThinkOX 二次开发手册 想天软件工作室6avatar512 space_url icons_html title。$u
7、id,可选,表示用户编号。默认值是当前登录的用户编号。举例:$user = query_user(array(username,avatar32);返回 array(username=test, avatar32=/Uploads/Avatar/2014/03/31/5ab5d615a6_32_auto.jpg);getThumbImage ($filename, $width, $height, $cut, $replace)获取本地图片的缩略图。参数:$filename 图片的本地路径。$width 需要的图片宽度$height 需要的图片高度,可不填写,表示等比缩放。$cut true
8、表示裁剪图片,false 表示拉伸图片。$replace true 表示重新缩放图片, false 表示使用已经缩放的图片。friendlyDate($sTime)获取友好时间。参数:$sTime 时间戳。(2)JS 函数function op_success(text, title)/成功提示function op_info(text, title) /信息提示function op_warning(text, title) /警告提示function friendlyDate(sTime, cTime)/友好时间function U(url, params, rewrite)/JS 版 U
9、 函数3、后台管理页面(1 ) 后台权限约定凡是涉及到表单的 action url,尽可能提交到本页面,通过 IS_POST 判断是否为表单提交。如不这么做,必须在菜单配置里加入该 url 的菜单,并设为隐藏,否则权限无法赋予。为了便于对后台进行二次开发,我们创造了 AdminBuilder 系列的辅助函数来快速创建后台管理页面。其中包括了配置页面(AdminConfigBuilder) ,列表页面(AdminListBuilder) ,以及排序页面(AdminSortBuilder) ,以后还会继续增加新的辅助页面,并完善各页面的功能。参考页面WeiboController,ForumCon
10、troller。ThinkOX 二次开发手册 想天软件工作室7(2) 配置页面AdminConfigBuilder生成配置页。方法:title() 配置页的标题填入字段:keyHidden() 隐藏字段keyReadOnly() 只读字段keyText() 单行文本keyTextArea() 多行文本keyInteger() 整数字段keyUid() UID 字段keyStatus() status 字段keySelect() 下拉框字段keyRadio() 单选字段keyCheckBox() 多选字段。逗号分隔。keyEditor() 编辑器字段keyTime() 时间字段keyCreate
11、Time() 创建时间字段keyBool() 是否字段keyUpdateTime() 更新时间字段keyTitle() 标题字段keyId() ID 字段keyMultiUserGroup() 多个用户组字段keySingleUserGroup() 单个用户组字段填入数据:data($list)添加按钮buttonSubmit() 提交按钮buttonBack() 返回按钮用法示例:class TestController extends AdminController public function config($id)$data = D(MyData)-where(array(id=$i
12、d)-find();$builder = new AdminConfigBuilder();$builder-title(测试配置);$builder-keyId()-keyTitle()-keyCreateTime()-keyText(test_field,测试字段);$builder-data($data);ThinkOX 二次开发手册 想天软件工作室8$builder-buttonSubmit(U(myPostUrl)-buttonBack();$builder-display();(3)列表页面AdminListBuilder生成列表页。基本配置title() 页面标题setStatu
13、sUrl() 设置状态的地址buttonNew() “新增”按钮buttonDisable() “禁用”按钮buttonEnable() “启用”按钮buttonDelete() “删除”按钮buttonRestore() “还原”按钮buttonSort() “排序 ”按钮增加字段keyText() 文本字段keyHtml() Html 字段keyMap() 映射字段。将字段的值映射到另一个值。keyId() ID 字段keyLink() 带链接的字段keyStatus() status 字段keyYesNo() 是否字段keyBool() 是否字段,同 keyYesNokeyTime()
14、时间字段keyCreateTime() 创建时间字段keyUpdateTime() 更新时间字段keyUid() 用户编号字段keyTitle() 标题字段keyDoAction() 添加操作字段keyDoActionEdit() 操作字段中添加编辑链接keyDoActionRestore() 操作字段中增加还原链接keyTruncText($name,$title,$length) 截断的字段。最多显示$length 长度的字段。ThinkOX 二次开发手册 想天软件工作室9加入翻页组件pagination($totalCount,$listRow)加入查询组件 /陈一枭public fun
15、ction search($title = 搜索,$name=key, $type = text, $des = , $attr) 加入一个文本类型搜索框设置搜索表单提交的 URL /陈一枭setSearchPostUrl($url), ,默认情况下提交到当前页面,所以无需设置传入数据data()用法演示:class TestController extends Controller public function listTest($page=1,$r=20)$list = D(MyTest)-page($page,$r)-select();$totalCount = D(MyTest)-c
16、ount();$builder = new AdminListBuilder();$builder-title(测试列表);$builder-buttonNew(U(editTest);$builder-setStatusUrl(U(setTestStatus)-buttonEnable()-buttonDisable()-buttonDelete()-buttonSort(U(Forum/sortForum);$builder-keyId()-keyCreateTime()-keyStatus()-keyDoActionEdit()$builder-data($list);$builder-
17、pagination($totalCount,$r);$builder-display();(4)排序页面AdminSortBuilder用于生成排序页面用法:class TestController extends Controller public function sortTest()$list = D(MyTest)-order(sort asc)-select();$builder = new AdminSortBuilder();ThinkOX 二次开发手册 想天软件工作室10$builder-title(测试排序);$builder-data($list);$builder-bu
18、ttonSubmit(U(doSortTest);$builder-buttonBack();$builder-display();public function doSort($ids)$builder = new AdminSortBuilder();$builder-doSort(MyTest, $ids);4、积分提示1.后台添加一个用户行为2.在代码中调用该行为 示例:$score_before = getMyScore();$result = $model-addWeibo(is_login(), $content);$score_after =getMyScore();$this
19、-success(发表微博成功。 . getScoreTip($score_before,$score_after);扩展了一个 getMyScore()函数来获取积分。扩展了一个 getScoreTip($before,$after)来获得积分差的中文表示。5、点赞插件的使用:Hook(support,array(table=weibo,row=$weiboid,app=Weibo,uid=$weibouid, jump=no)需要注意的是,app 一般填写调用的应用名table 一般填写有需要赞的对象所在的表row 一般填写所赞对象的 idjump 一般填写 no,则表示点击消息跳转的链接
20、为来源链接,如果不填写此变量,则默认会跳转到一个约定的 URL,URL 生成规则如下U($appname . /Index/ . $table . Detail, array(id = $row)如 app=Weibo table=weibo row=1ThinkOX 二次开发手册 想天软件工作室11则生成 U(Weibo/Index/weiboDetail,array(id=1);6、模态窗口的使用ThinkOX 采用 magnific 弹窗插件。可以应用于各类场合,支持功能比较丰富。官方文档:http:/ position: relative;background: #FFF;paddin
21、g: 20px;width: auto;max-width: 500px;margin: 20px auto;此弹窗与其他弹窗不同,需要定义这么一个类来实现弹窗的样式。加入弹窗的内容这里是内容区设置弹窗触发标签投稿绑定触发事件$(.open-popup-link).magnificPopup(type:inline,midClick: true / Allow opening popup on middle mouse click. Always set it to true if you dont provide ThinkOX 二次开发手册 想天软件工作室12alternative sou
22、rce in href.);enjoy it7、控制器 SEO 的设置在控制器中允许开发者设置页面的 title,keywords 和 description。注意,写法需要按照 SEO 说明中的形式书写,因为系统对此处进行了永久性的缓存。而缓存仅针对当前页面的控制器信息,并不会根据当前页面的参数来调整。也就是说,缓存的是规则,不是实际的信息。正确的缓存方式应该为最常见的错误的缓存方式详情请参考用户手册中 seo 设置。SEO 的优先级为后台 SEO 中设置的应用名称 控制器 方法三属性全的 seo 规则控制器中setTitle 等方式设置的规则 后台 SEO 中设置的三属性不全的 SEO 规则。只要 seo 规则中,找不到三属性对应的 seo 规则,系统就会用程序控制器中的setTitle 来设置规则。如果程序控制器中 set 的某个规则为空,会使用三属性不全的 seo 规则来填充。三属性全的规则三属性不全的规则ThinkOX 二次开发手册 想天软件工作室13