📄 正在查看:admin/control/category_control.class.php
大小:6,147 字节 · 修改:2014-01-23 01:42:52 · 行数:227
1<?php
2/**
3 * (C)2012-2014 twcms.com TongWang Inc.
4 * Author: wuzhaohuan <kongphp@gmail.com>
5 */
6
7defined('TWCMS_PATH') or exit;
8
9class category_control extends admin_control {
10 // 分类管理
11 public function index() {
12 $mod_name = $this->models->get_name();
13 $this->assign('mod_name', $mod_name);
14
15 $_ENV['_category_class'] = &$this->category;
16 $_cfg = $this->runtime->xget();
17 $this->assign('_cfg', $_cfg);
18
19 $category_arr = $this->category->get_category();
20 $this->assign('category_arr', $category_arr);
21
22 $models = json_encode($this->models->get_models());
23 $this->assign('models', $models);
24
25 // hook admin_category_control_index_after.php
26
27 $this->display();
28 }
29
30 // 写入分类 (包括添加和编辑)
31 public function set() {
32 if(!empty($_POST)) {
33 $post = array(
34 'cid' => intval(R('cid', 'P')),
35 'mid' => intval(R('mid', 'P')),
36 'type' => intval(R('type', 'P')),
37 'upid' => intval(R('upid', 'P')),
38 'name' => trim(strip_tags(R('name', 'P'))),
39 'alias' => trim(R('alias', 'P')),
40 'intro' => trim(strip_tags(R('intro', 'P'))),
41 'cate_tpl' => trim(strip_tags(R('cate_tpl', 'P'))),
42 'show_tpl' => trim(strip_tags(R('show_tpl', 'P'))),
43 'count' => 0,
44 'orderby' => intval(R('orderby', 'P')),
45 'seo_title' => trim(strip_tags(R('seo_title', 'P'))),
46 'seo_keywords' => trim(strip_tags(R('seo_keywords', 'P'))),
47 'seo_description' => trim(strip_tags(R('seo_description', 'P'))),
48 );
49
50 $category = &$this->category;
51
52 // 检查基本参数是否填写
53 if($err = $category->check_base($post)) {
54 E(1, $err['msg'], $err['name']);
55 }
56
57 // cid 没有值时,为增加分类,否则为编辑分类
58 if(empty($post['cid'])) {
59 // 检查别名是否被使用
60 if($err = $category->check_alias($post['alias'])) {
61 E(1, $err['msg'], $err['name']);
62 }
63
64 $maxid = $category->create($post);
65 if(!$maxid) {
66 E(1, '写入分类数据表出错');
67 }
68
69 // 单页时
70 if($post['mid'] == 1) {
71 $pagedata = array('content' => R('page_content', 'P'));
72 if(!$this->cms_page->set($maxid, $pagedata)) {
73 E(1, '写入单页数据表出错');
74 }
75 }
76 }else{
77 $data = $category->read($post['cid']);
78
79 // 检查分类是否符合编辑条件
80 if($err = $category->check_is_edit($post, $data)) {
81 E(1, $err['msg'], $err['name']);
82 }
83
84 // 别名被修改过才检查是否被使用
85 if($post['alias'] != $data['alias']) {
86 $err = $category->check_alias($post['alias']);
87 if($err) {
88 E(1, $err['msg'], $err['name']);
89 }
90
91 // 修改导航中的分类的别名
92 $navigate = $this->kv->xget('navigate');
93 foreach($navigate as $k=>$v) {
94 if($v['cid'] == $post['cid']) $navigate[$k]['alias'] = $post['alias'];
95 if(isset($v['son'])) {
96 foreach($v['son'] as $k2=>$v2) {
97 if($v2['cid'] == $post['cid']) $navigate[$k]['son'][$k2]['alias'] = $post['alias'];
98 }
99 }
100 }
101 $this->kv->set('navigate', $navigate);
102 }
103
104 // 这里赋值,是为了开启缓存后,编辑时更新缓存
105 $post['count'] = $data['count'];
106 if(!$category->update($post)) {
107 E(1, '写入分类数据表出错');
108 }
109
110 // 删除以前的单页数据
111 if($data['mid'] == 1 && $post['mid'] > 1) {
112 $this->cms_page->delete($post['cid']);
113 }
114
115 // 单页时
116 if($post['mid'] == 1) {
117 $pagedata = array('content' => R('page_content', 'P'));
118 if(!$this->cms_page->set($post['cid'], $pagedata)) {
119 E(1, '写入单页数据表出错');
120 }
121 }
122 }
123
124 // 删除缓存
125 $this->runtime->truncate();
126
127 if(empty($msg)) {
128 E(0, '保存成功');
129 }
130 }
131 }
132
133 // 删除分类
134 public function del() {
135 $cid = intval(R('cid', 'P'));
136
137 $data = $this->category->read($cid);
138
139 // 检查是否符合删除条件
140 if($err_msg = $this->category->check_is_del($data)) {
141 E(1, $err_msg);
142 }
143
144 if(!$this->category->delete($cid)) {
145 E(1, '操作分类表时出错');
146 }
147
148 if($data['mid'] == 1 && !$this->cms_page->delete($cid)) {
149 E(1, '操作单页表时出错');
150 }
151
152 // 删除导航中的分类
153 $navigate = $this->kv->xget('navigate');
154 foreach($navigate as $k=>$v) {
155 if($v['cid'] == $cid) unset($navigate[$k]);
156 if(isset($v['son'])) {
157 foreach($v['son'] as $k2=>$v2) {
158 if($v2['cid'] == $cid) unset($navigate[$k]['son'][$k2]);
159 }
160 }
161 }
162 $this->kv->set('navigate', $navigate);
163
164 // 删除缓存
165 $this->runtime->truncate();
166
167 E(0, '删除完成');
168 }
169
170 // 修改分类排序
171 public function edit_orderby() {
172 if(!empty($_POST)) {
173 $post['cid'] = intval(R('cid', 'P'));
174 $post['orderby'] = intval(R('orderby', 'P'));
175
176 if(!$this->category->update($post)) {
177 E(1, '修改分类排序出错');
178 }else{
179 E(0, '修改分类排序成功');
180 }
181 }
182 }
183
184 // 读取上级分类
185 public function get_category_upid() {
186 $data['upid'] = $this->category->get_category_upid(intval(R('mid')), intval(R('upid')), intval(R('noid')));
187 echo json_encode($data);
188 exit;
189 }
190
191 // 读取分类 (JSON)
192 public function get_category_json() {
193 $cid = intval(R('cid', 'P'));
194 $data = $this->category->get($cid);
195
196 // 读取单页内容
197 if($data['mid'] == 1) {
198 $data2 = $this->cms_page->get($cid);
199 if($data2) $data['page_content'] = $data2['content'];
200 }
201
202 // 为频道时,检测是否有下级分类
203 if($data['type'] == 1 && $this->category->find_fetch_key(array('upid' => $data['cid']), array(), 0, 1)) {
204 $data['son_cate'] = 1;
205 }
206
207 echo json_encode($data);
208 exit;
209 }
210
211 // 读取分类 (JSON)
212 public function get_category_content() {
213 $_ENV['_category_class'] = &$this->category;
214
215 $mod_name = $this->models->get_name();
216 $category_arr = $this->category->get_category();
217
218 $this->assign('mod_name', $mod_name);
219 $this->assign('category_arr', $category_arr);
220
221 $this->display('inc-category_content.htm');
222 exit;
223 }
224
225 // hook admin_category_control_after.php
226}
227