__('String'), 'text' => __('Text'), 'richtext' => __('Richtext'), 'number' => __('Number'), 'datetime' => __('Datetime'), 'select' => __('Select'), 'selects' => __('Selects'), 'image' => __('Image'), 'images' => __('Images'), 'file' => __('File'), 'files' => __('Files'), 'checkbox' => __('Checkbox'), 'radio' => __('Radio'), ]; return $typeList; } /** * 校验规则名称 */ public static function getRules(){ return [ "required" => __('Required'), "digits"=>"数字", "letters"=>"字母", "date"=>"日期", "time"=>"时间", "email"=>"邮箱", "url"=>"网址", "qq"=>"QQ号", "IDcard"=>"身份证", "tel"=>"座机电话", "mobile"=>"手机号", "zipcode"=>"邮编", "chinese"=>"中文", "username"=>"用户名", "password"=>"密码" ]; } /** * 保存模型数据 * @param string $modelname 模型 * @param int $archiveid 文章ID * @param array $params 表单数据 * @return bool */ public static function saveExtraForm($modelname='', $archiveid=0, $params=[]) { if (empty($modelname) || $archiveid==0 || empty($params)) return false; $mod = self::get(['name' => $modelname]); if (!$mod) return false; $fields = json_decode($mod['extra'],true); //格式化模型数据 foreach ($fields as $k => $v) { if ($v['type']=='file' || $v['type']=='files'){ foreach($params[$v['field']] as $item=>&$val){ if($val['url']==''){ unset($params[$v['field']][$item]); } } $params[$v['field']] = empty($params[$v['field']])? '' : json_encode($params[$v['field']], JSON_UNESCAPED_UNICODE); } } foreach ($params as $k => &$v) { $v = is_array($v) ? implode(',', $v) : $v; } $params['item_id'] = $archiveid ; $row = model('extra'.$modelname)->get(['item_id'=>$archiveid]); if($row) { $row->allowField(true)->save($params); }else { model('extra'.$modelname)->allowField(true)->save($params); } return true; } /** * 生成模型表单 * @param $modelname 模型名称 * @param $archiveid 文章ID * @return string */ public static function getExtraForm($modelname, $archiveid=null) { $mod = self::get(['name'=>$modelname]); if(!$mod) return ''; if(!isset($mod['extra']) || empty($mod['extra'])) return ''; $row = empty($archiveid)? null : model('extra'.$mod['name'])->get(['item_id'=> $archiveid]); $params = json_decode($mod['extra'], true); $controls = $controlid = $cssname = ''; $controlPrefix = 'row'; $btnUpload = __('Upload'); $btnChoose = __('Choose'); $btnAppend = __('Append'); $input = ''; $textarea = ''; $checkbox = ''; $radio = ''; $html = []; foreach ($params as $k => $v){ if(isset($v['status']) && $v['status']=='hidden') continue; $defaultValue = !isset($row[$v['field']]) ? $v['value'] : empty($row[$v['field']]) ? $v['value'] : $row[$v['field']] ; $controlid = $v['field'] . substr(md5($v['field'].microtime()),0,6); switch(strtolower($v['type'])){ case 'string': case 'number': case 'datetime': $cssname = $v['type']=='datetime'?'datetimepicker':''; $controls = sprintf($input, ($v['type']=='number'?'number':'text'), $controlid, $v['field'], $defaultValue, $cssname, $v['rule'], $v['tip'], $v['extend']); break; case 'text': case 'richtext': $cssname = $v['type']=='richtext'?'editor':''; $controls = sprintf($textarea, $v['field'], $controlid, $cssname, $v['rule'], $v['tip'], $v['extend'], $defaultValue); break; case 'checkbox': case 'radio': $items = explode('||', $v['vars']); $controls=''; $defaultValue=explode(',',$defaultValue); for($i=0;$i%s', $v['type'], $controls); break; case 'select': case 'selects': $items = explode('||', $v['vars']); $options = ''; $defaultValue=explode(',',$defaultValue); for($i=0;$i%s', $item[1], $isChecked, $item[0]); } $extend = $v['type']=='selects'?'multiple ':' '; $extend .= $v['extend']; $controls = << {$options} EOF; break; case 'image': case 'images': $multi = $v['type']=='image'? 'false' : 'true'; $controls = <<
    EOF; break; case 'file': case 'files': $mimetype = '*/*'; $lab1 = __('Title'); $lab2 = __('File'); $edit = ''; $index=0; if (!empty($defaultValue)){ $defaultValue=json_decode($defaultValue, true); foreach($defaultValue as $key => $file) { $controlid = substr($v['type'],0,1).substr(md5($file['id'].microtime()),0,6); if ($v['type']=='file'){ $btns = << EOF; }else { $btns = << EOF; } $edit .= << {$btns} EOF; $index++; } } else { $controlid = substr($v['type'],0,1).substr(md5(microtime()),0,5); $edit = << EOF; } $append = $v['type']=='files'?'
    '.$btnAppend.'
    ':''; $controls = <<
    {$lab1} {$lab2}
    {$edit} {$append}
    EOF; $controlid = 'none'; break; } $html[] = <<
    {$controls}
    EOF; } return sprintf('
    %s
    ', $mod['name'], implode('',$html)); } }