fieldtype = TRUE; $this->defaulttype = 'VARCHAR'; // 当用户没有选择字段类型时的缺省值 } /** * 字段相关属性参数 * * @param array $value 值 * @return string */ public function option($option) { $mthumb = ''; if (\Phpcmf\Service::M('field')->relatedname == 'module') { $mthumb = '
'.dr_lang('当缩略图字段为空时,用本字段的图片来填充(仅对模块字段有效)').'
'; } if ($this->field && $this->field['fieldname'] != 'thumb') { $mthumb = ''; } return [$this->field_type($option['fieldtype'], $option['fieldlength']).$this->_search_field(). $mthumb.'
'.dr_lang('开启将会出现手动输入文件地址按钮').'
'.dr_lang('格式:jpg,gif,png,exe,html,php,rar,zip').'
'.dr_lang('单位MB').'
'.dr_lang('当文件太大时可以采取分段上传,可以提升上传效率').'
'.dr_lang('允许用户选取自己已经上传的附件').'
'.$this->attachment($option).' ' , '
'.dr_lang('提示字段上传的扩展名和大小限制的文本信息').'
' ]; } /** * 验证字段属性 */ public function edit_config($post) { if (!isset($post['setting']['option']['ext']) || !$post['setting']['option']['ext']) { return dr_return_data(0, dr_lang('扩展名必须填写')); } elseif (!isset($post['setting']['option']['size']) || !$post['setting']['option']['size']) { return dr_return_data(0, dr_lang('文件大小必须填写')); } return dr_return_data(1, 'ok'); } /** * 字段输出 */ public function output($value) { return $value; } /** * 获取附件id */ public function get_attach_id($value) { $data = []; if (!$value || !is_numeric($value)) { return $data; } $data[] = $value; return $data; } /** * 附件处理 */ public function attach($data, $_data) { // 新旧数据都无附件就跳出 if (!$data && !$_data) { return NULL; } // 新旧数据都一样时表示没做改变就跳出 if (dr_diff($data, $_data)) { return NULL; } // 当无新数据且有旧数据表示删除旧附件 if (!$data && $_data) { return [ [], [$_data] ]; } // 当无旧数据且有新数据表示增加新附件 if ($data && !$_data) { return [ [$data], [] ]; } // 剩下的情况就是删除旧文件增加新文件 return [ [$data], [$_data] ]; } /** * 字段入库值 * * @param array $field 字段信息 * @return void */ public function insert_value($field) { $value = \Phpcmf\Service::L('Field')->post[$field['fieldname']]; // 存在缩略图值时,自己就是缩略图 if (!$value && $field['fieldname'] == 'thumb' && isset(\Phpcmf\Service::L('Field')->data[$field['ismain']]['thumb']) && \Phpcmf\Service::L('Field')->data[$field['ismain']]['thumb']) { return; } // 提取缩略图 if ($value && $field['setting']['option']['stslt']) { $_field = \Phpcmf\Service::L('form')->fields; if (isset($_field['thumb']) && $_field['thumb']['fieldtype'] == 'File' && !\Phpcmf\Service::L('Field')->data[$_field['thumb']['ismain']]['thumb']) { $info = \Phpcmf\Service::C()->get_attachment($value, 1); if ($info && in_array($info['fileext'], ['jpg', 'jpeg', 'png', 'gif'])) { \Phpcmf\Service::L('Field')->data[$_field['thumb']['ismain']]['thumb'] = $value; } } } \Phpcmf\Service::L('Field')->data[$field['ismain']][$field['fieldname']] = $value; } /** * 字段表单输入 * * @return string */ public function input($field, $value = '') { // 字段禁止修改时就返回显示字符串 if ($this->_not_edit($field, $value)) { return $this->show($field, $value); } // 字段存储名称 $name = $field['fieldname']; // 字段显示名称 $text = ($field['setting']['validate']['required'] ? ' * ' : '').dr_lang($field['name']); // 字段提示信息 $tips = ($name == 'title' && APP_DIR) || $field['setting']['validate']['tips'] ? ''.$field['setting']['validate']['tips'].'' : ''; // 表单附加参数 $attr = $field['setting']['validate']['formattr']; $ts = dr_lang('上传格式要求:%s(%s)', str_replace(',', '、', (string)$field['setting']['option']['ext']), ($field['setting']['option']['size']).'MB'); $p = dr_authcode([ 'size' => ($field['setting']['option']['size']), 'exts' => $field['setting']['option']['ext'], 'attachment' => $field['setting']['option']['attachment'], 'image_reduce' => $field['setting']['option']['image_reduce'], ], 'ENCODE'); // 显示模板 $tpl = '
'; $tpl.= '
{preview}
'; $tpl.= ''; $tpl.= '
'; // 已保存数据 $val = ''; $file_url = ''; $show_delete = 0; if ($value) { $file = \Phpcmf\Service::C()->get_attachment($value, 1); if ($file) { $preview = dr_file_preview_html($file['url'], $file['id']); $filepath = $file['attachment']; $title = $file['filename']; $upload = ''; } else { $file_url = $filepath = $value; $preview = dr_file_preview_html($value); $upload = ''; $title = ''; } $val.= str_replace( ['{title}', '{id}', '{filepath}', '{preview}', '{upload}'], [$title, $value, dr_strcut($filepath, 30), $preview, $upload], $tpl ); $show_delete = 1; } else { $val.= ''; } $json = json_encode([ 'name' => $name, 'ext' => !$field['setting']['option']['ext'] || $field['setting']['option']['ext'] == '*' ? 'null' : ' /(\.|\/)('.str_replace(',', '|', $field['setting']['option']['ext']).')$/i', 'size' => floatval($field['setting']['option']['size']) * 1024 * 1024, 'url' => dr_web_prefix(''.(IS_ADMIN ? SELF.'?c=api' : 'index.php?s=api&c=file').'&is_iframe=1&token='.dr_get_csrf_token()).'&siteid='.SITE_ID.'&m=upload&p='.$p.'&fid='.$field['id'], 'unused_url' => dr_web_prefix(''.(IS_ADMIN ? SELF.'?c=api' : 'index.php?s=api&c=file').'&m=input_file_list&is_iframe=1&p=' . $p . '&fid=' . $field['id']), 'input_url' => dr_web_prefix(''.(IS_ADMIN ? SELF.'?c=api' : 'index.php?s=api&c=file').'&m=input_file_url&is_iframe=1&token='.dr_get_csrf_token().'&siteid='.SITE_ID.'&p='.$p.'&fid='.$field['id'].'&file='.urlencode($file_url).'&one=1'), 'tpl' => $tpl, 'area' => \Phpcmf\Service::IS_MOBILE_USER() ? ["95%", "90%"] : ["80%", "80%"], 'url_area' => \Phpcmf\Service::IS_MOBILE_USER() ? ["95%", "90%"] : ["50%", "300px"], 'chunk' => $field['setting']['option']['chunk'] ? 20 * 1024 * 1024 : 0, ]); $use = ''; if (!$field['setting']['option']['unused'] && \Phpcmf\Service::C()->uid) { $use.= ''; } if ($field['setting']['option']['input']) { $use.= ''; } $use.= ''; // 表单输出 $str = '
'.$use.'
'; if (!$field['setting']['option']['is_ext_tips']) { $str.= '

'.$ts.'

'; } $str.= '
'.$val.'
'; if (!$this->is_load_js('File')) { $str.= ' '; $this->set_load_js('File', 1); } $str.= ''; return $this->input_format($name, $text, $str.$tips); } /** * 字段表单显示 * * @param string $field 字段数组 * @param array $value 值 * @return string */ public function show($field, $value = null) { $html = ''; if ($value) { // 显示模板 $file = \Phpcmf\Service::C()->get_attachment($value, 1); if ($file) { $preview = dr_file_preview_html($file['url'], $file['id']); } else { $preview = dr_file_preview_html($value); } $html = '
'.$preview.'
'; } return $this->input_format($field['fieldname'], $field['name'], $html); } }