fieldtype = ['TEXT' => '']; $this->defaulttype = 'TEXT'; } /** * 字段相关属性参数 * * @param array $value 值 * @return string */ public function option($option) { $html = ''; $max = dr_count($option['field'])+5; for ($i = 1; $i <= $max; $i++) { $html.= '
'; } $hang = ''; $hs = (int)$option['count']; !$hs && $hs = 5; for ($i = 1; $i <= $hs; $i++) { $hang.= '
'; } return [$this->_search_field().'
'.dr_lang('开启后可以在录入数据时自由添加行数,关闭时就只能是固定行数').'
'.dr_lang('首行表示每行的行名').'
'.dr_lang('填写表格的行数,1表示只有一行表格,至少属于1行表格').'
'.dr_lang('表格第一行的显示名称,不填写就不显示名称').'
'.$hang.'
'.$html.'

'.dr_lang('列名称:是表格列的显示名称').'

'.dr_lang('列宽度:是表格列的宽度,[整数]表示固定宽度;[整数%]表示百分比').'

'.dr_lang('选择项:仅用于下拉选择框和复选框的选项,多个选项用半角,分开').'

'.dr_lang('行名称:是表格每一行的显示名称,如果不填就按照默认行名称显示,如果默认行名称也没有填写就不显示行名').'

'.dr_lang('了解此字段的使用方法').'
'.$this->attachment($option).' ', '
'.dr_lang('[整数]表示固定宽度;[整数%]表示百分比').'
' ]; } // 属性类别 protected function _field_type_select($id, $type) { $arr = [ 0 => dr_lang('不使用'), 1 => dr_lang('文本框'), 2 => dr_lang('下拉框'), 4 => dr_lang('复选框'), 3 => dr_lang('文件'), 5 => dr_lang('日期'), 6 => dr_lang('日期时间'), 7 => dr_lang('多行文本'), //8 => dr_lang('富文本框'), 实验失败 ]; $html = ''; return $html; } // 对应的html protected function _field_type_html($config, $cname, $value, $hang, $lie, $field = []) { $html = ''; if ($config['type'] == 1) { $html.= ''; } elseif ($config['type'] == 2) { $html = ''; } elseif ($config['type'] == 3) { // 文件 $link = ''; $preview = ROOT_THEME_PATH.'assets/images/ext/url.png'; if ($value[$hang][$lie]) { $file = \Phpcmf\Service::C()->get_attachment((string)$value[$hang][$lie], 1); if ($file) { $link = $file['url']; if (dr_is_image($file['fileext'])) { $preview = $link; } elseif (is_file(ROOTPATH.'static/assets/images/ext/'.$file['fileext'].'.png')) { $preview = ROOT_THEME_PATH.'assets/images/ext/'.$file['fileext'].'.png'; } } elseif (dr_is_image($value[$hang][$lie])) { $preview = $link = $value[$hang][$lie]; } } if ($config['option'] && strpos((string)$config['option'], '-') !== false) { list($size, $exts) = explode('-', $config['option']); } else { $size = 10; $exts = $config['option']; } $url = '/'.(IS_ADMIN ? SELF.'?c=api' : 'index.php?s=api&c=file').'&m=input_file_list&token='.dr_get_csrf_token().'&siteid='.SITE_ID.'&p='.dr_authcode([ 'size' => $size ? $size : 10, 'exts' => $exts ? $exts : 'jpg,gif,png,jpeg', 'count' => 1, 'attachment' => $field['setting']['option']['attachment'], 'image_reduce' => $field['setting']['option']['image_reduce'], ], 'ENCODE').'&ct=0&one=1'; $html = ''; } elseif ($config['type'] == 5) { // 日期 if ($config['option'] == 'SYS_TIME' && !$value[$hang][$lie]) { $value[$hang][$lie] = dr_date(SYS_TIME, 'Y-m-d'); } $html.= '
'; $html.= ''; $html.= ' '; $html.= '
'; $html.= ' '; } elseif ($config['type'] == 6) { // 日期时间 if ($config['option'] == 'SYS_TIME' && !$value[$hang][$lie]) { $value[$hang][$lie] = dr_date(SYS_TIME, 'Y-m-d H:i:s'); } $html.= '
'; $html.= ''; $html.= ' '; $html.= '
'; $html.= ' '; } elseif ($config['type'] == 4) { $html = '
'; $arr = explode(',', $config['option']); foreach ($arr as $name) { $s = is_array($value[$hang][$lie]) && in_array($name, $value[$hang][$lie]) ? ' checked' : ''; $kj = ''; $html.= ''; } $html.= '
'; } elseif ($config['type'] == 7) { $name = 'ftable_'.$cname.'_'.$hang.'_'.$lie; $html = ''; $html.= ''.dr_lang('录入内容').''; } elseif ($config['type'] == 8) { } return $html; } /** * 字段显示 * * @return string */ public function show($field, $value = null) { // 字段默认值 $value = dr_string2array($value); $str = '
'; $str.= dr_get_ftable($field['id'], $value); $str.= '
'; return $this->input_format($field['fieldname'], $field['name'], $str); } /** * 字段输出 */ public function output($value) { return dr_string2array($value); } /** * 字段入库值 */ public function insert_value($field) { \Phpcmf\Service::L('Field')->data[$field['ismain']][$field['fieldname']] = dr_array2string(\Phpcmf\Service::L('Field')->post[$field['fieldname']]); } /** * 获取附件id */ public function get_attach_id($value) { if (!$this->field) { return NULL; } elseif (!isset($this->field['setting']['option']['field'])) { return NULL; } $data = []; $value = dr_string2array($value); if ($value) { foreach ($value as $tt) { foreach ($this->field['setting']['option']['field'] as $lie => $t) { if ($t['type'] == 3 && isset($tt[$lie]) && $tt[$lie]) { $data[] = (int)$tt[$lie]; } } } } return $data; } /** * 附件处理 */ public function attach($data, $_data) { if (!$this->field) { return NULL; } $data = $this->get_attach_id($data); $_data = $this->get_attach_id($_data); if (!isset($_data)) { $_data = []; } if (!isset($data)) { $data = []; } // 新旧数据都无附件就跳出 if (!$data && !$_data) { return NULL; } // 新旧数据都一样时表示没做改变就跳出 if (dr_diff($data, $_data)) { return NULL; } // 当无新数据且有旧数据表示删除旧附件 if (!$data && $_data) { return [ [], $_data ]; } // 当无旧数据且有新数据表示增加新附件 if ($data && !$_data) { return [ $data, [] ]; } // 剩下的情况就是删除旧文件增加新文件 // 新旧附件的交集,表示固定的 $intersect = array_intersect($data, $_data); return [ array_diff($data, $intersect), // 固有的与新文件中的差集表示新增的附件 array_diff($_data, $intersect), // 固有的与旧文件中的差集表示待删除的附件 ]; } /** * 字段表单输入 */ 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']); // 表单宽度设置 $width = \Phpcmf\Service::IS_MOBILE_USER() ? '100%' : ($field['setting']['option']['width'] ? $field['setting']['option']['width'] : '100%'); // 字段提示信息 $tips = ($name == 'title' && APP_DIR) || $field['setting']['validate']['tips'] ? ''.$field['setting']['validate']['tips'].'' : ''; // 字段默认值 $value = dr_string2array($value); $this->_load_date = $this->_load_datetime = 0; $str = '
'; $str.= ''; $str.= ' '; if ($field['setting']['option']['is_first_hang'] && !$field['setting']['option']['is_add']) { $str.= ' '; } if ($field['setting']['option']['field']) { foreach ($field['setting']['option']['field'] as $t) { if ($t['type']) { $style = $t['width'] ? 'style="width:'.$t['width'].(is_numeric($t['width']) ? 'px' : '').';"' : ''; $str.= ' '; } } } if ($field['setting']['option']['is_add']) { $str.= ' '; } $str.= ' '; $str.= ' '; if ($field['setting']['option']['is_add']) { // 支持添加列 $tpl = ' '; if ($field['setting']['option']['field']) { foreach ($field['setting']['option']['field'] as $n => $t) { if ($t['type']) { $tpl.= ' '; } } } $tpl.= ' '; $tpl.= ' '; $ksids = []; if ($value) { foreach ($value as $hang => $t) { $str.= ' '; if ($field['setting']['option']['field']) { foreach ($field['setting']['option']['field'] as $n => $t) { if ($t['type']) { $str.= ' '; } } } $str.= ' '; $str.= ' '; $ksids[] = $hang; } $ksid = is_array($ksids) && $ksids ? max($ksids) : 0; // 开始ID } } else { // 固定列 for ($i = 1; $i <= (int)$field['setting']['option']['count']; $i++) { $str.= ' '; if ($field['setting']['option']['is_first_hang']) { $str.= ' '; } if ($field['setting']['option']['field']) { foreach ($field['setting']['option']['field'] as $n => $t) { if ($t['type']) { $str.= ' '; } } } $str.= ' '; } } $str.= ' '; $str.= '
'.dr_lang($field['setting']['option']['first_cname']).' '.dr_lang($t['name']).''; $str.= ''; $str.'
'.$this->_field_type_html($t, $name, $value, '{hang}', $n, $field).'
'.$this->_field_type_html($t, $name, $value, $hang, $n, $field).'
'.($field['setting']['option']['hang'][$i]['name'] ? $field['setting']['option']['hang'][$i]['name'] : '未命名').' '.$this->_field_type_html($t, $name, $value, $i, $n, $field).'
'; $str.= '
'; if (!$this->is_load_js('Date')) { $str.= ' '; $this->set_load_js('Date', 1); } if ($field['setting']['option']['is_add']) { $str.= ''; } $str.= ' "; return $this->input_format($name, $text, $str.$tips); } /** * 显示输出表格 */ public function show_table($field, $value, $class = '') { // class属性 !$class && $class = 'table fc-sku-table table-nomargin table-bordered table-striped table-bordered table-advance'; // 字段默认值 $value = dr_string2array($value); // 表单宽度设置 $width = \Phpcmf\Service::IS_MOBILE_USER() ? '100%' : ($field['setting']['option']['width'] ? $field['setting']['option']['width'] : '100%'); $str = ''; $str.= ' '; if ($field['setting']['option']['is_first_hang'] && !$field['setting']['option']['is_add']) { $str .= ' '; } if ($field['setting']['option']['field']) { foreach ($field['setting']['option']['field'] as $t) { if ($t['type']) { $style = $t['width'] ? 'style="width:'.$t['width'].(is_numeric($t['width']) ? 'px' : '').';"' : ''; $str.= ' '; } } } $str.= ' '; $str.= ' '; $i = 1; foreach ($value as $ii => $val) { $str.= ' '; if ($field['setting']['option']['is_first_hang'] && !$field['setting']['option']['is_add']) { $hname = $field['setting']['option']['hang'][$i]['name'] ? $field['setting']['option']['hang'][$i]['name'] : '未命名'; $str .= ' '; } if ($field['setting']['option']['field']) { foreach ($field['setting']['option']['field'] as $n => $t) { if ($t['type']) { $td = $val[$n]; if ($td && $t['type'] == 3) { // 图片 $td = ''; } elseif ($td && $t['type'] == 4) { // 复选 $td = implode('、', $td); } $str.= ' '; } } } $i++; $str.= ' '; } $str.= ' '; $str.= '
' . dr_lang($field['setting']['option']['first_cname']) . ' '.dr_lang($t['name']).'
' . $hname . ' '.$td.'
'; return $str; } }