fix_admin_tpl_path = dr_get_app_dir('module').'Views/';
if (!APP_DIR) {
$this->admin_tpl_path = $this->fix_admin_tpl_path;
}
\Phpcmf\Service::V()->admin($this->admin_tpl_path, $this->fix_admin_tpl_path);
$this->_Extend_Init();
}
// 继承类初始化
protected function _Extend_Init() {
// 初始化模块
$dir = APP_DIR ? APP_DIR : 'share';
$this->_module_init($dir);
// 支持附表存储
$this->is_data = 0;
// 模板前缀(避免混淆)
$this->tpl_prefix = 'share_category_';
// 单独模板命名
$this->tpl_name = 'category_content';
// 模块显示名称
$this->name = dr_lang('内容模块[%s]', $dir);
$this->is_scategory = $this->module['share'] || (isset($this->module['config']['scategory']) && $this->module['config']['scategory']);
if ($this->is_scategory) {
// 共享栏目时显示单页内容字段
if ($this->module['share'] && $dir != 'share' && !$this->_is_extend_var) {
// 当共享模块进入了独立模块的栏目,就跳转条共享模块
dr_redirect(dr_url('category/index'));
exit;
}
} else {
//unset($this->module['category_field']['content']);
// 独立模块
if (isset($this->module['config']['hcategory']) && $this->module['config']['hcategory']) {
$this->_admin_msg(0, dr_lang('模块【%s】禁止使用栏目', $dir));
}
}
// 初始化数据表
$this->_init([
'table' => dr_module_table_prefix($dir).'_category',
'field' => $this->module['category_field'],
'order_by' => 'displayorder ASC,id ASC',
'show_field' => 'name',
]);
\Phpcmf\Service::M('category')->init($this->init); // 初始化内容模型
//$this->module['category'] = \Phpcmf\Service::M('category')->get_data(0);
$file = WRITEPATH.'config/category.php';
if (is_file($file)) {
$this->cat_config = require $file;
if (!isset($this->cat_config[$this->module['dirname']])) {
if (!$this->cat_config) {
$this->cat_config = [];
}
$this->cat_config[$this->module['dirname']] = [
'sys_field' => ['order','use','show', 'id','tid','mid','ismain','ismain','disabled','html'],
'list_field' => [],
];
}
} else {
$this->cat_config = [
$this->module['dirname'] => [
'sys_field' => ['order','use','show', 'id','tid','mid','ismain','disabled','html'],
'list_field' => [],
],
];
}
if (isset($this->cat_config[$this->module['dirname']]['rname']) && $this->cat_config[$this->module['dirname']]['rname']) {
define('SYS_CAT_RNAME', 1);
}
if (isset($this->cat_config[$this->module['dirname']]['popen']) && $this->cat_config[$this->module['dirname']]['popen']) {
define('SYS_CAT_POPEN', 1);
}
$menu = [
'返回' => [APP_DIR.'/home/index', 'fa fa-reply'],
'栏目管理' => [APP_DIR.'/category/index', 'fa fa-reorder'],
'添加' => [APP_DIR.'/category/add', 'fa fa-plus'],
'批量' => [APP_DIR.'/category/all_add', 'fa fa-plus'],
'属性设置' => [APP_DIR.'/category/config_add', 'fa fa-cog'],
'自定义字段' => ['show:field/index{&is_menu=1&rname=category-'.$this->module['dirname'].'}', 'fa fa-code', '80%', '90%'],
];
if (!APP_DIR) {
unset($menu['返回']);
}
// 写入模板
\Phpcmf\Service::V()->assign([
'mid' => $dir,
'menu' => \Phpcmf\Service::M('auth')->_admin_menu($menu),
'module' => $this->module,
'is_seo' => $this->module['setting']['search']['catsync'] ? 0 : ($this->module['share'] ? 1 : (isset($this->module['site'][SITE_ID]['is_cat']) && $this->module['site'][SITE_ID]['is_cat'])),
'reply_url' => \Phpcmf\Service::L('router')->url(APP_DIR.'/category/index'),
'is_scategory' => $this->is_scategory,
]);
}
// ========================
// 获取树形结构列表
protected function _get_tree_list($data) {
$cqx = dr_is_app('cqx') ? \Phpcmf\Service::M('content', 'cqx') : null;
$module = \Phpcmf\Service::L('cache')->get('module-'.SITE_ID.'-content');
$is_cat_code = dr_is_app('mbdy') && isset($this->admin['role'][1]) && method_exists(\Phpcmf\Service::M('code', 'mbdy'), 'cat_code') ? 1 : 0;
$list = "
";
$head = '
';
$list.= "|
| ";
$head.= '
| ';
if (dr_in_array('order', $this->cat_config[$this->module['dirname']]['sys_field'])) {
$head.= ' '.dr_lang('排序').' | ';
$list.= " | ";
}
if (dr_in_array('use', $this->cat_config[$this->module['dirname']]['sys_field'])) {
$head .= ' ' . dr_lang('可用') . ' | ';
$list .= "\$is_used_html | ";
}
if (dr_in_array('show', $this->cat_config[$this->module['dirname']]['sys_field'])) {
$head .= ' ' . dr_lang('显示') . ' | ';
$list .= "\$is_show_html | ";
}
//if (dr_in_array('ismain', $this->cat_config[$this->module['dirname']]['sys_field'])) {
//$head .= ' ' . dr_lang('主栏目') . ' | ';
// $list .= "\$is_ismain_html | ";
//}
if (dr_in_array('id', $this->cat_config[$this->module['dirname']]['sys_field'])) {
$head .= ' Id | ';
$list .= "\$id | ";
}
$head.= ' '.dr_lang('栏目信息').' | ';
$list.= "\$spacer\$name \$parent \$ctotal | ";
if ($this->is_scategory && dr_in_array('tid', $this->cat_config[$this->module['dirname']]['sys_field'])) {
$head.= ' '.dr_lang('类型').' | ';
$list.= "\$type_html | ";
}
if ($this->module['share'] && dr_in_array('mid', $this->cat_config[$this->module['dirname']]['sys_field'])) {
$head.= ' '.dr_lang('模块 / 目录').' | ';
$list.= "\$mid | ";
}
if ($this->module['share'] && dr_is_app('chtml') && dr_in_array('html', $this->cat_config[$this->module['dirname']]['sys_field'])) {
$head.= ' ' . dr_lang('栏目静态') . ' | ';
$list.= "\$is_page_html | ";
$head.= ' ' . dr_lang('内容静态') . ' | ';
$list.= "\$is_page_html2 | ";
}
if (isset($this->cat_config[$this->module['dirname']]['list_field']) && $this->cat_config[$this->module['dirname']]['list_field']) {
foreach ($this->cat_config[$this->module['dirname']]['list_field'] as $i => $t) {
if ($t['use']) {
$head.= ''.dr_lang($t['name']).' | ';
$list.= '$'.$i.'_html | ';
}
}
}
$head.= ''.dr_lang('操作').' | ';
$list.= "\$option | ";
$head.= '
';
$list.= "";
$tree = '';
$tcats = $pcats = [];
foreach($data as $k => $t) {
if ($cqx && $cqx->is_edit($t['id'])) {
unset($data[$k]);
continue;
}
$option = '';
!$t['mid'] && $t['mid'] = APP_DIR;
$t['tid'] = isset($t['tid']) ? $t['tid'] : 1;
$t['name'] = dr_strcut($t['name'], 30);
$t['jsname'] = str_replace(['\'', '"'], [], $t['name']);
$t['setting'] = dr_string2array($t['setting']);
$t['pcatpost'] = 0;
$pid = explode(',', $t['pids']);
$this->module['category'][$t['id']]['topid'] = $t['topid'] = isset($pid[1]) ? $pid[1] : $t['id'];
if ($this->module['share']) {
// 共享栏目时
//以本栏目为准
$t['setting']['html'] = intval($t['setting']['html']);
$t['setting']['chtml'] = intval($t['setting']['chtml']);
$t['setting']['urlrule'] = intval($t['setting']['urlrule']);
if ($t['child'] && isset($module[$t['mid']]['pcatpost']) && $module[$t['mid']]['pcatpost']) {
// 允许父栏目
$t['pcatpost'] = 1;
}
} else {
// 独立模块栏目
//以站点为准
if (!isset($t['tid'])) {
$t['tid'] = $t['setting']['linkurl'] ? 2 : 1; // 判断栏目类型 2表示外链
}
$t['setting']['html'] = intval($this->module['html']);
$t['setting']['chtml'] = intval($this->module['html']);
$t['setting']['urlrule'] = isset($this->module['site'][SITE_ID]['urlrule']) ? intval($this->module['site'][SITE_ID]['urlrule']) : 0;
if ($t['child'] && isset($this->module['setting']['pcatpost']) && $this->module['setting']['pcatpost']) {
// 允许父栏目
$t['pcatpost'] = 1;
}
}
$t['url'] = $t['tid'] == 2 && $t['setting']['linkurl'] ? dr_url_prefix($t['setting']['linkurl']) : dr_url_prefix(\Phpcmf\Service::L('router')->category_url($this->module, $t));
if ($this->_is_admin_auth('add')) {
// 非外链添加子类 $t['tid'] != 2 &&
$option.= 'url(APP_DIR.'/category/add', array('pid' => $t['id'])).'> '.dr_lang('子类').'';
}
if ($this->_is_admin_auth('edit')) {
$option.= 'url(APP_DIR.'/category/edit', array('id' => $t['id'])).'> '.dr_lang('修改').'';
}
if (($t['tid'] == 1 && ($t['pcatpost'] || !$t['child']) && $t['mid']) && $this->_is_admin_auth($t['mid'].'/home/add')) {
$option.= ' '.dr_lang('发布').'';
}
$t['ctotal'] = '';
if (($t['tid'] == 1 && $t['mid']) ) {
if ($this->_is_admin_auth($t['mid'].'/home/index')) {
$option.= ' '.dr_lang('管理').'';
}
$t['ctotal'] = '';
$tcats[] = $t['id'].'-'.$t['mid'];
}
if ($this->_is_admin_auth('edit') && dr_count($this->module['category_field']) && ($t['tid'] !=2 && $this->is_scategory)) {
$option.= ' '.dr_lang('编辑内容').'';
} elseif ($this->_is_admin_auth('edit') && ($t['tid'] == 2 && $this->is_scategory)) {
$option.= ' '.dr_lang('编辑地址').'';
}
// 只对超管有效
if (isset($this->admin['role'][1]) && dr_count($this->init['field'])) {
$option.= ' '.dr_lang('字段权限').'';
}
// 第三方插件接入
if ($is_cat_code) {
$option.= ' '.dr_lang('前端调用').'';
}
$t['option'] = $option;
// 判断显示和隐藏开关
$t['is_show_html'] = '';
$t['is_used_html'] = '';
//$t['is_ismain_html'] = '';
// 判断是否生成静态
$is_html = intval($this->module['share'] ? $t['setting']['html'] : $this->module['html']);
$is_html2 = intval($this->module['share'] ? $t['setting']['chtml'] : $this->module['html']);
$t['is_page_html'] = '';
$t['is_page_html2'] = '';
//$purl = $this->module['share'] ? ($t['tid'] == 1 ? dr_url($t['mid'].'/home/index', ['catid'=>$t['id']]) : \Phpcmf\Service::L('Router')->url(APP_DIR.'/category/edit', array('id' => $t['id']))) : dr_url(APP_DIR.'/home/index', ['catid'=>$t['id']]);
//$t['total'] = ''.intval($data[$t['id']]['total']).'';
// 是否缓存
//$t['url'] = dr_url_prefix($data[$t['id']]['url'], APP_DIR);
// 共享模块显示栏类别
if ($this->is_scategory) {
// 栏目类型
if ($t['tid'] == 1) {
if ($t['child']) {
$t['type_html'] = ' '.dr_lang('封面').' ';
} else {
$t['type_html'] = ' '.dr_lang('列表').' ';
}
if ($module[$t['mid']]['name']) {
$t['mid'] = $module[$t['mid']]['name'] . ' / '.$t['mid'];
} else {
$t['mid'] = ''.dr_lang('未装载').'';
}
} elseif ($t['tid'] == 2) {
$t['mid'] = '';
$t['type_html'] = ' '.dr_lang('外链').' ';
$t['is_page_html'] = '';
} else {
$t['mid'] = '';
$t['type_html'] = ' '.dr_lang('单页').' ';
}
//!$t['mid'] && $t['mid'] = ''.dr_lang('无').'';
} else {
//$t['url'] = 'javascript:;';
$t['tid'] = 0;
$t['mid'] = '';
$t['type_html'] = '';
$t['is_page_html'] = '';
}
if (isset($this->cat_config[$this->module['dirname']]['list_field']) && $this->cat_config[$this->module['dirname']]['list_field']) {
foreach ($this->cat_config[$this->module['dirname']]['list_field'] as $i => $tt) {
if ($tt['use']) {
$t[$i . '_html'] = dr_list_function($tt['func'], $t[$i], [], $t, $this->module['category_field'][$i]);
}
}
}
//$t['name'] = $this->module['category'][$t['id']]['total'];
if (!$t['child']) {
// 重复验证是否子栏目,避免被禁的栏目不显示的情况
$t['child'] = \Phpcmf\Service::M('category')->init($this->init)->where('pid', (int)$t['id'])->counts();
}
if ($t['child'] || $t['pcatpost']) {
$pcats[] = $t['id'];
$t['spacer'] = $this->_get_spacer($t['pids']).'[+] ';
} else {
$t['spacer'] = $this->_get_spacer($t['pids']);
}
$t['class'] = 'dr_catid_'.$t['id']. ' dr_pid_'.$t['pid'];
$arr = explode(',', $t['pids']);
if ($arr) {
foreach ($arr as $a) {
$t['class'].= ' dr_pid_'.$a;
}
}
extract($t);
$list = str_replace('"', '\'', $list);
eval("\$nstr = \"$list\";");
$tree.= $nstr;
}
return [$head, $tree, $pcats, $tcats];
}
// 替换空格填充符号
protected function _get_spacer($str) {
$rt = '';
$num = substr_count((string)$str, ',') * 2;
if ($num) {
for ($i = 0; $i < $num; $i ++) {
$rt.= ' ';
}
}
return $rt;
}
// 设置栏目属性
public function config_add() {
$sysfield = [
'order' => ['排序', '设置栏目的排列顺序'],
'use' => ['可用', '设置栏目是否可用的快捷开关'],
'show' => ['显示', '设置栏目是否用于循环显示'],
//'ismain' => ['主栏目', '设置是否为主栏目的快捷开关'],
'id' => ['Id', '显示栏目的id号'],
'tid' => ['类型', '显示栏目的类型,有:单页、模块、外链'],
'mid' => ['模块', '显示所属模块的名称'],
'html' => ['静态', '设置栏目是否生成静态的开关'],
];
if (!$this->is_scategory) {
unset($sysfield['tid']);
}
if (!$this->module['share']) {
unset($sysfield['mid']);
}
if (!dr_is_app('chtml') || !$this->module['share']) {
unset($sysfield['html']);
}
if (IS_POST) {
$this->cat_config[$this->module['dirname']] = \Phpcmf\Service::L('input')->post('data');
\Phpcmf\Service::L('Config')->file(WRITEPATH.'config/category.php', '栏目配置文件', 32)->to_require($this->cat_config);
// 自动更新缓存
$this->_auto_cache(APP_DIR ? APP_DIR : 'share');
$this->_json(1, dr_lang('操作成功'));
}
// 主表字段
$field = \Phpcmf\Service::M()->db->table('field')
->where('disabled', 0)
->where('relatedname', 'category-'.$this->module['dirname'])
->orderBy('displayorder ASC,id ASC')
->get()->getResultArray();
$field = dr_list_field_value($this->cat_config[$this->module['dirname']]['list_field'], [], $field);
\Phpcmf\Service::V()->assign([
'data' => $this->cat_config[$this->module['dirname']],
'field' => $field,
'sysfield' => $sysfield,
]);
\Phpcmf\Service::V()->display('share_category_config.html');exit;
}
public function list_index() {
$pid = intval(\Phpcmf\Service::L('input')->get('pid'));
list($a, $b, $pcats, $tcats) = $this->_get_tree_list(\Phpcmf\Service::M('category')->cat_data($pid));
$this->_json(1, $b, json_encode($tcats));
}
// 后台查看列表
protected function _Admin_List() {
list($a, $b, $pcats, $tcats) = $this->_get_tree_list(\Phpcmf\Service::M('category')->cat_data(0));
\Phpcmf\Service::V()->assign([
'list' => '你在My/View/share_category_list.html,目录中定义过栏目文件,需要删除此文件',
'pcats' => $pcats,
'tcats' => $tcats,
'cat_head' => $a,
'cat_list' => $b,
'list_url' => dr_url(APP_DIR.'/category/index'),
'list_name' => ' '.dr_lang('栏目管理'),
'move_select' => \Phpcmf\Service::L('tree')->select_category(
$this->module['category'],
0,
'name="catid"',
dr_lang('顶级栏目'),
0, 0
),
'uriprefix' => trim(APP_DIR.'/'.\Phpcmf\Service::L('router')->class, '/'),
'MAX_CATEGORY' => \Phpcmf\Service::M()->table($this->init['table'])->counts(),
]);
\Phpcmf\Service::V()->display('share_category_list.html');
}
// 后台添加内容
protected function _Admin_Add() {
$id = 0;
$pid = intval(\Phpcmf\Service::L('input')->get('pid'));
$page = intval(\Phpcmf\Service::L('input')->get('page'));
$psize = (int)\Phpcmf\Service::C()->get_cache('site', SITE_ID, 'seo', 'pagesize');
$msize = (int)\Phpcmf\Service::C()->get_cache('site', SITE_ID, 'seo', 'mpagesize');
// 默认数据
$value = [
'show' => 1,
'urlrule' => (int)\Phpcmf\Service::C()->get_cache('site', SITE_ID, 'seo', 'SITE_URLRULE'),
'setting' => [
'edit' => 1,
'disabled' => 0,
'template' => [
'page' => 'page.html',
'list' => 'list.html',
'show' => 'show.html',
'category' => 'category.html',
'search' => 'search.html',
'pagesize' => $psize ? $psize : 20,
'mpagesize' => $msize ? $msize : 20,
],
'seo' => [
'list_title' => '[第{page}页{join}]{catpname}{join}{SITE_NAME}',
'show_title' => '[第{page}页{join}]{title}{join}{catpname}{join}{SITE_NAME}',
],
]
];
if ($pid) {
if (!$this->module['category'][$pid]) {
$this->_admin_msg(0, dr_lang('父栏目【%s】缓存不存在', $pid));
}
$value['setting'] = $this->module['category'][$pid]['setting'];
$value['setting']['getchild'] = 0;
}
$value['mid'] = $this->module['category'][$pid]['mid'];
$value['setting'] = dr_string2array($value['setting']);
list($tpl) = $this->_Post($id, $value, 1);
\Phpcmf\Service::V()->assign([
'page' => $page,
'data' => $value,
'form' => dr_form_hidden(['page' => $page]),
'select' => \Phpcmf\Service::L('tree')->select_category($this->module['category'], $pid, 'name=\'data[pid]\'', dr_lang('顶级栏目')),
'list_url' => dr_url(APP_DIR.'/category/index'),
'list_name' => ' '.dr_lang('栏目管理'),
'select_tpl' => $this->_select_tpl(),
'is_edit_mid' => $pid && $value['mid'] ? 1 : 0,
'module_share' => \Phpcmf\Service::L('cache')->get('module-'.SITE_ID.'-content'),
]);
\Phpcmf\Service::V()->display($tpl);
}
// 后台修改内容
protected function _Admin_Edit() {
$id = intval(\Phpcmf\Service::L('input')->get('id'));
$page = intval(\Phpcmf\Service::L('input')->get('page'));
list($tpl, $data) = $this->_Post($id, null, 1);
if (!$data['id']) {
$this->_admin_msg(0, dr_lang('数据#%s不存在', $id));
}
\Phpcmf\Service::V()->assign([
'page' => $page,
'data' => $data,
'form' => dr_form_hidden(['page' => $page]),
'select' => \Phpcmf\Service::L('tree')->select_category($this->module['category'], $data['pid'], 'name=\'data[pid]\'', dr_lang('顶级栏目')),
'web_url' => $data['tid'] == 2 && $data['setting']['linkurl'] ? dr_url_prefix($data['setting']['linkurl']) : dr_url_prefix(dr_module_category_url($this->module, $data), $this->module['mid']),
'list_url' => dr_url(APP_DIR.'/category/index'),
'list_name' => ' '.dr_lang('栏目管理'),
'select_tpl' => $this->_select_tpl($data['mid']),
'is_edit_mid' => 1,
'module_share' => \Phpcmf\Service::L('cache')->get('module-'.SITE_ID.'-content'),
]);
\Phpcmf\Service::V()->display($tpl);
}
// 模板选择
protected function _select_tpl($mid = '') {
$path = dr_tpl_path();
$rpath = dirname(dirname($path));
$ini = dirname($path).'/config.ini';
if (is_file($ini)) {
$data = json_decode(file_get_contents($ini), true);
} else {
$data = [];
}
$html = '';
$html.= '';
return $html;
}
// 后台批量添加
protected function _Admin_All_Add() {
if (IS_AJAX_POST) {
$post = \Phpcmf\Service::L('input')->post('data');
$list = explode(PHP_EOL, $post['list']);
if (!$list) {
$this->_json(0, dr_lang('内容填写不完整'));
}
$pid = intval($post['pid']);
if ($pid && !$this->module['category'][$pid]) {
$this->_json(0, dr_lang('栏目【%s】缓存不存在', $pid));
} elseif ($pid && $post['tid'] != 2 && $this->module['category'][$pid]['tid'] == 2) {
return dr_return_data(0, dr_lang('父级栏目是外部地址类型,下级栏目只能选择外部地址'));
} elseif ($pid && $this->module['category'][$pid]['pcatpost'] == 0
&& $this->module['category'][$pid]['child'] == 0 && $this->module['category'][$pid]['tid'] == 1) {
$mid = $this->module['category'][$pid]['mid'] ? $this->module['category'][$pid]['mid'] : APP_DIR;
if (dr_is_module($mid) && \Phpcmf\Service::M()->table(dr_module_table_prefix($mid))->where('catid', $pid)->counts()) {
$this->_json(0, dr_lang('目标栏目【%s】存在内容数据,无法作为父栏目', $this->module['category'][$pid]['name']));
}
}
$count = 0;
foreach ($list as $t) {
list($name, $dir) = explode('|', $t);
$data = [];
$data['name'] = trim($name);
if (!$data['name']) {
continue;
}
$data['dirname'] = trim((string)$dir);
!$data['dirname'] && $data['dirname'] = \Phpcmf\Service::L('pinyin')->result($data['name']);
$cf = \Phpcmf\Service::M('category')->check_dirname(0, $pid, $data['dirname']);
$data['pid'] = $pid;
$data['show'] = 1;
$data['ismain'] = 1;
//if ($pid) {
//$data['ismain'] = (int)$this->module['category'][$pid]['ismain'];
//}
$data['disabled'] = 0;
$data['pids'] = '';
$data['thumb'] = '';
$data['pdirname'] = '';
$data['childids'] = '';
if ($this->module['share']) {
$data['mid'] = $post['mid'];
$data['tid'] = (int)$post['tid'];
$data['content'] = '';
// 作为内容模块的栏目判断
if ($data['tid'] == 1 && !$data['mid']) {
$this->_json(0, dr_lang('必须选择一个模块'));
// 判断逐个父级栏目的mid值
/*
list($pmid, $ids) = \Phpcmf\Service::M('category')->get_parent_mid($this->module['category'], $pid);
if ($pmid && $pmid != $data['mid']) {
$this->_json(0, dr_lang('必须选择与上级栏目相同的内容模块(%s)', $pmid));
}*/
}
}
$psize = (int)\Phpcmf\Service::C()->get_cache('site', SITE_ID, 'seo', 'pagesize');
$msize = (int)\Phpcmf\Service::C()->get_cache('site', SITE_ID, 'seo', 'mpagesize');
$data['setting'] = isset($this->module['category'][$pid]['setting']) ? $this->module['category'][$pid]['setting'] : [
'edit' => 1,
'disabled' => 0,
'template' => [
'list' => 'list.html',
'show' => 'show.html',
'category' => 'category.html',
'search' => 'search.html',
'pagesize' => $psize ? $psize : 20,
'mpagesize' => $msize ? $msize : 20,
],
'seo' => [
'list_title' => '[第{page}页{join}]{name}{join}{SITE_NAME}',
'show_title' => '[第{page}页{join}]{title}{join}{catname}{join}{SITE_NAME}',
],
];
$data['setting']['getchild'] = 0;
$save['setting']['urlrule'] = (int)\Phpcmf\Service::C()->get_cache('site', SITE_ID, 'seo', 'SITE_URLRULE');
$data['setting'] = dr_array2string($data['setting']);
$rt = \Phpcmf\Service::M('category')->insert($data);
if (!$rt['code']) {
$this->_json(0, $rt['msg']);
}
if (!$cf['code']) {
// 重复验证
\Phpcmf\Service::M('category')->update($rt['code'], [
'dirname' => $data['dirname'].$rt['code']
]);
}
$count ++;
}
// 自动更新缓存
$this->_auto_cache(APP_DIR ? APP_DIR : 'share');
$this->_json(1, dr_lang('批量添加%s个栏目', $count));
}
\Phpcmf\Service::V()->assign([
'form' => dr_form_hidden(),
'select' => \Phpcmf\Service::L('tree')->select_category($this->module['category'], 0, 'name=\'data[pid]\'', dr_lang('顶级栏目')),
'list_url' => dr_url(APP_DIR.'/category/index'),
'list_name' => ' '.dr_lang('栏目管理'),
'module_share' => \Phpcmf\Service::L('cache')->get('module-'.SITE_ID.'-content'),
]);
\Phpcmf\Service::V()->display('share_category_all.html');
}
// 后台批量设置URL
protected function _Admin_Url_Edit() {
if (!$this->module['share']) {
$this->_admin_msg(2, dr_lang('独立模块在模块配置中设置URL规则'), dr_url('seo_module/show', ['dir' => $this->module['dirname'], 'page' => 2, 'hide_menu' => 1]));
}
if (IS_AJAX_POST) {
$c = 0;
$catid = \Phpcmf\Service::L('input')->post('catid');
$urlrule = \Phpcmf\Service::L('input')->post('urlrule');
foreach ($this->module['category'] as $id => $t) {
if (dr_in_array($id, $catid)) {
$c++;
$t['setting']['urlrule'] = $urlrule;
\Phpcmf\Service::M('category')->init($this->init)->update($id, ['setting' => dr_array2string($t['setting'])]);
}
}
// 自动更新缓存
$this->_auto_cache(APP_DIR ? APP_DIR : 'share');
$this->_json(1, dr_lang('批量设置%s个栏目', $c));
}
\Phpcmf\Service::V()->assign([
'form' => dr_form_hidden(),
'select' => \Phpcmf\Service::L('tree')->select_category($this->module['category'], 0, 'name=\'catid[]\' multiple style=\'height:200px\'', ''),
'list_url' =>\Phpcmf\Service::L('router')->url(APP_DIR.'/category/url_edit'),
'list_name' => ' '.dr_lang('自定义URL'),
]);
\Phpcmf\Service::V()->display('share_category_url.html');
}
// 后台删除内容
protected function _Admin_Del() {
$ids = \Phpcmf\Service::L('input')->get_post_ids();
if (!$ids) {
$this->_json(0, dr_lang('所选栏目不存在'));
}
// 重新获取数据
$category = \Phpcmf\Service::M('category')->data_for_delete();
// 筛选栏目id
$catid = '';
foreach ($ids as $id) {
$catid.= ','.($category[$id]['childids'] ? $category[$id]['childids'] : $id);
}
$catid = explode(',', trim($catid, ','));
$catid = array_flip(array_flip($catid));
parent::_Del(
$catid,
function ($rows) {
// 判断删除的栏目是否存在数据
if ($this->module['share']) {
foreach ($rows as $t) {
if (!$t['mid']) {
continue;
}
$mod = \Phpcmf\Service::L('cache')->get('module-' . SITE_ID . '-content', $t['mid']);
if ($mod) {
$table = dr_module_table_prefix($t['mid']);
if (!\Phpcmf\Service::M()->db->tableExists(\Phpcmf\Service::M()->dbprefix($table))) {
continue;
}
}
}
} else {
foreach ($rows as $t) {
$table = dr_module_table_prefix($this->module['dirname']);
if (!\Phpcmf\Service::M()->db->tableExists(\Phpcmf\Service::M()->dbprefix($table))) {
continue;
}
}
}
return dr_return_data(1);
},
function ($rows) {
// 计算栏目
// 删除之后记得删除相关模块数据
\Phpcmf\Service::M('Category')->delete_content($rows, $this->module);
// 自动更新缓存
$this->_auto_cache(APP_DIR ? APP_DIR : 'share');
return dr_return_data(1);
},
\Phpcmf\Service::M()->dbprefix($this->init['table'])
);
}
// 批量设置静态模式
protected function _Admin_Html_All_Edit() {
$ids = \Phpcmf\Service::L('input')->get_post_ids();
if (!$ids) {
$this->_json(0, dr_lang('所选栏目不存在'));
}
$tid = intval($_GET['tid']);
foreach ($ids as $id) {
$row = \Phpcmf\Service::M('category')->init($this->init)->get($id);
if (!$row) {
$this->_json(0, dr_lang('栏目数据不存在'));
}
$row['setting'] = dr_string2array($row['setting']);
if ($tid) {
$row['setting']['chtml'] = 1;
} else {
$row['setting']['html'] = 1;
}
\Phpcmf\Service::M('category')->init($this->init)->update($id, ['setting' => dr_array2string($row['setting'])]);
\Phpcmf\Service::L('input')->system_log('修改栏目状态为: 静态模式 ['. $id.']');
}
// 自动更新缓存
$this->_auto_cache(APP_DIR ? APP_DIR : 'share');
$this->_json(1, dr_lang('操作成功'));
}
// 复制栏目规则执行
public function copy_page_edit() {
$at = \Phpcmf\Service::L('input')->get('at');
$page = (int)\Phpcmf\Service::L('input')->get('page');
$catid = (int)\Phpcmf\Service::L('input')->get('catid');
$catids = \Phpcmf\Service::L('cache')->get_auth_data('copy_edit_'.APP_DIR.'_'.$catid);
if (!$catids) {
$this->_html_msg(0, dr_lang('更新数据为空'));
}
$row = \Phpcmf\Service::M('category')->init($this->init)->get($catid);
if (!$row) {
$this->_json(0, dr_lang('栏目数据不存在'));
}
// 更新完成
if (!isset($catids[$page]) || !$catids[$page]) {
\Phpcmf\Service::M('cache')->sync_cache();
\Phpcmf\Service::L('cache')->del_auth_data('copy_edit_'.APP_DIR.'_'.$catid);
$this->_html_msg(1, dr_lang('更新完成'));
}
$row['setting'] = dr_string2array($row['setting']);
foreach ($catids[$page] as $t) {
// 指定栏目
\Phpcmf\Service::M('category')->init($this->init)->copy_value($at, $row['setting'], $t);
}
$this->_html_msg( 1, dr_lang('正在执行中【%s】...', count($catids).'/'.($page+1)),
dr_url(APP_DIR.'/category/'.\Phpcmf\Service::L('Router')->method, ['at' => $at, 'catid' => $catid, 'page' => $page + 1])
);
}
// 复制栏目规则
public function copy_edit() {
$catid = (int)\Phpcmf\Service::L('input')->get('catid');
$row = \Phpcmf\Service::M('category')->init($this->init)->get($catid);
if (!$row) {
$this->_json(0, dr_lang('栏目数据不存在'));
}
if (IS_AJAX_POST) {
$at = \Phpcmf\Service::L('input')->post('at');
if (!$at) {
$this->_json(0, dr_lang('没有选择同步数据项'));
}
$use = \Phpcmf\Service::L('input')->post('use');
if (!$use) {
$catids = [];
foreach ($this->module['category'] as $t) {
$catids[] = $t['id'];
}
if (!$catids) {
$this->_json(0, dr_lang('没有可用的栏目'));
}
} else {
$catids = \Phpcmf\Service::L('input')->post('catid');
if (!$catids) {
$this->_json(0, dr_lang('你还没有选择栏目呢'));
}
}
\Phpcmf\Service::L('cache')->set_auth_data('copy_edit_'.APP_DIR.'_'.$catid, array_chunk($catids, 50));
$this->_json(1, dr_lang('即将同步到%s个栏目', count($catids)), [
'jscode' => 'dr_iframe_show(\''.dr_lang('同步').'\', \''.dr_url(APP_DIR.'/category/copy_page_edit').'&at='.implode(',', $at).'&catid='.$catid.'\', \'500px\', \'300px\')'
]);
}
$option = [
'seo' => 'SEO设置',
'url' => 'url规则',
'tpl' => '模板文件',
'size' => '分页数据',
];
if (dr_is_app('chtml') && !APP_DIR) {
$option['html'] = '静态开关';
}
\Phpcmf\Service::V()->assign([
'at' => \Phpcmf\Service::L('input')->get('at'),
'form' => dr_form_hidden(),
'select' => \Phpcmf\Service::L('tree')->select_category(
$this->module['category'],
0,
'id=\'dr_catid\' name=\'catid[]\' multiple="multiple" data-actions-box="true"',
'',
0,
0
),
'option' => $option,
]);
\Phpcmf\Service::V()->display('share_category_copy.html');exit;
}
// 批量设置动态模式
protected function _Admin_Php_All_Edit() {
$ids = \Phpcmf\Service::L('input')->get_post_ids();
if (!$ids) {
$this->_json(0, dr_lang('所选栏目不存在'));
}
$tid = intval($_GET['tid']);
foreach ($ids as $id) {
$row = \Phpcmf\Service::M('category')->init($this->init)->get($id);
if (!$row) {
$this->_json(0, dr_lang('栏目数据不存在'));
}
$row['setting'] = dr_string2array($row['setting']);
if ($tid) {
$row['setting']['chtml'] = 0;
} else {
$row['setting']['html'] = 0;
}
\Phpcmf\Service::M('category')->init($this->init)->update($id, ['setting' => dr_array2string($row['setting'])]);
\Phpcmf\Service::L('input')->system_log('修改栏目状态为: 动态模式 ['. $id.']');
}
// 自动更新缓存
$this->_auto_cache(APP_DIR ? APP_DIR : 'share');
$this->_json(1, dr_lang('操作成功'));
}
// 后台批量保存排序值
protected function _Admin_Order() {
$this->_Display_Order(
intval(\Phpcmf\Service::L('input')->get('id')),
intval(\Phpcmf\Service::L('input')->get('value'))
);
}
// 后台批量移动栏目
protected function _Admin_Move_Edit() {
$ids = \Phpcmf\Service::L('input')->get_post_ids();
if (!$ids) {
$this->_json(0, dr_lang('所选栏目不存在'));
}
$topid = (int)\Phpcmf\Service::L('input')->post('catid');
foreach ($ids as $id) {
if ($id == $topid) {
$this->_json(0, dr_lang('栏目上级不能为本身'));
}
}
/*
$mid = $topid ? '' : $category[$topid]['mid'];
// 判断mid
$mmid = '';*/
if ($topid) {
// 重新获取数据
$module = \Phpcmf\Service::L('cache')->get('module-'.SITE_ID.'-content');
$category = \Phpcmf\Service::M('category')->data_for_move();
if (!$category[$topid]) {
$this->_json(0, dr_lang('目标栏目不存在'));
} elseif ($this->is_scategory && $category[$topid]['child'] == 0 && $category[$topid]['tid'] == 1) {
$mid = $category[$topid]['mid'] ? $category[$topid]['mid'] : APP_DIR;
if (isset($module[$mid]['pcatpost']) && $module[$mid]['pcatpost']) {
// 说明父栏目允许发布,不怕你的父栏目数据
} else {
if (dr_is_module($mid) && \Phpcmf\Service::M()->table(dr_module_table_prefix($mid))->where('catid', $topid)->counts()) {
$this->_json(0, dr_lang('目标栏目【%s】存在内容数据,无法作为父栏目', $category[$topid]['name']));
}
}
}
}
// 批量更换栏目
\Phpcmf\Service::M()->db->table($this->init['table'])->whereIn('id', $ids)->update(['pid' => $topid]);
// 自动更新缓存
$this->_auto_cache(APP_DIR ? APP_DIR : 'share');
$this->_json(1, dr_lang('操作成功'));
}
// 后台批量保存显示状态
protected function _Admin_Show_Edit() {
$id = (int)\Phpcmf\Service::L('input')->get('id');
$row = \Phpcmf\Service::M('category')->init($this->init)->get($id);
if (!$row) {
$this->_json(0, dr_lang('栏目数据不存在'));
}
$at = \Phpcmf\Service::L('input')->get('at');
if ($at == 'used') {
// 可用状态
$v = $row['disabled'] ? 0 : 1;
if ($v) {
$num = 0;
if ($this->module['share'] && $row['tid'] == 1 && dr_is_module($row['mid'])) {
$num = \Phpcmf\Service::M()->table(dr_module_table_prefix($row['mid']))->where('catid in ('.($row['childids'] ? $row['childids'] : $id).')')->counts();
} elseif (!$this->module['share']) {
$num = \Phpcmf\Service::M()->table(dr_module_table_prefix($this->module['dirname']))->where('catid in ('.($row['childids'] ? $row['childids'] : $id).')')->counts();
}
if ($num) {
$this->_json(0, dr_lang('当前栏目内容存在%s条数据,无法禁用', $num));
}
}
\Phpcmf\Service::M('category')->init($this->init)->update($id, ['disabled' => $v]);
// 自动更新缓存
$this->_auto_cache(APP_DIR ? APP_DIR : 'share');
\Phpcmf\Service::L('input')->system_log('修改栏目的可用状态: '. $id);
$this->_json(1, dr_lang($v ? '设置为禁用状态' : '设置为可用状态'), ['value' => $v, 'share' => 0]);
} elseif ($at == 'main') {
// 显示状态
$v = $row['ismain'] ? 0 : 1;
\Phpcmf\Service::M('category')->init($this->init)->update($id, ['ismain' => $v]);
//\Phpcmf\Service::M('category')->init($this->init)->where('id in ('.$row['childids'].')')->update(NULL, ['ismain' => $v]);
// 自动更新缓存
$this->_auto_cache(APP_DIR ? APP_DIR : 'share');
\Phpcmf\Service::L('input')->system_log('修改栏目的主栏目状态: '. $id);
$this->_json(1, dr_lang($v ? '设置为主栏目状态' : '设置为非主栏目状态'), ['value' => $v, 'share' => 0]);
} else {
// 显示状态
$v = $row['show'] ? 0 : 1;
\Phpcmf\Service::M('category')->init($this->init)->update($id, ['show' => $v]);
// 自动更新缓存
$this->_auto_cache(APP_DIR ? APP_DIR : 'share');
\Phpcmf\Service::L('input')->system_log('修改栏目的显示状态: '. $id);
$this->_json(1, dr_lang($v ? '设置为显示状态' : '设置为隐藏状态'), ['value' => $v, 'share' => 0]);
}
}
// 后台批量保存是否生成静态的状态
protected function _Admin_Html_Edit() {
if (!dr_is_app('chtml')) {
$this->_json(0, '没有安装官方版【静态生成】插件');
}
$id = (int)\Phpcmf\Service::L('input')->get('id');
$tid = (int)\Phpcmf\Service::L('input')->get('tid');
$row = \Phpcmf\Service::M('category')->init($this->init)->get($id);
if (!$row) {
$this->_json(0, dr_lang('栏目数据不存在'));
}
if ($this->module['share']) {
// 共享模块
$row['setting'] = dr_string2array($row['setting']);
if (!$row['setting']['urlrule']) {
$this->_json(0, dr_lang('此栏目是动态地址,没有设置地址规则,无法开启静态'));
}
if ($tid) {
$html = (int)$row['setting']['chtml'];
$v = $html ? 0 : 1;
$name = $v ? '内容静态模式' : '内容动态模式';
$row['setting']['chtml'] = $v;
} else {
$html = (int)$row['setting']['html'];
$v = $html ? 0 : 1;
$name = $v ? '栏目静态模式' : '栏目动态模式';
$row['setting']['html'] = $v;
}
\Phpcmf\Service::M('category')->init($this->init)->update($id, ['setting' => dr_array2string($row['setting'])]);
\Phpcmf\Service::L('input')->system_log('修改栏目状态为: '. $name . '['. $id.']');
// 自动更新缓存
$this->_auto_cache(APP_DIR ? APP_DIR : 'share');
$this->_json(1, dr_lang($name), ['value' => $v, 'share' => 1]);
} else {
// 独立模块
$html = (int)$this->module['html'];
$v = $html ? 0 : 1;
$name = $v ? '全模块栏目及内容静态模式' : '全模块栏目及内容动态模式';
$module = \Phpcmf\Service::M()->db->table('module')->where('id', $this->module['id'])->get()->getRowArray();
if (!$module) {
$this->_json(0, dr_lang('模块不存在'));
}
$site = dr_string2array($module['site']);
$site[SITE_ID]['html'] = $v;
if (!$site[SITE_ID]['urlrule']) {
$this->_json(0, dr_lang('此模块是动态地址,没有设置地址规则,无法开启静态'));
}
\Phpcmf\Service::M()->db->table('module')->where('id', $this->module['id'])->update([
'site' => dr_array2string($site)
]);
\Phpcmf\Service::L('input')->system_log('修改模块状态为: '. $name);
// 自动更新缓存
$this->_auto_cache(APP_DIR ? APP_DIR : 'share');
$this->_json(1, dr_lang($name), ['value' => $v, 'share' => 0]);
}
}
// 生成栏目静态
public function scjt_edit() {
if (!dr_is_app('chtml')) {
$this->_json(0, '没有安装官方版【静态生成】插件');
}
$ids = \Phpcmf\Service::L('input')->get_post_ids();
if (!$ids) {
$this->_json(0, dr_lang('没有选择任何栏目'));
}
if ($this->module['share']) {
$this->_json(1, dr_url('chtml/cat/category_index', ['app' => '', 'ids' => implode(',', $ids)]));
} else {
$this->_json(1, dr_url('chtml/cat/category_index', ['app' => APP_DIR, 'ids' => implode(',', $ids)]));
}
}
// 生成内容静态
public function scjt2_edit() {
if (!dr_is_app('chtml')) {
$this->_json(0, '没有安装官方版【静态生成】插件');
}
$ids = \Phpcmf\Service::L('input')->get_post_ids();
if (!$ids) {
$this->_json(0, dr_lang('没有选择任何栏目'));
}
if ($this->module['share']) {
$this->_json(1, dr_url('chtml/html/show_index', ['app' => '', 'catids' => implode(',', $ids)]));
} else {
$this->_json(1, dr_url('chtml/html/show_index', ['app' => APP_DIR, 'catids' => implode(',', $ids)]));
}
}
// 编辑外链
public function link_edit() {
$id = intval(\Phpcmf\Service::L('input')->get('id'));
$row = \Phpcmf\Service::M('category')->init($this->init)->get($id);
if (!$row) {
$this->_json(0, dr_lang('栏目数据不存在'));
}
$row['setting'] = dr_string2array($row['setting']);
if (IS_POST) {
$row['setting']['linkurl'] = \Phpcmf\Service::L('input')->post('url');
\Phpcmf\Service::M('category')->init($this->init)->update($id, ['setting' => dr_array2string($row['setting'])]);
\Phpcmf\Service::L('input')->system_log('修改栏目外链地址: '. $row['name'] . '['. $id.']');
// 自动更新缓存
$this->_auto_cache(APP_DIR ? APP_DIR : 'share');
$is_html = $this->module['share'] ? $this->module['category'][$id]['setting']['html'] : $this->module['html'];
if ($is_html) {
// 生成权限文件
if (!dr_html_auth(1)) {
$this->_json(0, dr_lang('/cache/html/ 无法写入文件'));
}
$list = dr_web_prefix('index.php?s='.APP_DIR.'&c=html&m=categoryfile&id='.$id);
$this->_json(1, dr_lang('操作成功'), ['htmlfile' => $list]);
}
$this->_json(1, dr_lang('操作成功'));
}
\Phpcmf\Service::V()->assign([
'myurl' => $row['setting']['linkurl'],
]);
\Phpcmf\Service::V()->display('share_category_linkurl.html');exit;
}
// 编辑自定义字段权限
public function field_edit() {
$id = intval(\Phpcmf\Service::L('input')->get('id'));
$row = \Phpcmf\Service::M('category')->init($this->init)->get($id);
if (!$row) {
$this->_json(0, dr_lang('栏目数据不存在'));
}
$row['setting'] = dr_string2array($row['setting']);
if (IS_POST) {
$post = \Phpcmf\Service::L('input')->post('ids');
$save = $row['setting']['cat_field'] ? $row['setting']['cat_field'] : [];
foreach ($this->module['category_field'] as $t) {
if ($t['id']) {
if (dr_in_array($t['fieldname'], $post)) {
// 说明勾选了这个字段
if (isset($save[$t['fieldname']])) {
unset($save[$t['fieldname']]);
}
} else {
// 没勾选
$save[$t['fieldname']] = 1;
}
}
}
$save['name'] = 'test';
$row['setting']['cat_field'] = $save;
\Phpcmf\Service::M('category')->init($this->init)->update($id, ['setting' => dr_array2string($row['setting'])]);
\Phpcmf\Service::L('input')->system_log('修改栏目自定义字段权限: '. $row['name'] . '['. $id.']');
$c = 0;
$catids = \Phpcmf\Service::L('input')->post('catid');
if ($catids) {
$row['setting'] = dr_string2array($row['setting']);
if (isset($catids[0]) && $catids[0] == 0) {
// 全部栏目
foreach ($this->module['category'] as $cid => $t) {
//if ($t['ismain']) {
$c ++;
\Phpcmf\Service::M('category')->init($this->init)->copy_value('cat_field', $row['setting'], $cid);
//}
}
} else {
// 指定栏目
foreach ($catids as $cid) {
//if ($this->module['category'][$cid]['ismain']) {
$c++;
\Phpcmf\Service::M('category')->init($this->init)->copy_value('cat_field', $row['setting'], $cid);
//}
}
if (!in_array($id, $catids)) {
\Phpcmf\Service::M('category')->init($this->init)->copy_value('cat_field', $row['setting'], $id);
$c++;
}
}
// 自动更新缓存
$this->_auto_cache(APP_DIR ? APP_DIR : 'share');
$this->_json(1, dr_lang('共设置%s个栏目', $c));
} else {
// 没有选择表示自己
\Phpcmf\Service::M('category')->init($this->init)->copy_value('cat_field', $row['setting'], $id);
// 自动更新缓存
$this->_auto_cache(APP_DIR ? APP_DIR : 'share');
$this->_json(1, dr_lang('操作成功'));
}
}
\Phpcmf\Service::V()->assign([
'field' => $this->module['category_field'],
'select' => \Phpcmf\Service::L('tree')->ismain(true)->select_category(
$this->module['category'],
0,
'id=\'dr_catid\' name=\'catid[]\' multiple="multiple" data-actions-box="true"',
'',
0,
0
),
'cat_field' => $row['setting']['cat_field'],
]);
\Phpcmf\Service::V()->display('share_category_field.html');exit;
}
// ===========================
/**
* 获取内容
* $id 内容id,新增为0
* */
protected function _Data($id = 0) {
$row = \Phpcmf\Service::M('category')->get($id);
if (!$row) {
return [];
}
$row['setting'] = dr_string2array($row['setting']);
if ($row['ismain']) {
if ($row['setting']['cat_field']) {
foreach ($row['setting']['cat_field'] as $key => $v) {
unset($this->field[$key]);
}
}
} else {
// 副栏目
$id = \Phpcmf\Service::L('category', 'module')->get_ismain_id($this->module['mid'], $row);
if ($this->module['category'][$id]['setting']['cat_field']) {
foreach ($this->module['category'][$id]['setting']['cat_field'] as $key => $v) {
unset($this->field[$key]);
}
}
}
return $row;
}
/**
* 保存内容
* $id 内容id,新增为0
* $data 提交内容数组,留空为自动获取
* $func 格式化提交的数据
* */
protected function _Save($id = 0, $data = [], $old = [], $func = null, $func2 = null) {
return parent::_Save($id, $data, $old,
function ($id, $data, $old){
// 保存之前的判断
$save = \Phpcmf\Service::L('input')->post('system');
if (!$save['name']) {
return dr_return_data(0, dr_lang('栏目名称不能为空'), ['field' => 'name']);
} elseif (!$save['dirname']) {
return dr_return_data(0, dr_lang('目录名称不能为空'), ['field' => 'dirname']);
}
$rt = \Phpcmf\Service::M('category')->check_dirname($id, $save['pid'], $save['dirname']);
if (!$rt['code']) {
return dr_return_data(0, $rt['msg'], ['field' => 'dirname']);
}
// 默认数据
$save['show'] = (int)$save['show'];
foreach ($data[1] as $n => $t) {
$save[$n] = $t ? $t : '';
}
// 判断共享栏目
if ($this->module['share']) {
// 判断模块tid是否正确
if (isset($save['tid'])) {
$save['tid'] = intval($save['tid']);
if ($save['tid'] == 1 && !$save['mid']) {
return dr_return_data(0, dr_lang('必须选择一个模块'));
} elseif ($save['pid'] && $save['tid'] != 2 && $this->module['category'][$save['pid']]['tid'] == 2) {
return dr_return_data(0, dr_lang('父级栏目是外部地址类型,下级栏目只能选择外部地址'));
} elseif ($save['tid'] == 2 && !$save['setting']['linkurl']) {
return dr_return_data(0, dr_lang('外部地址类型必须填写地址'));
}
// 单页模板识别
//!$save['tid'] && $save['setting']['template']['list'] == 'list.html' && $save['setting']['template']['list'] = 'page.html';
}
if ($old && $old['mid'] && $old['mid'] != $save['mid']
&& \Phpcmf\Service::M()->is_table_exists(dr_module_table_prefix($old['mid']))
&& \Phpcmf\Service::M()->table_site($old['mid'])->where('catid', $old['id'])->counts()) {
$this->_json(0, dr_lang('本栏目存在所属模块内容数据,请删除数据后,再变更模块操作'));
}
// 判断存在mid
/*
if ($save['mid']) {
// 判断逐个父级栏目的mid值
list($pmid, $ids) = \Phpcmf\Service::M('Category')->get_parent_mid($this->module['category'], $id ? $id : $save['pid']);
$pmid && $pmid != $save['mid'] && $this->_json(0, dr_lang('必须选择与上级栏目相同的内容模块(%s)', $pmid));
// 更新上级相关mid
\Phpcmf\Service::M()->db->table($this->init['table'])->whereIn('id', $ids)->update(['mid' => $pmid]);
}*/
}
if ($save['pid'] && $id && $save['pid'] == $id) {
return dr_return_data(0, dr_lang('栏目上级不能为本身'));
}
// 变更栏目时
if ($old && $save['pid'] && $save['pid'] != $old['pid']) {
$pid = $save['pid'];
} elseif (!$old && $save['pid']) {
$pid = $save['pid'];
} else {
$pid = 0;
}
//if ($old) {
//$save['ismain'] = $old['ismain'];
//} else {
//$save['ismain'] = 1;
//}
$save['ismain'] = 1;
if ($pid) {
if (!$this->module['category'][$save['pid']]) {
$this->_json(0, dr_lang('父栏目不存在'));
} elseif ($this->is_scategory && $this->module['category'][$save['pid']]['pcatpost'] == 0
&& $this->module['category'][$save['pid']]['child'] == 0 && $this->module['category'][$save['pid']]['tid'] == 1) {
$mid = $this->module['category'][$save['pid']]['mid'] ? $this->module['category'][$save['pid']]['mid'] : APP_DIR;
if (dr_is_module($mid) && \Phpcmf\Service::M()->table(dr_module_table_prefix($mid))->where('catid', $save['pid'])->counts()) {
$this->_json(0, dr_lang('目标栏目【%s】存在内容数据,无法作为父栏目', $this->module['category'][$save['pid']]['name']));
}
}
//$save['ismain'] = (int)$this->module['category'][$save['pid']]['ismain'];
}
// 不出现在编辑器中的字段
$save['setting']['cat_field'] = $old['setting']['cat_field'];
$save['setting']['module_field'] = $old['setting']['module_field'];
if (isset($save['tid']) && $save['tid'] != 1) {
$save['setting']['notedit'] = 0;
}
if (!$old && (!isset($save['setting']['urlrule']) || !$save['setting']['urlrule'])) {
$save['setting']['urlrule'] = \Phpcmf\Service::C()->get_cache('site', SITE_ID, 'seo', 'SITE_URLRULE');
}
// 数组json化
$save['pids'] = '';
$save['setting'] = dr_array2string($save['setting']);
$save['pdirname'] = '';
$save['childids'] = '';
$save['disabled'] = 0;
return dr_return_data(1, '', [ 1 => $save]);
}, function ($id, $data, $old) {
// 自动更新缓存
$this->_auto_cache(APP_DIR ? APP_DIR : 'share');
\Phpcmf\Hooks::trigger('module_category_save', $data[1]);
$is_html = $this->module['share'] ? $this->module['category'][$data[1]['id']]['setting']['html'] : $this->module['html'];
if ($is_html) {
// 生成权限文件
if (!dr_html_auth(1)) {
return dr_return_data(0, dr_lang('/cache/html/ 无法写入文件'));
}
return dr_return_data(1, dr_lang('操作成功'), [
'htmlfile' => dr_web_prefix('index.php?s='.APP_DIR.'&c=html&m=categoryfile&id='.$data[1]['id']),
'url' => isset($_GET['is_self']) ? dr_url(APP_DIR.'/category/edit', ['id' => $data[1]['id']]) : '',
]);
}
return dr_return_data(1, dr_lang('操作成功'), [
'url' => isset($_GET['is_self']) ? dr_url(APP_DIR.'/category/edit', ['id' => $data[1]['id']]) : '',
]);
}
);
}
private function _auto_cache($cdir) {
if (\Phpcmf\Service::M()->table(SITE_ID.'_'.$cdir.'_category')->counts() < MAX_CATEGORY) {
\Phpcmf\Service::M('module')->update_category_cache(SITE_ID, $cdir);
}
\Phpcmf\Service::M('cache')->sync_cache();
}
}