自动生成表单参考

来源:互联网 发布:python socket 连接 编辑:程序博客网 时间:2024/05/01 19:23
class BaseForm extends CActiveRecord
{


    public static function model($className = __CLASS__)
    {
        return parent::model($className);
    }


    public function tableName()
    {
        return 'base_form';
    }


    //获取所有表单的信息
    public static function getAllForms($page,$pageSize,$args=array()){


        $condition = "1=1";
        $params = array();


        if($args['form_name'] != ''){
            $condition .= "AND id=:form_name";
            $params['form_name'] = $args['form_name'];
        }


        $total_rows =Yii::app()->db->createCommand()
            ->select("*")
            ->from("base_form")
            ->where($condition,$params)
            ->group("id")
            ->order("record_time")
            ->queryAll();
        $total = count($total_rows);


        $rows = Yii::app()->db->createCommand()
            ->select("*")
            ->from("base_form")
            ->where($condition,$params)
            ->group("id")
            ->order("record_time")
            ->limit($pageSize)
            ->offset($page * $pageSize)
            ->queryAll();


        $list['rows'] = $rows;
        $list['total_num'] = $total;
        $list['page_num'] = ($page+1);
        return $list;
    }


    //获取指定表单所有元素的信息
    public static function getFormElements($formname)
    {
        $rows = Yii::app()->db->createCommand()
            ->select("id,filed,key,type,values,required,tip")
            ->from("base_form")
            ->order("record_time")
            ->where("id='{$formname}'")
            ->queryAll();
        return $rows;
    }


    //创建指定表单
    //创建指定表单
    public static function createForm($formname,$url){
    
        $rows = self::getFormElements($formname);
        //处理select.radio.checkbox选项
        foreach($rows as $k=>$v){
            if(isset($v['values'])){
                $rows[$k]['values'] = explode(',',$v['values']);
            }
        }
    
        //根据表单元素生成表单
        $form = array();
        $jsstr = '';
        $valstr = '';
        $infostr = '';
        $datastr = '';
    
        foreach($rows as $v){
            switch($v['type']) {
                case 'text':
                    $form[$v['key']] = "<div class='form-group'>
                                        <div class='col-xs-12'>
                                            <input type='text' name='".$v['key']."' class='form-control' id='".$v['key']."'
                                                value=''  placeholder='".$v['filed'].":".$v['tip']."' >
                                        </div>
                                        </div>
                                        ";
                    $valstr .= "var ".$v['key']."=$('#".$v['key']."').val();
                    ";
                    break;
                case 'date':
                    $form[$v['key']] = "<div class='input-group date form_date' id='birth_date' data-date=''
                            data-date-format='yyyy-mm-dd'>
                                            <span class='input-group-addon'><span class='glyphicon glyphicon-calendar'></span></span>
                                            <input id='".$v['key']."' class='form-control' size='16' type='text'
                                                value='' placeholder='".$v['filed'].":".$v['tip']."'>
                                        </div>
                                        <br />
                                        ";
                    $valstr .= "var ".$v['key']."=$('#".$v['key']."').val();
                    ";
                    break;
                case 'radio':
                    $str = "<label>".$v['filed']."(".$v['tip'].")".":</label>";
                    foreach ($v['values'] as $vv) {
                        $str .= "<div class='radio-inline'>
                                    <label>
                                        <input type='radio' name='".$v['key']."' id='".$v['key']."' value='".$vv."'>".$vv."
                                    </label>
                                    </div>
                                    ";
                    }
                    $str .= "<br />";
                    $form[$v['key']] = $str;
                   $valstr .= "var ".$v['key']."=$('input:radio[name=\"".$v['key']."\"]:checked').val();
                    ";
                    break;
                case 'checkbox':
                    $str = "<label>".$v['filed']."(".$v['tip'].")".":</label>";
                    foreach ($v['values'] as $vv) {
                        $str .= "<div class='checkbox-inline'>
                                    <label>
                                        <input type='checkbox' name='".$v['key']."' id='".$v['key']."' value='".$vv."'>".$vv."
                                    </label>
                                    </div>
                                    ";
                    }
                    $str .= "<br />";
                    $form[$v['key']] = $str;
                    $valstr .= "var ".$v['key']."=[];
                    $(\"input[name='".$v['key']."']:checked\").each(function(){
                    ".$v['key'].".push($(this).val());
                    });
                    ";
                    break;
                case 'select':
                    $str = "<div>
                            <label>".$v['filed']."(".$v['tip'].")".":</label>
                            <select class='form-control' id='".$v['key']."'>";
                    foreach ($v['values'] as $vv) {
                        $str .= "<option>".$vv."</option>
                        ";
                    }
                    $str .= "</select>
                                </div>
                                ";
                    $str .= "<br />";
                    $form[$v['key']] = $str;
                    $valstr .= "var ".$v['key']."=$('select option:selected').text();
                    ";
                    break;
                case 'hidden':
                    $form[$v['key']] = "<label>".$v['filed']."(".$v['tip'].")".":</label>
                                        <div class='form-group'>
                                        <div class='col-xs-12'>
                                        <input type='hidden' name='".$v['key']."' class='form-control' id='".$v['key']."'  value='' >
                                        <img src='images/game/".$v['id']."/upload.jpg' width='100%' id='upload' />
                                        </div>
                                        </div>
                                        ";
                    $valstr .= "var ".$v['key']."=$('#img').val();
                    ";
                    break;
                default:
                    '无法生成表单';
                    break;
            }
            //必填项
            if($v['required'] == '1'){
                $infostr .= "if(!".$v['key']."){
                flag=false;
                $('#".$v['key']."').after('<span class=\"help-block text-info\"style=\"padding:0px;margin:0px;\">".$v['filed']."不能为空!</span>');}
                ";
            }
            $datastr .= $v['key'] . ":" . $v['key'] . ",";
        }
        $datastr = $datastr."formname:'".$formname."'";
        $jsstr = "function to_submit(obj){
        $('.help-block').remove();
        $(obj).button('loading');
        var flag=true;
        ".$valstr.$infostr."
        if(flag){
            $.ajax({
                type: 'post',
                url: '".$url."',
                dataType:'json',
                data:{".$datastr."},
                success: function(data, textStatus){
                    alert(data.msg);
                    if(data.status==0){
                        window.location.reload();
                    }
                },
                error: function(){
                    alert('请求失败');
                },
                complete:function(){
                    $(obj).button('reset');
                }
            });
        }else{
            $(obj).button('reset');
        }
    }";
        $form['to_submit_js'] = $jsstr;
        $form['formname'] = $formname;
        return $form;
    }
}
0 0