周梦康 发表于 2014-08-26 3678 次浏览 标签 : ThinkSNS
后台模版解析如果使用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

ThinkSNS后台表单模版使用笔记

修改下默认的配置,如图,加上我在控制器中设置$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。代码也不负责就不贴出来了。

评论列表