displayConfig()
方法,那么就会调用万能表单模版(\addons\theme\stv1\admin_config.html
)而这个模版页面分为两个部分,表单的配置和表单的渲染。
上面是各个字段对应的表单的属性、别名、默认值以及附带的js的配置,能够满足所有的表单功能,这些数据变动较少,而且各种表单有各种各样的配置,所以都统一通过XconfigModel
来存放在system_config
表里面。
<form action="{:U('admin/Index/savePageConfig')}" method="POST"> <input type="hidden" name='pageKey' value="{$pageKey}" /> ... </form>
下面则是根据上面的表单配置解析出来的表单。
<form method="POST" action="{$savePostUrl}" <neq name='onsubmit' value=''> onsubmit = "return {$onsubmit};"</neq> id='detail_form' name='detail_form'> <volist name='pageKeyList' id='pk'> <!--循环各个表单--> </volist> </form>感觉这里需要添加一个功能,那就是导出表单的配置信息,比如在本地配置好的,到线上还得配置一遍,所以这个功能是必需的。
以后台添加用户的功能为例,简化了下内容(省略了几个字段,可能和下面的截图有出入),使得表单结构更加清晰:
public function addUser() { // 初始化用户列表管理菜单 $this->_initUserListAdminMenu(); $this->pageKeyList = array('email','uname','password','role'); $this->opt['role'] = array('1'=>'学生','2'=>'老师','3'=>'组织'); $this->savePostUrl = U('admin/User/doAddUser'); $this->notEmpty = array('email','uname','password','role'); $this->onsubmit = 'admin.addUserSubmitCheck(this)'; $this->displayConfig(); }
控制器写完后,打开对应的页面地址,发现默认都是input
框
修改下默认的配置,如图,加上我在控制器中设置$this->opt['role'] = array('1'=>'学生','2'=>'老师','3'=>'组织');
所以形成单选框。
上面说了保存的表单配置都在system_config
表,里面为了方便其他开发人员修改,所以应该将对应的页面的配置信息导出来,方便他人使用。为此我在添加一个ajax请求
<a href="javascript:void(0);" onclick="askforSQL();" >导出SQL</a> <div id="showSQL" style="display: none;"></div> <script type="text/javascript"> function askforSQL(){ var url = '{:U("admin/Index/getPageConfigSQL")}'; var pageKey = '{$pageKey}'; $.post(url,{list:'pageKey',key:pageKey},function(data){ //console.log(data); if(data.status){ var sql = data.sql; }else{ var sql = "获取SQL失败"; } $("#showSQL").fadeIn().text(sql); },'json'); } </script>
请求的是apps\admin\Lib\Action\AdministratorAction.class.php
里面的getPageConfigSQL()
方法,而在这个方面里面也就是简单的拼凑一条update的sql。代码也不负责就不贴出来了。