name = dr_lang('字段管理'); $this->namespace = ''; // 设置应用目录 // 字段来源相关表 \Phpcmf\Service::M('Field')->relatedid = $this->relatedid = (int)\Phpcmf\Service::L('input')->get('rid'); \Phpcmf\Service::M('Field')->relatedname = $this->relatedname = \Phpcmf\Service::L('input')->get('rname'); list($ismain, $issearch, $iscategory) = $this->_set_init(); // 可用字段类别 $this->ftype = \Phpcmf\Service::L('Field')->app($this->namespace)->type(\Phpcmf\Service::M('Field')->func); // 判断类别权限 \Phpcmf\Service::V()->assign([ 'menu' => \Phpcmf\Service::M('auth')->_admin_menu( [ '返回' => ['url:'.$this->backurl, 'fa fa-reply'], $this->name => ['url:'.dr_url('field/index', ['rname'=>$this->relatedname, 'rid'=>$this->relatedid]), 'fa fa-code', 'field/index'], '添加' => ['url:'.dr_url('field/add', ['rname'=>$this->relatedname, 'rid'=>$this->relatedid]), 'fa fa-plus', 'field/add'], '导入' => ['add:field/import_add{rname='.$this->relatedname.'&rid='.$this->relatedid.'}', 'fa fa-sign-in', '60%', '70%'], '修改' => ['hide:field/edit', 'fa fa-edit'], ] ), 'rid' => $this->relatedid, 'rname' => $this->relatedname, 'ftype' => $this->ftype, 'ismain' => $ismain, 'issearch' => $issearch, 'namespace' => $this->namespace, 'iscategory' => $iscategory, ]); } public function index() { $field = \Phpcmf\Service::M('Field')->get_all_field(); if ($field) { $field = dr_array_sort($field, 'displayorder', 'asc'); $group = []; $mygroup = []; // 分组和合并字段筛选 foreach ($field as $t) { if ($t['fieldtype'] == 'Group' || $t['fieldtype'] == 'Merge') { if (preg_match_all('/\{(.+)\}/U', $t['setting']['option']['value'], $value)) { foreach ($value[1] as $v) { $group[$t['fieldtype']][$v] = $t['fieldname']; } } $mygroup[$t['fieldtype']][$t['fieldname']] = $t; } } $data = []; $group_data = []; $ftype = []; foreach ($this->ftype as $t) { $ftype[$t['id']] = strpos($t['id'], $t['name']) !== false ? $t['id'] : $t['name'].' '.$t['id']; } // 主字段 foreach ($field as $t) { // 验证字段对象的有效性 $obj = \Phpcmf\Service::L('Field')->get($t['fieldtype']); if ($obj) { if ($obj->use_xss) { // 强制开启xss $t['setting']['validate']['xss'] = 1; } elseif ($obj->close_xss) { // 强制关闭xss $t['setting']['validate']['xss'] = 0; } } $t['ftype'] = isset($ftype[$t['fieldtype']]) ? $ftype[$t['fieldtype']] : $t['fieldtype']; // 重复了 删除记录 if (isset($data[$t['fieldname']]) && $data[$t['fieldname']]) { \Phpcmf\Service::M()->table('field')->delete($t['id']); } if (isset($group['Merge'][$t['fieldname']])) { $group_data['Merge'][$t['fieldname']] = $t; } elseif (isset($group['Group'][$t['fieldname']])) { // 属于分组字段 $group_data['Group'][$t['fieldname']] = $t; } elseif ($t['fieldtype'] == 'Group') { $data[$t['fieldname']] = ''; } elseif ($t['fieldtype'] == 'Merge') { $data[$t['fieldname']] = ''; } else { $data[$t['fieldname']] = $t; } } if ($mygroup['Merge']) { foreach ($mygroup['Merge'] as $m) { $list = []; foreach ($group['Merge'] as $fieldname => $t) { $m['fieldname'] == $t && $list[] = $group_data['Merge'][$fieldname]; } $list && $data[$m['fieldname']] = $list; } } if ($mygroup['Group']) { foreach ($mygroup['Group'] as $m) { $list = []; foreach ($group['Group'] as $fieldname => $t) { $m['fieldname'] == $t && $list[] = $group_data['Group'][$fieldname]; } $list && $data[$m['fieldname']] = $list; } } $list = []; foreach ($data as $fname => $t) { if (isset($t['id'])) { $list[$t['fieldname']] = $t; } elseif ($mygroup['Group'][$fname]) { $mygroup['Group'][$fname]['spacer'] = $group['Merge'][$fname] ? '' : ''; $list[$fname] = $mygroup['Group'][$fname]; foreach ($t as $f) { $f['spacer'] = $group['Merge'][$fname] ? '' : ''; $f['id'] && $list[$f['fieldname']] = $f; } } elseif ($mygroup['Merge'][$fname]) { $list[] = $mygroup['Merge'][$fname]; foreach ($t as $f) { $f['spacer'] = ''; if ($f['id']) { $list[$f['fieldname']] = $f; if ($mygroup['Group'][$f['fieldname']] && $data[$f['fieldname']]) { foreach ($data[$f['fieldname']] as $ff) { $ff['spacer'] = ''; $ff['id'] && $list[$ff['fieldname']] = $ff; } } } } } } //print_r($data); } else { $list = []; } \Phpcmf\Service::V()->assign(array( 'list' => $list, 'role' => \Phpcmf\Service::C()->get_cache('auth'), )); \Phpcmf\Service::V()->display('field_index.html'); } public function add() { $id = 0; $page = max((int)\Phpcmf\Service::L('input')->post('page'), 0); // 初始化部分值 $data = [ 'ismember' => 1, 'ismain' => 1, 'fieldtype' => '', 'setting' => [ 'option' => [], 'validate' => [ 'xss' => 1, 'required' => 0, ], ], ]; // 提交表单 if (IS_AJAX_POST) { $data = \Phpcmf\Service::L('input')->post('data', false); $field = \Phpcmf\Service::L('field')->get($data['fieldtype']); if (!$field) { $this->_json(0, dr_lang('字段类别(%s)文件不存在', $data['fieldtype'])); } elseif (empty($data['name'])) { $this->_json(0, dr_lang('字段显示名称不能为空')); } elseif (empty($data['fieldname'])) { $this->_json(0, dr_lang('字段名称不能为空')); } elseif (!preg_match('/^[a-z]+[a-z0-9\_]+$/i', $data['fieldname'])) { $this->_json(0, dr_lang('字段(%s)名称不规范', $data['fieldname'])); } elseif (strlen($data['fieldname']) > 30) { $this->_json(0, dr_lang('字段(%s)名称太长', $data['fieldname'])); } else { if (\Phpcmf\Service::M('Field')->exitsts($data['fieldname'])) { if (\Phpcmf\Service::M('Field')->table('field') ->where('relatedid', (int)$this->relatedid) ->where('relatedname', (string)$this->relatedname) ->where('fieldname', (string)$data['fieldname']) ->counts()) { $this->_json(0, dr_lang('字段(%s)已经存在', $data['fieldname'])); } elseif (\Phpcmf\Service::M('Field')->is_sys_field($data['fieldname'])) { $this->_json(0, dr_lang('字段(%s)是系统保留字段,禁止创建', $data['fieldname'])); } else { // 已经存在的字段是否创建 if (!isset($_GET['is_op_add'])) { $this->_json(-1, dr_lang('字段(%s)是已经存在于表中,请更换名字,否则可能会影响程序的运行', $data['fieldname'])); } } $is_create = 0; } else { $is_create = 1; } $rt = $field->edit_config($data); if (!$rt['code']) { $this->_json(0, $rt['msg']); } $rt = \Phpcmf\Service::M('Field')->add($data, $field, $is_create); if (!$rt['code']) { $this->_json(0, dr_lang($rt['msg'])); } $this->_cache(); // 自动更新缓存 \Phpcmf\Service::L('input')->system_log('添加'.$this->name.'【'.$data['fieldname'].'】'.$data['name']); // 记录日志 $this->_json(1, dr_lang('操作成功')); } } \Phpcmf\Service::V()->assign([ 'id' => $id, 'page' => $page, 'data' => $data, 'form' => dr_form_hidden(['page' => $page]), 'role' => \Phpcmf\Service::C()->get_cache('auth'), 'cat_show' => 0, ]); \Phpcmf\Service::V()->display('field_add.html'); } public function edit() { $id = intval(\Phpcmf\Service::L('input')->get('id')); $page = max((int)\Phpcmf\Service::L('input')->get('page'), 0); $data = \Phpcmf\Service::M()->table('field')->get($id); if (!$data) { $this->_json(0, dr_lang('数据#%s不存在', $id)); } $data['setting'] = dr_string2array($data['setting']); // 加载系统编辑器 if ($data['fieldtype'] == 'Ueditor' && !is_file(CMSPATH.'Field/Ueditor.php')) { $data['fieldtype'] = 'Editor'; } // 验证字段对象的有效性 $obj = \Phpcmf\Service::L('Field')->get($data['fieldtype']); if ($obj) { if ($obj->use_xss) { // 强制开启xss $data['setting']['validate']['xss'] = 1; } elseif ($obj->close_xss) { // 强制关闭xss $data['setting']['validate']['xss'] = 0; } } if (IS_AJAX_POST) { $post = \Phpcmf\Service::L('input')->post('data', false); $field = \Phpcmf\Service::L('field')->get($post['fieldtype']); if (!$field) { $this->_json(0, dr_lang('字段类别(%s)文件不存在', $post['fieldtype'])); } $rt = $field->edit_config($post); if (!$rt['code']) { $this->_json(0, $rt['msg']); } $rt = \Phpcmf\Service::M('Field')->edit( $data, $post, $field->alter_sql($data['fieldname'], $post['setting']['option'], $data['name']) ); if (!$rt['code']) { $this->_json(0, dr_lang($rt['msg'])); } $this->_cache(); // 自动更新缓存 \Phpcmf\Service::L('input')->system_log('修改'.$this->name.'【'.$data['fieldname'].'】'.$data['name']); // 记录日志 $this->_json(1, dr_lang('操作成功')); } \Phpcmf\Service::V()->assign([ 'id' => $id, 'data' => $data, 'page' => $page, 'form' => dr_form_hidden(['page' => $page]), 'role' => \Phpcmf\Service::C()->get_cache('auth'), 'is_edit' => $obj->is_edit, ]); \Phpcmf\Service::V()->display('field_add.html'); } public function type_edit() { $my = dr_safe_filename(\Phpcmf\Service::L('input')->get('my')); $to = dr_safe_filename(\Phpcmf\Service::L('input')->get('to')); $int = ['Cat', 'Date', 'Linkage', 'Touchspin', 'Uid']; $text = ['Catids', 'Files', 'Ftable', 'Image', 'Property', 'Redirect', 'Textarea', 'Editor']; $json = ['Checkbox', 'Linkage', 'Members', 'Related', 'Selects']; $char = ['Color', 'File', 'Text', 'Textbtn', 'Time', 'Select', 'Radio']; if (in_array($my, $int)) { if (in_array($to, $int)) { $this->_json(1, dr_lang('同一类型')); } $this->_json(0, dr_lang('当前字段存储的数据是%s,变更后建议手动去数据库将其字段数据类型改成合适的类型,确定继续变更吗?', 'INT')); } elseif (in_array($my, $text)) { if (in_array($to, $text)) { $this->_json(1, dr_lang('同一类型')); } elseif (stripos($to, 'editor') !== false) { $this->_json(1, dr_lang('同一类型')); } $this->_json(0, dr_lang('当前字段存储的数据是%s,变更后建议手动去数据库将其字段数据类型改成合适的类型,确定继续变更吗?', 'TEXT')); } elseif (in_array($my, $json)) { if (in_array($to, $json)) { $this->_json(1, dr_lang('同一类型')); } $this->_json(0, dr_lang('当前字段存储的数据是%s,变更后建议手动去数据库将其字段数据类型改成合适的类型,确定继续变更吗?', 'JSON')); } elseif (in_array($my, $char)) { if (in_array($to, $char)) { $this->_json(1, dr_lang('同一类型')); } $this->_json(0, dr_lang('当前字段存储的数据是%s,变更后建议手动去数据库将其字段数据类型改成合适的类型,确定继续变更吗?', 'CHAR')); } elseif (stripos($my, 'editor') !== false && stripos($to, 'editor') !== false) { $this->_json(1, dr_lang('同一类型')); } else { $this->_json(0, dr_lang('变更字段类别可能会影响已有的数据,你确定吗?')); } } /** * 通用操作 */ public function option() { $id = (int)\Phpcmf\Service::L('input')->get('id'); $data = \Phpcmf\Service::M()->table('field')->get($id); if (!$data) { $this->_json(0, dr_lang('字段不存在')); } switch (\Phpcmf\Service::L('input')->get('op')) { case 'disabled': $value = $data['disabled'] == 1 ? 0 : 1; \Phpcmf\Service::M()->table('field')->save($id, 'disabled', $value); $this->_cache(); // 自动更新缓存 \Phpcmf\Service::L('input')->system_log(($value ? '禁用' : '启用').$this->name.'【'.$data['fieldname'].'】'); // 记录日志 $this->_json(1, dr_lang(($value ? '禁用' : '启用').'成功'), ['value' => $value]); break; case 'xss': // 验证字段对象的有效性 $obj = \Phpcmf\Service::L('Field')->get($data['fieldtype']); if ($obj) { if ($obj->use_xss) { // 强制开启xss $this->_json(0, dr_lang('该字段已经强制启用了XSS过滤')); } elseif ($obj->close_xss) { // 强制关闭xss $this->_json(0, dr_lang('该字段已经强制关闭了XSS过滤')); } } $data['setting'] = dr_string2array($data['setting']); $data['setting']['validate']['xss'] = $value = $data['setting']['validate']['xss'] ? 0 : 1; \Phpcmf\Service::M()->table('field')->save($id, 'setting', dr_array2string($data['setting'])); $this->_cache(); // 自动更新缓存 \Phpcmf\Service::L('input')->system_log($this->name.'【'.$data['fieldname'].'】'.($value ? '开启XSS' : '关闭XSS')); // 记录日志 $this->_json(1, dr_lang('操作成功'), ['value' => $value]); break; case 'member': $value = $data['ismember'] ? 0 : 1; \Phpcmf\Service::M()->table('field')->save($id, 'ismember', $value); $this->_cache(); // 自动更新缓存 \Phpcmf\Service::L('input')->system_log($this->name.'【'.$data['fieldname'].'】'.($value ? '前端显示' : '前端隐藏')); // 记录日志 $this->_json(1, dr_lang('操作成功'), ['value' => $value]); break; case 'save': \Phpcmf\Service::M()->table('field')->save($id, 'displayorder', dr_safe_replace(\Phpcmf\Service::L('input')->get('value'))); $this->_cache(); // 自动更新缓存 \Phpcmf\Service::L('input')->system_log('修改排序值: '. $this->name.'【'.$data['fieldname'].'】'); $this->_json(1, dr_lang('操作成功')); break; } $this->_json(0, dr_lang('未知操作')); } // 删除字段 public function del() { $ids = \Phpcmf\Service::L('input')->get_post_ids(); if (!$ids) { $this->_json(0, dr_lang('你还没有选择呢')); } $rt = \Phpcmf\Service::M('Field')->delete_field($ids); if (!$rt['code']) { $this->_json(0, $rt['msg']); } $this->_cache(); // 自动更新缓存 \Phpcmf\Service::L('input')->system_log('删除字段'. $this->name.' '. implode(',', $ids)); $this->_json(1, dr_lang('操作成功'), ['ids' => $ids]); } // 导出 public function export() { $id = intval(\Phpcmf\Service::L('input')->get('id')); $data = \Phpcmf\Service::M()->table('field')->get($id); if (!$data) { $this->_admin_msg(0, dr_lang('字段(%s)不存在', $id)); } unset($data['id']); unset($data['relatedid']); unset($data['relatedname']); $data['setting'] = dr_string2array($data['setting']); \Phpcmf\Service::V()->assign([ 'data' => dr_array2string($data), ]); \Phpcmf\Service::V()->display('api_export_code.html');exit; } // 导出 public function export_all() { $ids = \Phpcmf\Service::L('input')->get('ids'); if (!$ids) { $this->_json(0, dr_lang('你还没有选择呢')); } $rt = ''; foreach ($ids as $id) { $id = intval($id); $data = \Phpcmf\Service::M()->table('field')->get($id); if (!$data) { $this->_admin_msg(0, dr_lang('字段(%s)不存在', $id)); } unset($data['id']); unset($data['relatedid']); unset($data['relatedname']); $data['setting'] = dr_string2array($data['setting']); $rt.= dr_array2string($data).PHP_EOL; } \Phpcmf\Service::V()->assign([ 'data' => $rt, ]); \Phpcmf\Service::V()->display('api_export_code.html');exit; } // 导入 public function import_add() { if (IS_AJAX_POST) { $code = \Phpcmf\Service::L('input')->post('code'); $arr = explode(PHP_EOL, $code); if (!$arr) { $this->_json(0, dr_lang('代码不能为空')); } $save = []; foreach ($arr as $t) { if ($t) { $data = dr_string2array($t); if (!$data) { $this->_json(0, dr_lang('代码解析失败')); } $field = \Phpcmf\Service::L('field')->get($data['fieldtype']); if (!$field) { $this->_json(0, dr_lang('字段类别(%s)文件不存在', $data['fieldtype'])); } elseif (empty($data['name'])) { $this->_json(0, dr_lang('字段显示名称不能为空')); } if (empty($data['fieldname'])) { $data['fieldname'] = $data['name']; } if (!preg_match('/^[a-z]+[a-z0-9\_]+$/i', $data['fieldname'])) { $this->_json(0, dr_lang('字段(%s)名称不规范', $data['fieldname'])); } elseif (strlen($data['fieldname']) > 30) { $this->_json(0, dr_lang('字段(%s)名称太长', $data['fieldname'])); } elseif (\Phpcmf\Service::M('Field')->exitsts($data['fieldname'])) { $this->_json(0, dr_lang('字段(%s)已经存在', $data['fieldname'])); } else { $save[] = $data; } } } if (!$save) { $this->_json(0, dr_lang('没有可用的导入字段')); } // 入库操作 foreach ($save as $data) { $field = \Phpcmf\Service::L('field')->get($data['fieldtype']); if (isset($data['id'])) { unset($data['id']); } $data['setting'] = dr_string2array($data['setting']); $rt = \Phpcmf\Service::M('Field')->add($data, $field); if (!$rt['code']) { $this->_json(0, dr_lang($rt['msg'])); } } $this->_cache(); // 自动更新缓存 \Phpcmf\Service::L('input')->system_log('导入字段:'.$this->name); // 记录日志 $this->_json(1, dr_lang('操作成功')); } \Phpcmf\Service::V()->assign([ 'data' => '', 'form' => dr_form_hidden(), ]); \Phpcmf\Service::V()->display('api_export_code.html'); exit; } // 联动更新缓存 private function _cache() { list($case_name, $a) = explode('-', $this->relatedname); if (function_exists('myfield_cache_'.$case_name)) { call_user_func('myfield_cache_'.$case_name); } else { switch ($case_name) { case 'form': // _网站表单 form-站点id, 表单id \Phpcmf\Service::M('cache')->sync_cache('form', 'form', 1); // 自动更新缓存 break; case 'tag': // _网站tag \Phpcmf\Service::M('cache')->sync_cache('tag', 'tag', 1); // 自动更新缓存 break; case 'linkage': // 联动菜单 \Phpcmf\Service::M('cache')->sync_cache('linkage', '', 1); // 自动更新缓存 break; case 'member': // _用户主表 \Phpcmf\Service::M('cache')->sync_cache('member'); // 自动更新缓存 break; case 'navigator': // _导航链接 \Phpcmf\Service::M('cache')->sync_cache('navigator', 'navigator', 1); // 自动更新缓存 break; case 'order': // 订单插件 break; case 'page': // 网站单页 \Phpcmf\Service::M('cache')->sync_cache('page', 'page', 1); // 自动更新缓存 break; case 'table': // 任意表 break; case 'module': // 模块字段 \Phpcmf\Service::M('cache')->sync_cache(''); // 自动更新缓存 break; case 'mform': // 模块表单 \Phpcmf\Service::M('cache')->sync_cache(''); // 自动更新缓存 break; case 'category': // 栏目自定义字段 \Phpcmf\Service::M('cache')->sync_cache(''); // 自动更新缓存 break; case 'site': // 网站信息 \Phpcmf\Service::L('cache')->del_data('my-site-'.SITE_ID); break; default: \Phpcmf\Service::M('cache')->sync_cache(''); // 自动更新缓存 break; } } } // 初始化设置 private function _set_init() { $local = \Phpcmf\Service::Apps(true); if ($local) { foreach ($local as $dir => $path) { if (is_file($path.'Config/Myfield.php')) { require $path.'Config/Myfield.php'; } } } $ismain = $issearch = $iscategory = 0; list($case_name, $a) = explode('-', $this->relatedname); if (function_exists('myfield_init_'.$case_name)) { $rt = call_user_func_array('myfield_init_'.$case_name, [ $this->relatedname, $this->relatedid ]); if (!$rt['code']) { $this->_admin_msg(0, $rt['msg']); } $this->data = $rt['data']['data']; $this->name = $rt['data']['name']; $this->backurl = $rt['data']['backurl']; if (isset($rt['data']['ismain']) && $rt['data']['ismain']) { $ismain = 1; } \Phpcmf\Service::M('Field')->func = $case_name; // 重要标识: 函数和识别码 \Phpcmf\Service::M('Field')->data = $this->data; } else { switch ($case_name) { case 'form': // _网站表单 form-站点id, 表单id list($a, $siteid) = explode('-', $this->relatedname); $this->data = \Phpcmf\Service::M()->init(['db' => $siteid, 'table' => $siteid.'_form'])->get($this->relatedid); if (!$this->data) { $this->_admin_msg(0, dr_lang('表单【%s】不存在', $this->relatedid)); } $this->name = dr_lang('表单【%s】字段', $this->data['name']); $this->backurl = ''; // 返回uri地址 \Phpcmf\Service::M('Field')->func = 'form'; // 重要标识: 函数和识别码 \Phpcmf\Service::M('Field')->data = $this->data; break; case 'site': // 网站信息 $ismain = 1; $this->name = dr_lang('自定义字段'); $this->backurl = \Phpcmf\Service::L('Router')->url('cms/site_param/index'); // 返回uri地址 \Phpcmf\Service::M('Field')->func = 'site'; // 重要标识: 函数和识别码 break; case 'tag': // _网站tag $ismain = 1; $this->name = dr_lang('自定义字段'); $this->backurl = \Phpcmf\Service::L('Router')->url('tag/home/index'); // 返回uri地址 \Phpcmf\Service::M('Field')->func = 'tag'; // 重要标识: 函数和识别码 break; case 'linkage': // 联动菜单 $ismain = 1; $this->name = dr_lang('联动菜单字段'); $this->backurl = ''; // 返回uri地址 \Phpcmf\Service::M('Field')->func = 'linkage'; // 重要标识: 函数和识别码 break; case 'member': // _用户主表 $ismain = 1; $this->name = dr_lang('自定义字段'); $this->backurl = \Phpcmf\Service::L('Router')->url('member/field/index'); // 返回uri地址 \Phpcmf\Service::M('Field')->func = 'member'; // 重要标识: 函数和识别码 break; case 'navigator': // _导航链接 $ismain = 1; $this->name = dr_lang('自定义字段'); $this->backurl = \Phpcmf\Service::L('Router')->url('navigator/home/index'); // 返回uri地址 \Phpcmf\Service::M('Field')->func = 'navigator'; // 重要标识: 函数和识别码 break; case 'order': // 订单插件 $ismain = 1; $this->name = dr_lang('自定义字段'); $this->backurl = \Phpcmf\Service::L('Router')->url('order/field/index'); // 返回uri地址 \Phpcmf\Service::M('Field')->func = 'order'; // 重要标识: 函数和识别码 break; case 'page': // 网站单页 $ismain = 1; $this->name = dr_lang('自定义字段'); $this->backurl = \Phpcmf\Service::L('Router')->url('page/home/index'); // 返回uri地址 \Phpcmf\Service::M('Field')->func = 'page'; // 重要标识: 函数和识别码 break; case 'table': // 任意表 $ismain = 1; $this->name = '【'.\Phpcmf\Service::M()->dbprefix($a).'】'; \Phpcmf\Service::M('Field')->data = $a; \Phpcmf\Service::M('Field')->func = 'table'; // 重要标识: 函数和识别码 break; case 'module': // 模块字段 $this->data = \Phpcmf\Service::M()->table('module')->get($this->relatedid); if (!$this->data) { $this->_admin_msg(0, dr_lang('模块【%s】不存在', $this->relatedid)); } $this->backurl = ''; // 返回uri地址 $this->name = dr_lang('模块【%s】字段', $this->data['dirname']); \Phpcmf\Service::M('Field')->func = 'module'; // 重要标识: 函数和识别码 \Phpcmf\Service::M('Field')->data = $this->data; $this->namespace = $this->data['dirname']; break; case 'mform': // 模块表单 $this->data = \Phpcmf\Service::M()->table('module_form')->get($this->relatedid); if (!$this->data) { $this->_admin_msg(0, dr_lang('模块【%s】不存在', $this->relatedid)); } $this->backurl = ''; // 返回uri地址 $this->name = dr_lang('模块【%s】的表单【%s】字段', $a, $this->data['name']); \Phpcmf\Service::M('Field')->func = 'mform'; // 重要标识: 函数和识别码 \Phpcmf\Service::M('Field')->data = $this->data; $this->namespace = $this->data['module']; break; case 'category': // 栏目自定义字段 $ismain = 1; $this->name = dr_lang('栏目自定义字段'); $this->backurl = ''; // 返回uri地址 \Phpcmf\Service::M('Field')->func = 'category'; // 重要标识: 函数和识别码 \Phpcmf\Service::M('Field')->data = $a; $this->module = \Phpcmf\Service::L('cache')->get('module-'.SITE_ID.'-'.$a); if (!$this->module) { $this->_admin_msg(0, dr_lang('模块【%s】缓存不存在', $a)); } break; case 'catmodule': // 识别栏目模型字段 $ismain = 1; $issearch = 1; $iscategory = 1; $module = $a; $cache = \Phpcmf\Service::L('cache')->get('module-'.SITE_ID.'-'.$module); if (!$cache) { $this->_admin_msg(0, dr_lang('模块【%s】缓存不存在', $module)); } if ($this->relatedid) { $this->data = dr_cat_value($cache['mid'], $this->relatedid); if (!$this->data) { $this->_admin_msg(0, dr_lang('模块【%s】栏目【%s】缓存不存在', $module, $this->relatedid)); } if ($module == 'share') { $this->data['tid'] != 1 && $this->_admin_msg(0, dr_lang('模块栏目才支持创建')); $this->data['dirname'] = $this->data['mid']; $this->backurl = \Phpcmf\Service::L('Router')->url('category/index'); // 返回uri地址 $this->name = dr_lang('模块【%s】栏目【#%s】模型字段', $this->data['mid'], $this->relatedid); } else { $this->data['dirname'] = $module; $this->backurl = \Phpcmf\Service::L('Router')->url($module.'/category/index'); // 返回uri地址 $this->name = dr_lang('模块【%s】栏目【#%s】模型字段', $module, $this->relatedid); } } else { $this->data = [ 'dirname' => $module, ]; $this->name = dr_lang('模块【%s】栏目公共模型字段', $module); $this->backurl = \Phpcmf\Service::L('Router')->url('module/module_category/field_index', ['dir' => $module]); // 返回uri地址 } $this->module = $cache; \Phpcmf\Service::M('Field')->func = 'category_data'; // 重要标识: 函数和识别码 \Phpcmf\Service::M('Field')->data = $this->data; $this->namespace = $module; break; default: if (strpos($this->relatedname, 'comment-module') !== false) { // 模块评论字段 if (!dr_is_app('comment')) { $this->_admin_msg(0, dr_lang('系统没有安装评论插件')); } $ismain = 1; list($a, $b, $module) = explode('-', $this->relatedname); $cache = \Phpcmf\Service::L('cache')->get('module-' . SITE_ID . '-' . $module); if (!$cache) { $this->_admin_msg(0, dr_lang('模块【%s】缓存不存在', $module)); } $this->name = '模块【' . $cache['name'] . '】评论字段'; $this->data = $cache['dirname']; $this->backurl = ''; // 返回uri地址 \Phpcmf\Service::M('Field')->func = 'comment'; // 重要标识: 函数和识别码 \Phpcmf\Service::M('Field')->data = $cache['dirname']; $this->namespace = $cache['dirname']; } elseif (strpos($this->relatedname, 'comment-mform') !== false) { // 模块评论字段 if (!dr_is_app('comment')) { $this->_admin_msg(0, dr_lang('系统没有安装评论插件'));exit; } $ismain = 1; list($a, $b, $module, $fid) = explode('-', $this->relatedname); $cache = \Phpcmf\Service::L('cache')->get('module-'.SITE_ID.'-'.$module); if (!$cache) { $this->_admin_msg(0, dr_lang('模块【%s】缓存不存在', $module)); } elseif (!$cache['form'][$fid]) { $this->_admin_msg(0, dr_lang('模块【%s】表单【%s】缓存不存在', $module, $fid)); } $this->name = '模块【'.$cache['name'].'】表单【'.$cache['form'][$fid]['name'].'】评论字段'; $this->data = $cache['dirname'].'_form_'.$cache['form'][$fid]['table']; $this->backurl = ''; // 返回uri地址 \Phpcmf\Service::M('Field')->func = 'comment'; // 重要标识: 函数和识别码 \Phpcmf\Service::M('Field')->data = $this->data; $this->namespace = $cache['dirname']; } elseif (strpos($this->relatedname, 'comment-form') !== false) { // 表单评论字段 if (!dr_is_app('comment')) { $this->_admin_msg(0, dr_lang('系统没有安装评论插件'));exit; } $ismain = 1; list($a, $b, $fid) = explode('-', $this->relatedname); $cache = \Phpcmf\Service::L('cache')->get('form-'.$this->relatedid, $fid); if (!$cache) { $this->_admin_msg(0, dr_lang('表单【%s】缓存不存在', $fid)); } $this->name = '表单【'.$cache['name'].'】评论字段'; $this->data = 'form_'.$cache['table']; $this->backurl = ''; // 返回uri地址 \Phpcmf\Service::M('Field')->func = 'comment'; // 重要标识: 函数和识别码 \Phpcmf\Service::M('Field')->data = $this->data; } elseif (function_exists('myfield_info_'.$case_name)) { // 其他自定义 $rt = call_user_func_array('myfield_info_'.$case_name, array( $this->relatedname, $this->relatedid )); if (is_array($rt)) { list( $ismain, $this->name, $this->data, \Phpcmf\Service::M('Field')->func, $this->backurl ) = $rt; \Phpcmf\Service::M('Field')->data = $this->data; } else { $this->_admin_msg(0, $rt); } } break; } } \Phpcmf\Service::V()->assign('fmid', \Phpcmf\Service::M('Field')->func); if (!$this->name) { $this->_admin_msg(0, dr_lang('字段来源未定义')); } return [$ismain, $issearch, $iscategory]; } }