fieldtype = ['TEXT' => '']; // TRUE表全部可用字段类型,自定义格式为 array('可用字段类型名称' => '默认长度', ... ) $this->defaulttype = 'TEXT'; // 当用户没有选择字段类型时的缺省值 } /** * 字段相关属性参数 * * @param array $value 值 * @return string */ public function option($option) { if ($option['field']) { foreach ($option['field'] as $k => $v) { if (!$v['field']) { unset($option['field'][$k]); } } } $html = ''; $max = dr_count($option['field'])+2; for ($i = 1; $i <= $max; $i++) { $html.= '
'; } return [$this->_search_field().'
'.dr_lang('输入表名称,不带表前缀,如:article').'
'.dr_lang('最大能选择的数量限制').'
'.dr_lang('选择列表分页条数,按多少条数据分页').'
'.$html.'']; } /** * 字段输出 */ public function output($value) { return $value; } /** * 字段入库值 */ public function insert_value($field) { $data = \Phpcmf\Service::L('Field')->post[$field['fieldname']]; $limit = intval($field['setting']['option']['limit']); if ($limit && $data && count($data) > $limit) { // 超限了 $value = implode(',', dr_arraycut($data, $limit)); } else { $value = !$data ? '' : implode(',', $data); } \Phpcmf\Service::L('Field')->data[$field['ismain']][$field['fieldname']] = $value; } /** * 字段表单输入 * * @param string $cname 字段别名 * @param string $name 字段名称 * @param array $cfg 字段配置 * @param string $value 值 * @return string */ public function input($field, $value = '') { // 字段禁止修改时就返回显示字符串 if ($this->_not_edit($field, $value)) { return $this->show($field, $value); } $is_show = 0; // 字段存储名称 $name = $field['fieldname']; // 字段提示信息 $tips = isset($field['setting']['validate']['tips']) && $field['setting']['validate']['tips'] ? ''.$field['setting']['validate']['tips'].'' : ''; // 区域大小 $area = \Phpcmf\Service::IS_MOBILE_USER() ? '["95%", "90%"]' : '["50%", "65%"]'; // 关联表名称 $table = isset($field['setting']['option']['table']) ? $field['setting']['option']['table'] : ''; // 字段显示名称 $text = ($field['setting']['validate']['required'] ? ' * ' : '').dr_lang($field['name']); // 选择数量限制 $limit = intval($field['setting']['option']['limit']); !$limit && $limit = 99999; if (!$table) { if (CI_DEBUG) { return $this->input_format($name, $text, '
关联字段没有设置关联表名称
'); } return $this->input_format($name, $text, ''); } elseif (!\Phpcmf\Service::M()->is_table_exists($table)) { if (CI_DEBUG) { return $this->input_format($name, $text, '
关联字段设置的表【'.$table.'】不存在
'); } return $this->input_format($name, $text, ''); } $value = $value ? trim($value, ',') : ''; $mylist = []; if ($value && is_string($value)) { $arr = explode(',', $value); if ($arr) { $value = ''; foreach ($arr as $a) { $a = intval($a); if ($a) { $value.= ','.$a; } } if ($value) { $value = trim($value, ','); $ids = array_values(array_filter(array_map('intval', explode(',', $value)))); $mylist = []; if ($ids) { $rows = \Phpcmf\Service::M()->db->table($table)->whereIn('id', $ids)->get(); $rows = $rows ? $rows->getResultArray() : []; $map = []; foreach ($rows as $r) { $map[(int) $r['id']] = $r; } foreach ($ids as $id) { if (isset($map[$id])) { $mylist[] = $map[$id]; } } } } } } $tpl = is_file(MYPATH.'View/api_join_field_'.$field['fieldname'].'.html') ? MYPATH.'View/api_join_field_'.$field['fieldname'].'.html' : COREPATH.'View/api_join_field.html'; if (!is_file($tpl)) { if (CI_DEBUG) { return $this->input_format($name, $text, '
模板文件【'.$tpl.'】不存在
'); } return $this->input_format($name, $text, ''); } $code = file_get_contents($tpl); if (!$code) { if (CI_DEBUG) { return $this->input_format($name, $text, '
模板文件【'.$tpl.'】内容为空
'); } return $this->input_format($name, $text, ''); } $file = \Phpcmf\Service::V()->code2php($code); ob_start(); require $file; $str = ob_get_clean(); $str.= $tips; $js = \Phpcmf\Service::L('js_packer'); $str.= $js->pack(' ', 0); return $this->input_format($name, $text, $str); } /** * 字段表单显示 * * @param string $field 字段数组 * @param array $value 值 * @return string */ public function show($field, $value = null) { $cname = ($field['setting']['option']['title'] ? $field['setting']['option']['title'] : dr_lang('主题')); $value = @trim($value, ','); $mylist = []; $is_show = 1; $table = isset($field['setting']['option']['table']) ? $field['setting']['option']['table'] : ''; if ($value && is_string($value) && $table) { $arr = explode(',', $value); if ($arr) { $value = ''; foreach ($arr as $a) { $a = intval($a); if ($a) { $value.= ','.$a; } } if ($value) { $value = trim($value, ','); $ids = array_values(array_filter(array_map('intval', explode(',', $value)))); $mylist = []; if ($ids) { $rows = \Phpcmf\Service::M()->db->table($table)->whereIn('id', $ids)->get(); $rows = $rows ? $rows->getResultArray() : []; $map = []; foreach ($rows as $r) { $map[(int) $r['id']] = $r; } foreach ($ids as $id) { if (isset($map[$id])) { $mylist[] = $map[$id]; } } } } } } $tpl = $field['fieldname']; $file = \Phpcmf\Service::V()->code2php( file_get_contents(is_file(MYPATH.'View/api_join_field_'.$tpl.'.html') ? MYPATH.'View/api_join_field_'.$tpl.'.html' : COREPATH.'View/api_join_field.html') ); ob_start(); require $file; $str = ob_get_clean(); return $this->input_format($field['fieldname'], $field['name'], $str); } }