<?php namespace Xcx;
class Category extends \Xcx\Member
{
public $space; public $category; public $mymodule;
public function __construct(...$params) {
parent::__construct(...$params);
$this->is_data = 0;
$this->tpl_name = 'category';
$this->_init([
'xid' => $this->xcx['id'],
'table' => 'xcx_category',
'field' => [
'thumb' => [
'name' => dr_lang('缩略图'),
'ismain' => 1,
'ismember' => 1,
'fieldtype' => 'File',
'fieldname' => 'thumb',
'setting' => array(
'option' => array(
'ext' => 'jpg,gif,png,jpeg',
'size' => 1,
'input' => 1,
'attachment' => defined('SYS_FIELD_THUMB_ATTACH') ? SYS_FIELD_THUMB_ATTACH : 0,
)
)
],
],
'order_by' => 'displayorder ASC,id ASC',
'where_list' => 'xid='.XCX_ID,
]);
\Phpcmf\Service::M('category', 'xcx')->init($this->init);
$this->mymodule = $this->_get_mymodule();
\Phpcmf\Service::V()->assign([
'mymodule' => $this->mymodule ,
]);
}
protected function _get_tree_list($data) {
$tree = [];
foreach($data as $t) {
$t['name'] = dr_strcut($t['name'], 30);
$t['child'] = $t['pcatpost'] ? 0 : $t['child'];
$t['setting'] = dr_string2array($t['setting']);
$option = '';
$t['tid'] != 2 && $option.= '<a class="btn btn-xs blue" href='.dr_xcx_url('category/add', array('pid' => $t['id'])).'> <i class="fa fa-plus"></i> '.dr_lang('子类').'</a>';
$option.= '<a class="btn btn-xs green" href='.dr_xcx_url('category/edit', array('id' => $t['id'])).'> <i class="fa fa-edit"></i> '.dr_lang('修改').'</a>';
($t['tid'] == 1 && !$t['child']) && $option.= '<a class="btn btn-xs dark" href='.dr_xcx_url($t['mid'].'/add', array('catid' => $t['id'])).'> <i class="fa fa-plus"></i> '.dr_lang('发布').'</a>';
$t['is_show_html'] = '<a href="javascript:;" onclick="dr_cat_ajax_show_open_close(this, \''.dr_xcx_url('category/show_edit', ['id'=>$t['id']]).'\', 0);" class="badge badge-'.(!$t['show'] ? 'no' : 'yes').'"><i class="fa fa-'.(!$t['show'] ? 'times' : 'check').'"></i></a>';
$t['mid'] && $t['mid'] = $this->mymodule[$t['mid']]['name'];
$t['type_html'] = '<span class="badge badge-info"> '.dr_lang('单页').' </span>';
if ($t['tid'] == 1) {
$t['type_html'] = '<span class="badge badge-success"> '.dr_lang('模块').' </span>';
}
!$t['mid'] && $t['mid'] = '<span class="label label-sm label-danger circle">'.dr_lang('无').'</span>';
$t['option'] = $option;
$tree[$t['id']] = $t;
}
$str = "<tr class='\$class'>";
$str.= "<td class='myselect'>
<label class='mt-table mt-table mt-checkbox mt-checkbox-single mt-checkbox-outline'>
<input type='checkbox' class='checkboxes' name='ids[]' value='\$id' />
<span></span>
</label>
</td>";
$str.= "<td style='text-align:center'> <input type='text' onblur='dr_cat_ajax_save(this.value, \$id)' value='\$displayorder' class='displayorder form-control input-sm input-inline input-mini'> </td>";
$str.= "<td style='text-align:center'>\$is_show_html</td>";
$str.= "<td>\$spacer \$name \$parent</td>";
$str.= "<td style='text-align:center'>\$mid</td>";
$str.= "<td>\$option</td>";
$str.= "</tr>";
return \Phpcmf\Service::L('Tree')->init($tree)->html_icon()->get_tree(0, $str);
}
public function index() {
list($tpl, $data) = $this->_List([], -1);
$category = \Phpcmf\Service::M('category', 'xcx')->repair($data['list']);
\Phpcmf\Service::V()->assign([
'list' => $this->_get_tree_list($category),
'move_select' => \Phpcmf\Service::L('Tree')->select_category(
$category,
0,
'name="catid"',
'--',
0, 0
),
]);
\Phpcmf\Service::V()->display($tpl);
}
public function add() {
$id = 0;
$pid = intval(\Phpcmf\Service::L('input')->get('pid'));
$page = intval(\Phpcmf\Service::L('input')->get('page'));
$value = [
'show' => 1,
];
$this->category = \Phpcmf\Service::M('category', 'xcx')->get_category();
$pid && !$this->category[$pid] && $this->_msg(0, dr_lang('栏目【%s】不存在', $pid));
$value['mid'] = $this->category[$pid]['mid'];
list($tpl) = $this->_Post($id, $value, 1);
\Phpcmf\Service::V()->assign([
'form' => dr_form_hidden(['page' => $page]),
'mypage' => $page,
'select' => \Phpcmf\Service::L('Tree')->select_category($this->category, $pid, 'name=\'data[pid]\'', dr_lang('顶级栏目')),
'is_edit_mid' => $pid && $value['mid'] ? 1 : 0,
]);
\Phpcmf\Service::V()->display($tpl);
}
public function edit() {
$id = intval(\Phpcmf\Service::L('input')->get('id'));
$page = intval(\Phpcmf\Service::L('input')->get('page'));
$this->category = \Phpcmf\Service::M('category', 'xcx')->get_category();
list($tpl, $data) = $this->_Post($id, null, 1);
!$data['data'] && $this->_msg(0, dr_lang('栏目数据#%s不存在', $id));
\Phpcmf\Service::V()->assign([
'mypage' => $page,
'form' => dr_form_hidden(['page' => $page]),
'select' => \Phpcmf\Service::L('Tree')->select_category($this->category, $data['data']['pid'], 'name=\'data[pid]\'', dr_lang('顶级栏目')),
'is_edit_mid' => 1,
]);
\Phpcmf\Service::V()->display($tpl);
}
public function all_add() {
$this->category = \Phpcmf\Service::M('category', 'xcx')->get_category();
if (IS_AJAX_POST) {
$post = \Phpcmf\Service::L('input')->post('data');
$list = explode(PHP_EOL, $post['list']);
!$list && $this->_json(0, dr_lang('内容填写不完整'));
$pid = intval($post['pid']);
$pid && !$this->category[$pid] && $this->_json(0, dr_lang('栏目【%s】缓存不存在', $pid));
$count = 0;
foreach ($list as $t) {
list($name, $dir) = explode('|', $t);
$data = [];
$data['name'] = trim($name);
if (!$data['name']) {
continue;
}
$data['dirname'] = trim($dir);
!$data['dirname'] && $data['dirname'] = \Phpcmf\Service::L('pinyin')->result($data['name']);
\Phpcmf\Service::M('category', 'xcx')->check_dirname(0, $data['dirname']) && $data['dirname'].= rand(0,99);
$data['pid'] = $pid;
$data['show'] = 1;
$data['thumb'] = '';
$data['pids'] = '';
$data['pdirname'] = '';
$data['childids'] = '';
$data['content'] = '';
$data['tid'] = 1;
$data['mid'] = $post['mid'];
$data['xid'] = $this->xcx['id'];
if ($data['tid'] == 1) {
!$data['mid'] && $this->_json(0, dr_lang('必须选择一个模块'));
list($pmid, $ids) = \Phpcmf\Service::M('category', 'xcx')->get_parent_mid($this->category, $pid);
$pmid && $pmid != $data['mid'] && $this->_json(0, dr_lang('必须选择与上级栏目相同的内容模块(%s)', $pmid));
}
$data['setting'] = dr_array2string([
'edit' => 1,
]);
$rt = \Phpcmf\Service::M('category', 'xcx')->insert($data);
!$rt['code'] && $this->_json(0, $rt['msg']);
$count ++;
}
$this->_json(1, dr_lang('批量添加%s个栏目', $count));
exit;
}
\Phpcmf\Service::V()->assign([
'form' => dr_form_hidden(),
'select' => \Phpcmf\Service::L('Tree')->select_category($this->category, 0, 'name=\'data[pid]\'', dr_lang('顶级栏目')),
]);
\Phpcmf\Service::V()->display('category_all.html');
}
public function del() {
$ids = \Phpcmf\Service::L('input')->get_post_ids();
!$ids && $this->_json(0, dr_lang('所选栏目不存在'));
$category = \Phpcmf\Service::M('category', 'xcx')->data_for_delete();
$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,
null,
function ($rows) {
foreach ($rows as $t) {
}
return dr_return_data(1);
},
\Phpcmf\Service::M()->dbprefix($this->init['table'])
);
}
public function displayorder_edit() {
$this->_Display_Order(
intval(\Phpcmf\Service::L('input')->get('id')),
intval(\Phpcmf\Service::L('input')->get('value'))
);
}
public function move_edit() {
$ids = \Phpcmf\Service::L('input')->get_post_ids();
!$ids && $this->_json(0, dr_lang('所选栏目不存在'));
$category = \Phpcmf\Service::M('category', 'xcx')->data_for_move();
$cid = (int)\Phpcmf\Service::L('input')->post('catid');
!$category[$cid] && $this->_json(0, dr_lang('所选移动栏目不存在'));
$mid = $category[$cid]['mid'];
$catid = [];
foreach ($ids as $id) {
$catid = dr_array2array($catid, explode(',', $category[$id]['childids']));
}
$mmid = '';
foreach ($catid as $id) {
if ($mid) {
if ($category[$id]['mid'] && $category[$id]['mid'] != $mid) {
$this->_json(0, dr_lang('所选栏目【%s】与目标栏目的模块不一致', $category[$id]['name']));
}
} else {
!$mmid && $category[$id]['mid'] && $mmid = $category[$id]['mid'];
if ($category[$id]['mid'] && $category[$id]['mid'] != $mmid) {
$this->_json(0, dr_lang('所选栏目【%s】与其他栏目的模块不一致', $category[$id]['name']));
}
}
}
\Phpcmf\Service::M()->db->table($this->init['table'])->whereIn('id', $catid)->update(['pid' => $cid]);
$this->_json(1, dr_lang('操作成功'));
}
public function show_edit() {
$id = (int)\Phpcmf\Service::L('input')->get('id');
$row = \Phpcmf\Service::M('category', 'xcx')->init($this->init)->get($id);
!$row && $this->_json(0, dr_lang('栏目数据不存在'));
$v = $row['show'] ? 0 : 1;
\Phpcmf\Service::M('category', 'xcx')->init($this->init)->update($id, ['show' => $v]);
exit($this->_json(1, dr_lang($v ? '显示状态' : '隐藏状态'), ['value' => $v, 'share' => 0]));
}
protected function _Data($id = 0) {
$row = \Phpcmf\Service::M('category', 'xcx')->get($id);
if (!$row) {
return [];
}
$row['setting'] = dr_string2array($row['setting']);
return $row;
}
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('data');
if (!$save['name']) {
return dr_return_data(0, dr_lang('栏目名称不能为空'), ['field' => 'name']);
}
$save['show'] = (int)$save['show'];
foreach ($data[1] as $n => $t) {
$save[$n] = $t ? $t : '';
}
$save['tid'] = 1;
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->category[$save['pid']]['tid'] == 2) {
} elseif ($save['tid'] == 2 && !$save['setting']['linkurl']) {
}
}
$save['xid'] = $this->xcx['id'];
if ($save['pid'] && $id && $save['pid'] == $id) {
return dr_return_data(0, dr_lang('栏目上级不能为本身'));
}
if ($id) {
if ($save['tid'] != $old['tid']) {
return dr_return_data(0, dr_lang('栏目类型不允许修改'));
} elseif ($save['mid'] && $save['mid'] != $old['mid']) {
return dr_return_data(0, dr_lang('内容模块不允许修改'));
}
}
$save['setting'] = dr_array2string($save['setting']);
$save['pids'] = '';
$save['pdirname'] = '';
$save['childids'] = '';
return dr_return_data(1, '', [1 => $save]);
}, function ($id, $data, $old) {
}
);
}
}