__('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));
}
}