Other.php 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482
  1. <?php
  2. /**
  3. * 易优CMS
  4. * ============================================================================
  5. * 版权所有 2016-2028 海南赞赞网络科技有限公司,并保留所有权利。
  6. * 网站地址: http://www.eyoucms.com
  7. * ----------------------------------------------------------------------------
  8. * 如果商业用途务必到官方购买正版授权, 以免引起不必要的法律纠纷.
  9. * ============================================================================
  10. * Author: 小虎哥 <1105415366@qq.com>
  11. * Date: 2018-4-3
  12. */
  13. namespace app\admin\controller;
  14. use think\Page;
  15. use think\Db;
  16. class Other extends Base
  17. {
  18. /*
  19. * 初始化操作
  20. */
  21. public function _initialize()
  22. {
  23. parent::_initialize();
  24. // 判断是否有广告位置
  25. if (strtolower(ACTION_NAME) != 'index') {
  26. $count = M('ad_position')->count('id');
  27. if (empty($count)) {
  28. $this->success('缺少广告位置,正在前往中……', url('AdPosition/add'), '', 3);
  29. exit;
  30. }
  31. }
  32. }
  33. public function index()
  34. {
  35. $list = array();
  36. $get = input('get.');
  37. $pid = input('param.pid/d', 0);
  38. $keywords = input('keywords/s');
  39. $condition = array();
  40. // 应用搜索条件
  41. foreach (['keywords', 'pid'] as $key) {
  42. if (isset($get[$key]) && $get[$key] !== '') {
  43. if ($key == 'keywords') {
  44. $condition['a.title'] = array('LIKE', "%{$get[$key]}%");
  45. } else {
  46. $tmp_key = 'a.'.$key;
  47. $condition[$tmp_key] = array('eq', $get[$key]);
  48. }
  49. }
  50. }
  51. // 多语言
  52. $condition['a.lang'] = array('eq', $this->admin_lang);
  53. $adM = M('ad');
  54. $count = $adM->alias('a')->where($condition)->count();// 查询满足要求的总记录数
  55. $Page = new Page($count, config('paginate.list_rows'));// 实例化分页类 传入总记录数和每页显示的记录数
  56. $list = $adM->alias('a')->where($condition)->order('id desc')->limit($Page->firstRow.','.$Page->listRows)->select();
  57. /*支持子目录*/
  58. foreach ($list as $key => $val) {
  59. $val['litpic'] = handle_subdir_pic($val['litpic']);
  60. $list[$key] = $val;
  61. }
  62. /*--end*/
  63. $show = $Page->show();// 分页显示输出
  64. $this->assign('page',$show);// 赋值分页输出
  65. $this->assign('list',$list);// 赋值数据集
  66. $this->assign('pager',$Page);// 赋值分页对象
  67. $ad_position = model('AdPosition')->getAll('*','id');
  68. $this->assign('ad_position',$ad_position);
  69. $this->assign('pid',$pid);// 赋值分页对象
  70. return $this->fetch();
  71. }
  72. /**
  73. * 新增
  74. */
  75. public function add()
  76. {
  77. $this->language_access(); // 多语言功能操作权限
  78. if (IS_POST) {
  79. $post = input('post.');
  80. $is_remote = !empty($post['is_remote']) ? $post['is_remote'] : 0;
  81. $litpic = '';
  82. if ($is_remote == 1) {
  83. $litpic = $post['litpic_remote'];
  84. } else {
  85. $litpic = $post['litpic_local'];
  86. }
  87. $newData = array(
  88. 'litpic' => $litpic,
  89. 'admin_id' => session('admin_id'),
  90. 'lang' => $this->admin_lang,
  91. 'sort_order' => 100,
  92. 'add_time' => getTime(),
  93. 'update_time' => getTime(),
  94. );
  95. $data = array_merge($post, $newData);
  96. $insertId = M('ad')->insertGetId($data);
  97. if ($insertId) {
  98. /*同步广告位置ID到多语言的模板变量里*/
  99. $this->syn_add_language_attribute($insertId);
  100. /*--end*/
  101. \think\Cache::clear('ad');
  102. adminLog('新增广告:'.$post['title']);
  103. $this->success("操作成功", url('Other/index'));
  104. } else {
  105. $this->error("操作失败");
  106. }
  107. exit;
  108. }
  109. $pid = input('param.pid/d', 0);
  110. $this->assign('pid', $pid);
  111. $ad_position = model('AdPosition')->getAll('*', 'id');
  112. $this->assign('ad_position', $ad_position);
  113. $ad_media_type = config('global.ad_media_type');
  114. $this->assign('ad_media_type', $ad_media_type);
  115. return $this->fetch();
  116. }
  117. /**
  118. * 编辑
  119. */
  120. public function edit()
  121. {
  122. if (IS_POST) {
  123. $post = input('post.');
  124. if(!empty($post['id'])){
  125. $is_remote = !empty($post['is_remote']) ? $post['is_remote'] : 0;
  126. $litpic = '';
  127. if ($is_remote == 1) {
  128. $litpic = $post['litpic_remote'];
  129. } else {
  130. $litpic = $post['litpic_local'];
  131. }
  132. $newData = array(
  133. 'litpic' => $litpic,
  134. 'update_time' => getTime(),
  135. );
  136. $data = array_merge($post, $newData);
  137. $r = M('ad')->where([
  138. 'id' => $post['id'],
  139. ])
  140. ->cache(true,null,'ad')
  141. ->update($data);
  142. }
  143. if ($r) {
  144. adminLog('编辑广告');
  145. $this->success("操作成功", url('Other/index'));
  146. } else {
  147. $this->error("操作失败");
  148. }
  149. }
  150. $assign_data = array();
  151. $id = input('id/d');
  152. $field = M('ad')->where([
  153. 'id' => $id,
  154. ])->find();
  155. if (empty($field)) {
  156. $this->error('广告不存在,请联系管理员!');
  157. exit;
  158. }
  159. if (is_http_url($field['litpic'])) {
  160. $field['is_remote'] = 1;
  161. $field['litpic_remote'] = handle_subdir_pic($field['litpic']);
  162. } else {
  163. $field['is_remote'] = 0;
  164. $field['litpic_local'] = handle_subdir_pic($field['litpic']);
  165. }
  166. /*支持子目录*/
  167. $field['intro'] = handle_subdir_pic($field['intro'], 'html');
  168. /*--end*/
  169. $assign_data['field'] = $field;
  170. $assign_data['ad_position'] = model('AdPosition')->getAll('*', 'id');
  171. $assign_data['ad_media_type'] = config('global.ad_media_type');
  172. $this->assign($assign_data);
  173. return $this->fetch();
  174. }
  175. /**
  176. * 删除
  177. */
  178. public function del()
  179. {
  180. $this->language_access(); // 多语言功能操作权限
  181. $id_arr = input('del_id/a');
  182. $id_arr = eyIntval($id_arr);
  183. if(!empty($id_arr)){
  184. /*多语言*/
  185. $attr_name_arr = [];
  186. foreach ($id_arr as $key => $val) {
  187. $attr_name_arr[] = 'ad'.$val;
  188. }
  189. if (is_language()) {
  190. $new_id_arr = Db::name('language_attr')->where([
  191. 'attr_name' => ['IN', $attr_name_arr],
  192. 'attr_group' => 'ad',
  193. ])->column('attr_value');
  194. !empty($new_id_arr) && $id_arr = $new_id_arr;
  195. }
  196. /*--end*/
  197. $r = M('ad')->where([
  198. 'id' => ['IN', $id_arr],
  199. ])
  200. ->cache(true,null,'ad')
  201. ->delete();
  202. if ($r) {
  203. /*多语言*/
  204. if (!empty($attr_name_arr)) {
  205. M('language_attr')->where([
  206. 'attr_name' => ['IN', $attr_name_arr],
  207. 'attr_group' => 'ad',
  208. ])->delete();
  209. M('language_attribute')->where([
  210. 'attr_name' => ['IN', $attr_name_arr],
  211. 'attr_group' => 'ad',
  212. ])->delete();
  213. }
  214. /*--end*/
  215. adminLog('删除广告-id:'.implode(',', $id_arr));
  216. $this->success('删除成功');
  217. } else {
  218. $this->error('删除失败');
  219. }
  220. }else{
  221. $this->error('参数有误');
  222. }
  223. }
  224. /**
  225. * ui美化新增
  226. */
  227. public function ui_add()
  228. {
  229. $this->language_access(); // 多语言功能操作权限
  230. if (IS_POST) {
  231. $post = input('post.');
  232. $is_remote = !empty($post['is_remote']) ? $post['is_remote'] : 0;
  233. $litpic = '';
  234. if ($is_remote == 1) {
  235. $litpic = $post['litpic_remote'];
  236. } else {
  237. $litpic = $post['litpic_local'];
  238. }
  239. $newData = array(
  240. 'media_type' => 1,
  241. 'litpic' => $litpic,
  242. 'lang' => get_current_lang(),
  243. 'add_time' => getTime(),
  244. 'update_time' => getTime(),
  245. );
  246. $data = array_merge($post, $newData);
  247. $insertId = M('ad')->insertGetId($data);
  248. if ($insertId) {
  249. /*同步广告位置ID到多语言的模板变量里*/
  250. $this->syn_add_language_attribute($insertId);
  251. /*--end*/
  252. \think\Cache::clear('ad');
  253. adminLog('新增广告:'.$post['title']);
  254. $this->success('操作成功');
  255. } else {
  256. $this->error('操作失败');
  257. }
  258. }
  259. $edit_id = input('param.edit_id/d', 0);
  260. $pid = input('param.pid/d', 0);
  261. /*多语言*/
  262. $new_pid = model('LanguageAttr')->getBindValue($pid, 'ad_position');
  263. !empty($new_pid) && $pid = $new_pid;
  264. /*--end*/
  265. $assign_data = array();
  266. $assign_data['ad_position'] = model('AdPosition')->getInfo($pid);
  267. $assign_data['edit_id'] = $edit_id;
  268. $this->assign($assign_data);
  269. return $this->fetch();
  270. }
  271. /**
  272. * ui美化编辑
  273. */
  274. public function ui_edit()
  275. {
  276. if (IS_POST) {
  277. $post = input('post.');
  278. if(!empty($post['id'])){
  279. $is_remote = !empty($post['is_remote']) ? $post['is_remote'] : 0;
  280. $litpic = '';
  281. if ($is_remote == 1) {
  282. $litpic = $post['litpic_remote'];
  283. } else {
  284. $litpic = $post['litpic_local'];
  285. }
  286. $newData = array(
  287. 'litpic' => $litpic,
  288. 'update_time' => getTime(),
  289. );
  290. $data = array_merge($post, $newData);
  291. $r = M('ad')->where([
  292. 'id' => $post['id'],
  293. ])
  294. ->cache(true,null,'ad')
  295. ->update($data);
  296. if ($r) {
  297. adminLog('编辑广告:'.$post['title']);
  298. $this->success('操作成功');
  299. }
  300. }
  301. $this->error('操作失败');
  302. }
  303. $assign_data = array();
  304. $id = input('id/d');
  305. $field = M('ad')->where([
  306. 'id' => $id,
  307. ])->find();
  308. if (empty($field)) {
  309. $this->error('广告不存在,请联系管理员!');
  310. exit;
  311. }
  312. if (is_http_url($field['litpic'])) {
  313. $field['is_remote'] = 1;
  314. $field['litpic_remote'] = $field['litpic'];
  315. } else {
  316. $field['is_remote'] = 0;
  317. $field['litpic_local'] = $field['litpic'];
  318. }
  319. $assign_data['field'] = $field;
  320. $assign_data['ad_position'] = model('AdPosition')->getInfo($field['pid']);
  321. $this->assign($assign_data);
  322. return $this->fetch();
  323. }
  324. /**
  325. * 删除
  326. */
  327. public function ui_del()
  328. {
  329. $this->language_access(); // 多语言功能操作权限
  330. $id_arr = input('del_id/a');
  331. $id_arr = eyIntval($id_arr);
  332. if(!empty($id_arr)){
  333. /*多语言*/
  334. $attr_name_arr = [];
  335. foreach ($id_arr as $key => $val) {
  336. $attr_name_arr[] = 'ad'.$val;
  337. }
  338. if (is_language()) {
  339. $new_id_arr = Db::name('language_attr')->where([
  340. 'attr_name' => ['IN', $attr_name_arr],
  341. 'attr_group' => 'ad',
  342. ])->column('attr_value');
  343. !empty($new_id_arr) && $id_arr = $new_id_arr;
  344. }
  345. /*--end*/
  346. $r = M('ad')->where([
  347. 'id' => ['IN', $id_arr],
  348. ])
  349. ->cache(true,null,'ad')
  350. ->delete();
  351. if ($r) {
  352. /*多语言*/
  353. if (!empty($attr_name_arr)) {
  354. M('language_attr')->where([
  355. 'attr_name' => ['IN', $attr_name_arr],
  356. 'attr_group' => 'ad',
  357. ])->delete();
  358. M('language_attribute')->where([
  359. 'attr_name' => ['IN', $attr_name_arr],
  360. 'attr_group' => 'ad',
  361. ])->delete();
  362. }
  363. /*--end*/
  364. adminLog('删除广告-id:'.implode(',', $id_arr));
  365. $this->success('删除成功');
  366. } else {
  367. $this->error('删除失败');
  368. }
  369. }else{
  370. $this->error('参数有误');
  371. }
  372. }
  373. /**
  374. * 同步新增广告ID到多语言的模板变量里
  375. */
  376. private function syn_add_language_attribute($ad_id)
  377. {
  378. /*单语言情况下不执行多语言代码*/
  379. if (!is_language()) {
  380. return true;
  381. }
  382. /*--end*/
  383. $attr_group = 'ad';
  384. $admin_lang = $this->admin_lang;
  385. $main_lang = get_main_lang();
  386. $languageRow = Db::name('language')->field('mark')->order('id asc')->select();
  387. if (!empty($languageRow) && $admin_lang == $main_lang) { // 当前语言是主体语言,即语言列表最早新增的语言
  388. $ad_db = Db::name('ad');
  389. $result = $ad_db->find($ad_id);
  390. $attr_name = 'ad'.$ad_id;
  391. $r = Db::name('language_attribute')->save([
  392. 'attr_title' => $result['title'],
  393. 'attr_name' => $attr_name,
  394. 'attr_group' => $attr_group,
  395. 'add_time' => getTime(),
  396. 'update_time' => getTime(),
  397. ]);
  398. if (false !== $r) {
  399. $data = [];
  400. foreach ($languageRow as $key => $val) {
  401. /*同步新广告到其他语言广告列表*/
  402. if ($val['mark'] != $admin_lang) {
  403. $addsaveData = $result;
  404. $addsaveData['lang'] = $val['mark'];
  405. $newPid = Db::name('language_attr')->where([
  406. 'attr_name' => 'adp'.$result['pid'],
  407. 'attr_group' => 'ad_position',
  408. 'lang' => $val['mark'],
  409. ])->getField('attr_value');
  410. $addsaveData['pid'] = $newPid;
  411. unset($addsaveData['id']);
  412. $ad_id = $ad_db->insertGetId($addsaveData);
  413. }
  414. /*--end*/
  415. /*所有语言绑定在主语言的ID容器里*/
  416. $data[] = [
  417. 'attr_name' => $attr_name,
  418. 'attr_value' => $ad_id,
  419. 'lang' => $val['mark'],
  420. 'attr_group' => $attr_group,
  421. 'add_time' => getTime(),
  422. 'update_time' => getTime(),
  423. ];
  424. /*--end*/
  425. }
  426. if (!empty($data)) {
  427. model('LanguageAttr')->saveAll($data);
  428. }
  429. }
  430. }
  431. }
  432. }