-
Notifications
You must be signed in to change notification settings - Fork 18
integrated structure
- 系统默认集成了一些第三方插件
- 分前端和后端, 如: 前端 图表 上传 的封装, 后端 Excel Word 的操作
- 通过开启框架配置_of.preloaded中的of_base_link_setup项可以启动插件调用
- 前端通过 L.open(插件名, 插件参数) 调用对应插件
- 后端通过 L::open(插件名) 开启对应插件
- 可以将任何一个拥有独立功能的工具集成进来
- 但符合 Composer 规范的建议直接通过 composer 方式集成
- 除框架自身集成的插件还可以自定义进行集成
- 通过框架配置 _of.link.addin.pConfig 可集成php方式调用的插件, 默认 ROOT_DIR . '/include/application/config.php'
- 通过框架配置 _of.link.addin.jConfig 可集成js方式调用的插件, 默认 ROOT_URL . '/include/application/config.js'
- 修改该配置文件的内容集成新插件, 并且不会因框架升级而被覆盖
<?php $appDir = dirname(__FILE__);switch ($name) { //phpExcel case 'excel': class_exists('PHPExcel', false) || require $appDir . '/PHPOffice/PHPExcel.php'; break; //phpWord case 'word' : class_exists('PHPWord', false) || require $appDir . '/PHPOffice/PHPWord.php'; break; //phpSoap case 'soap' : class_exists('nusoap_base', false) || require $appDir . '/nusoap/nusoap.php'; break; //phpMailer case 'mail' : function_exists('PHPMailerAutoload') || require $appDir . '/PHPMailer/PHPMailerAutoload.php'; break; //tcPdf case 'pdf' : class_exists('TCPDF', false) || require $appDir . '/tcpdf/tcpdf.php'; break; //phprpc case 'phprpc' : class_exists('PHPRPC_Client', false) || class_exists('PHPRPC_Server', false) || class_exists('PHPRPC_Date', false) || of::event('of::loadClass', array( 'filter' => 'PHPRPC_', 'router' => strtr(substr($appDir, strlen(ROOT_DIR)), '\', '/') . '/phprpc/PHPRPC_' ), true); break; }
- 修改该配置文件的内容集成新插件, 并且不会因框架升级而被覆盖
//插件访问根路径 var appUrl = config.slice(0, config.lastIndexOf('/'));/** 描述 : L.open 使用的配置文件 注明 : config 默认为配置文件路径的字符串, 须配置成插件对象的结构 { 插件键 : { "path" : 插件根目录 "list" : 加载的列表 { 相对path的js或css地址(_开头的为绝对路径或网址) : false=不调用, 方法=加载后回调函数, ... }, "ready" : 方法=加载js列表前调用 "init" : 方法=加载完成后初始化 } } 所有方法接受三个参数 : (调用参数, 当前配置, 插件名), this=指定的window 作者 : Edgar.lee / config = { 'zTree' : { //插件根目录 'path' : appUrl + '/zTree', //加载的列表 'list' : { '/js/jquery.ztree.core.js' : false, '/style/zTreeStyle.css' : false }, //加载前调用 'ready' : function (p, c) { if (!window.jQuery) { var temp = {}; temp['_' + OF_URL + '/att/link/jquery.js'] = false; //将jQuery插入到列表最前面 c.list = L.each(temp, c.list); } if (p && p.expand) { for (var i in p.expand) { c.list['/js/jquery.ztree.' +p.expand[i]+ '.js'] = false; } } }, //加载完调用 'init' : function () { return this.$.fn.zTree; } } }
手册地址 http://phpof.net/
- 入门指引
-
疑难解答
- 部署时会遇到的那些常见问题
简单却容易忽视 - 框架内置有哪些管理界面
生产模式进入界面需用 __OF_DEBUG__ - 如何定制不同的架构模式
通过配置入口文件中调度方法的参数即可 - 如何面向命名空间开发
of_xx 类可以按照命名空间方式调用 - 如何设置不同的部署模式
通过_of.debug设置 开发,测试,生产 模式 - 为什么控制层类文件要返回true
这是防止非法访问的方法之一 - 为什么传到视图层的变量会被编码
这是因为 XSS 安全防范的原因 - 为什么框架没有SQL构造器
因常规方案牺牲了性能又未很好解决问题 - 如何快速开发用户及权限管理功能
单点登录(SSO)模块因此而存在 - 怎么在系统的基础上扩展底层功能
三点: 扩展开发, 预先加载, 底层钩子 - 怎么使用 Composer 依赖管理工具
框架已集成, 默认关闭状态
- 部署时会遇到的那些常见问题
- 组件使用
- 集成插件
- 扩展开发
- 开发手册