store_decoration.php 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662
  1. <?php
  2. /**
  3. * 店铺装修
  4. *
  5. *
  6. *
  7. ***/
  8. defined('InShopNC') or exit('Access Invalid!');
  9. class store_decorationControl extends BaseSellerControl {
  10. public function __construct() {
  11. parent::__construct();
  12. }
  13. /**
  14. * 店铺装修设置
  15. */
  16. public function decoration_settingOp() {
  17. $model_store_decoration = Model('store_decoration');
  18. $store_decoration_info = $model_store_decoration->getStoreDecorationInfo(array('store_id' => $_SESSION['store_id']));
  19. if(empty($store_decoration_info)) {
  20. //创建默认装修
  21. $param = array();
  22. $param['decoration_name'] = '默认装修';
  23. $param['store_id'] = $_SESSION['store_id'];
  24. $decoration_id = $model_store_decoration->addStoreDecoration($param);
  25. } else {
  26. $decoration_id = $store_decoration_info['decoration_id'];
  27. }
  28. Tpl::output('store_decoration_switch', $this->store_info['store_decoration_switch']);
  29. Tpl::output('store_decoration_only', $this->store_info['store_decoration_only']);
  30. Tpl::output('decoration_id', $decoration_id);
  31. $this->profile_menu('decoration_setting');
  32. Tpl::showpage('store_decoration.setting');
  33. }
  34. /**
  35. * 店铺装修设置保存
  36. */
  37. public function decoration_setting_saveOp() {
  38. $model_store_decoration = Model('store_decoration');
  39. $model_store = Model('store');
  40. $store_decoration_info = $model_store_decoration->getStoreDecorationInfo(array('store_id' => $_SESSION['store_id']));
  41. if(empty($store_decoration_info)) {
  42. showDialog('参数错误');
  43. }
  44. $update = array();
  45. if(empty($_POST['store_decoration_switch'])) {
  46. $update['store_decoration_switch'] = 0;
  47. } else {
  48. $update['store_decoration_switch'] = $store_decoration_info['decoration_id'];
  49. }
  50. $update['store_decoration_only'] = intval($_POST['store_decoration_only']);
  51. $result = $model_store->editStore($update, array('store_id' => $_SESSION['store_id']));
  52. if($result) {
  53. showDialog(L('nc_common_save_succ'), '', 'succ');
  54. } else {
  55. showDialog(L('nc_common_save_fail'));
  56. }
  57. }
  58. /**
  59. * 装修图库列表
  60. */
  61. public function decoration_albumOp() {
  62. $model_store_decoration_album = Model('store_decoration_album');
  63. $condition = array();
  64. $condition['store_id'] = $_SESSION['store_id'];
  65. $image_list = $model_store_decoration_album->getStoreDecorationAlbumList($condition, 24, 'upload_time desc');
  66. Tpl::output('image_list', $image_list);
  67. Tpl::output('show_page',$model_store_decoration_album->showpage());
  68. $this->profile_menu('decoration_album');
  69. Tpl::showpage('store_decoration.album');
  70. }
  71. /**
  72. * 图片上传
  73. */
  74. public function decoration_album_uploadOp() {
  75. $store_id = $_SESSION ['store_id'];
  76. $data = array();
  77. //判断装修相册数量限制,预设100
  78. if($this->store_info['store_decoration_image_count'] > 100) {
  79. $data['error'] = '相册已满,请首先删除无用图片';
  80. echo json_encode($data);die;
  81. }
  82. //上传图片
  83. $upload = new UploadFile();
  84. $upload->set('default_dir', ATTACH_STORE_DECORATION . DS . $store_id);
  85. $upload->set('max_size', C('image_max_filesize'));
  86. $upload->set('fprefix', $store_id);
  87. $result_file = $upload->upfile('file');
  88. if($result_file) {
  89. $image = $upload->file_name;
  90. } else {
  91. $error = $upload->error;
  92. $data['error'] = $error;
  93. echo json_encode($data);die;
  94. }
  95. //图片尺寸
  96. list($width, $height) = getimagesize(BASE_UPLOAD_PATH . DS . ATTACH_STORE_DECORATION . DS . $store_id . DS . $image);
  97. //图片原始名称
  98. $image_origin_name_array = explode('.', $_FILES["file"]["name"]);
  99. //插入相册表
  100. $param = array();
  101. $param['image_name'] = $image;
  102. $param['image_origin_name'] = $image_origin_name_array['0'];
  103. $param['image_width'] = $width;
  104. $param['image_height'] = $height;
  105. $param['image_size'] = intval($_FILES['file']['size']);
  106. $param['store_id'] = $store_id;
  107. $param['upload_time'] = TIMESTAMP;
  108. $result = Model('store_decoration_album')->addStoreDecorationAlbum($param);
  109. if($result) {
  110. //装修相册计数加1
  111. Model('store')->editStore(
  112. array('store_decoration_image_count' => array('exp', 'store_decoration_image_count+1')),
  113. array('store_id' => $_SESSION['store_id'])
  114. );
  115. $data['image_name'] = $image;
  116. $data['image_url'] = getStoreDecorationImageUrl($image, $store_id);
  117. } else {
  118. $data['error'] = '上传失败';
  119. }
  120. echo json_encode($data);die;
  121. }
  122. /**
  123. * 图片删除
  124. */
  125. public function decoration_album_delOp() {
  126. $image_id = intval($_POST['image_id']);
  127. $data = array();
  128. $model_store_decoration_album = Model('store_decoration_album');
  129. //验证图片权限
  130. $condition = array();
  131. $condition['image_id'] = $image_id;
  132. $condition['store_id'] = $_SESSION['store_id'];
  133. $result = $model_store_decoration_album->delStoreDecorationAlbum($condition);
  134. if($result) {
  135. //装修相册计数减1
  136. if($this->store_info['store_decoration_image_count'] > 0) {
  137. Model('store')->editStore(
  138. array('store_decoration_image_count' => array('exp', 'store_decoration_image_count-1')),
  139. array('store_id' => $_SESSION['store_id'])
  140. );
  141. }
  142. $data['message'] = '删除成功';
  143. } else {
  144. $data['error'] = '删除失败';
  145. }
  146. echo json_encode($data);die;
  147. }
  148. /**
  149. * 店铺装修
  150. */
  151. public function decoration_editOp() {
  152. $decoration_id = intval($_GET['decoration_id']);
  153. $model_store_decoration = Model('store_decoration');
  154. $decoration_info = $model_store_decoration->getStoreDecorationInfoDetail($decoration_id, $_SESSION['store_id']);
  155. if($decoration_info) {
  156. $this->_output_decoration_info($decoration_info);
  157. } else {
  158. showMessage(L('param_error'), '', 'error');
  159. }
  160. //设定模板为完成宽度
  161. Tpl::output('seller_layout_no_menu', true);
  162. Tpl::showpage('store_decoration.edit');
  163. }
  164. /**
  165. * 输出装修设置
  166. */
  167. private function _output_decoration_info($decoration_info) {
  168. $model_store_decoration = Model('store_decoration');
  169. $decoration_background_style = $model_store_decoration->getDecorationBackgroundStyle($decoration_info['decoration_setting']);
  170. Tpl::output('decoration_background_style', $decoration_background_style);
  171. Tpl::output('decoration_nav', $decoration_info['decoration_nav']);
  172. Tpl::output('decoration_banner', $decoration_info['decoration_banner']);
  173. Tpl::output('decoration_setting', $decoration_info['decoration_setting']);
  174. Tpl::output('block_list', $decoration_info['block_list']);
  175. }
  176. /**
  177. * 保存店铺装修背景设置
  178. */
  179. public function decoration_background_setting_saveOp() {
  180. $decoration_id = intval($_POST['decoration_id']);
  181. //验证参数
  182. if($decoration_id <= 0) {
  183. $data['error'] = L('param_error');
  184. echo json_encode($data);die;
  185. }
  186. $setting = array();
  187. $setting['background_color'] = $_POST['background_color'];
  188. $setting['background_image'] = $_POST['background_image'];
  189. $setting['background_image_repeat'] = $_POST['background_image_repeat'];
  190. $setting['background_position_x'] = $_POST['background_position_x'];
  191. $setting['background_position_y'] = $_POST['background_position_y'];
  192. $setting['background_attachment'] = $_POST['background_attachment'];
  193. //背景设置保存验证
  194. $validate_setting = $this->_validate_background_setting_input($decoration_id, $setting);
  195. if(isset($validate_setting['error'])) {
  196. $data['error'] = $validate_setting['error'];
  197. echo json_encode($data);die;
  198. }
  199. $data = array();
  200. $model_store_decoration = Model('store_decoration');
  201. $condition = array();
  202. $condition['decoration_id'] = $decoration_id;
  203. $condition['store_id'] = $_SESSION['store_id'];
  204. $update = array();
  205. $update['decoration_setting'] = serialize($setting);
  206. $result = $model_store_decoration->editStoreDecoration($update, $condition);
  207. if($result) {
  208. $data['decoration_background_style'] = $model_store_decoration->getDecorationBackgroundStyle($validate_setting);
  209. } else {
  210. $data['error'] = '保存失败';
  211. }
  212. echo json_encode($data);die;
  213. }
  214. /**
  215. * 背景设置保存验证
  216. */
  217. private function _validate_background_setting_input($decoration_id, $setting) {
  218. //验证输入
  219. if($decoration_id <= 0) {
  220. return array('error', L('param_error'));
  221. }
  222. if(!empty($setting['background_color'])) {
  223. if(strlen($setting['background_color']) > 7) {
  224. return array('error', '请输入正确的背景颜色');
  225. }
  226. } else {
  227. $setting['background_color'] = '';
  228. }
  229. if(!empty($setting['background_image'])) {
  230. $setting['background_image_url'] = getStoreDecorationImageUrl($setting['background_image'], $_SESSION['store_id']);
  231. if($setting['background_image_url'] == '') {
  232. return array('error', '请选择正确的背景图片');
  233. }
  234. } else {
  235. $setting['background_image'] = '';
  236. }
  237. if(!in_array($setting['background_image_repeat'], array('no-repeat', 'repeat', 'repeat-x', 'repeat-y'))) {
  238. $setting['background_image_repeat'] = '';
  239. }
  240. if(strlen($setting['background_position_x']) > 8) {
  241. $setting['background_position_x'] = '';
  242. }
  243. if(strlen($setting['background_position_y']) > 8) {
  244. $setting['background_position_y'] = '';
  245. }
  246. if(strlen($setting['background_attachment']) > 8) {
  247. $setting['background_attachment'] = '';
  248. }
  249. return $setting;
  250. }
  251. /**
  252. * 装修导航保存
  253. */
  254. public function decoration_nav_saveOp() {
  255. $decoration_id = intval($_POST['decoration_id']);
  256. $nav = array();
  257. $nav['display'] = $_POST['nav_display'];
  258. $nav['style'] = $_POST['content'];
  259. $data = array();
  260. //验证参数
  261. if($decoration_id <= 0) {
  262. $data['error'] = L('param_error');
  263. echo json_encode($data);die;
  264. }
  265. $model_store_decoration = Model('store_decoration');
  266. $condition = array();
  267. $condition['decoration_id'] = $decoration_id;
  268. $condition['store_id'] = $_SESSION['store_id'];
  269. $update = array();
  270. $update['decoration_nav'] = serialize($nav);
  271. $result = $model_store_decoration->editStoreDecoration($update, $condition);
  272. if($result) {
  273. $data['message'] = '保存成功';
  274. } else {
  275. $data['error'] = '保存失败';
  276. }
  277. echo json_encode($data);die;
  278. }
  279. /**
  280. * 装修banner保存
  281. */
  282. public function decoration_banner_saveOp() {
  283. $decoration_id = intval($_POST['decoration_id']);
  284. $banner = array();
  285. $banner['display'] = $_POST['banner_display'];
  286. $banner['image'] = $_POST['content'];
  287. $data = array();
  288. //验证参数
  289. if($decoration_id <= 0) {
  290. $data['error'] = L('param_error');
  291. echo json_encode($data);die;
  292. }
  293. $model_store_decoration = Model('store_decoration');
  294. $condition = array();
  295. $condition['decoration_id'] = $decoration_id;
  296. $condition['store_id'] = $_SESSION['store_id'];
  297. $update = array();
  298. $update['decoration_banner'] = serialize($banner);
  299. $result = $model_store_decoration->editStoreDecoration($update, $condition);
  300. if($result) {
  301. $data['message'] = '保存成功';
  302. $data['image_url'] = getStoreDecorationImageUrl($banner['image'], $_SESSION['store_id']);
  303. } else {
  304. $data['error'] = '保存失败';
  305. }
  306. echo json_encode($data);die;
  307. }
  308. /**
  309. * 装修添加块
  310. */
  311. public function decoration_block_addOp() {
  312. $decoration_id = intval($_POST['decoration_id']);
  313. $block_layout = $_POST['block_layout'];
  314. $data = array();
  315. $model_store_decoration = Model('store_decoration');
  316. //验证装修编号
  317. $condition = array();
  318. $condition['decoration_id'] = $decoration_id;
  319. $decoration_info = $model_store_decoration->getStoreDecorationInfo($condition, $_SESSION['store_id']);
  320. if(!$decoration_info) {
  321. $data['error'] = L('param_error');
  322. echo json_encode($data);
  323. }
  324. //验证装修块布局
  325. $block_layout_array = $model_store_decoration->getStoreDecorationBlockLayoutArray();
  326. if(!in_array($block_layout, $block_layout_array)) {
  327. $data['error'] = L('param_error');
  328. echo json_encode($data);
  329. }
  330. $param = array();
  331. $param['decoration_id'] = $decoration_id;
  332. $param['store_id'] = $_SESSION['store_id'];
  333. $param['block_layout'] = $block_layout;
  334. $block_id = $model_store_decoration->addStoreDecorationBlock($param);
  335. if($block_id) {
  336. ob_start();
  337. Tpl::output('block', array('block_id' => $block_id));
  338. Tpl::showpage('store_decoration_block', 'null_layout');
  339. $temp = ob_get_contents();
  340. ob_end_clean();
  341. $data['html'] = $temp;
  342. } else {
  343. $data['error'] = '添加失败';
  344. }
  345. echo json_encode($data);die;
  346. }
  347. /**
  348. * 装修块删除
  349. */
  350. public function decoration_block_delOp() {
  351. $block_id = intval($_POST['block_id']);
  352. $data = array();
  353. $model_store_decoration = Model('store_decoration');
  354. $condition = array();
  355. $condition['block_id'] = $block_id;
  356. $condition['store_id'] = $_SESSION['store_id'];
  357. $result = $model_store_decoration->delStoreDecorationBlock($condition);
  358. if($result) {
  359. $data['message'] = '删除成功';
  360. } else {
  361. $data['error'] = '删除失败';
  362. }
  363. echo json_encode($data);die;
  364. }
  365. /**
  366. * 装修块保存
  367. */
  368. public function decoration_block_saveOp() {
  369. $block_id = intval($_POST['block_id']);
  370. $module_type = $_POST['module_type'];
  371. $data = array();
  372. $model_store_decoration = Model('store_decoration');
  373. //验证模块类型
  374. $block_type_array = $model_store_decoration->getStoreDecorationBlockTypeArray();
  375. if(!in_array($module_type, $block_type_array)) {
  376. $data['error'] = L('param_error');
  377. echo json_encode($data);
  378. }
  379. switch ($module_type) {
  380. case 'html':
  381. $content = htmlspecialchars($_POST['content']);
  382. break;
  383. default:
  384. $content = serialize($_POST['content']);
  385. }
  386. $condition = array();
  387. $condition['block_id'] = $block_id;
  388. $condition['store_id'] = $_SESSION['store_id'];
  389. $param = array();
  390. $param['block_content'] = $content;
  391. $param['block_full_width'] = intval($_POST['full_width']);
  392. $param['block_module_type'] = $module_type;
  393. $result = $model_store_decoration->editStoreDecorationBlock($param, $condition);
  394. if($result) {
  395. $data['message'] = '保存成功';
  396. $data['html'] = $this->_get_block_html($content, $module_type);
  397. } else {
  398. $data['error'] = '保存失败';
  399. }
  400. echo json_encode($data);die;
  401. }
  402. /**
  403. * 装修块排序
  404. */
  405. public function decoration_block_sortOp() {
  406. $sort_array = explode(',', rtrim($_POST['sort_string'], ','));
  407. $model_store_decoration = Model('store_decoration');
  408. $condition = array();
  409. $condition['store_id'] = $_SESSION['store_id'];
  410. $sort = 1;
  411. foreach ($sort_array as $value) {
  412. $condition['block_id'] = $value;
  413. $model_store_decoration->editStoreDecorationBlock(array('block_sort' => $sort), $condition);
  414. $sort = $sort + 1;
  415. }
  416. $data = array();
  417. $data['message'] = '保存成功';
  418. echo json_encode($data);die;
  419. }
  420. /**
  421. * 获取页面
  422. */
  423. private function _get_block_html($content, $module_type) {
  424. ob_start();
  425. Tpl::output('block_content', $content);
  426. Tpl::showpage('store_decoration_module.' . $module_type, 'null_layout');
  427. $temp = ob_get_contents();
  428. ob_end_clean();
  429. return $temp;
  430. }
  431. /**
  432. * 商品搜索
  433. */
  434. public function goods_searchOp() {
  435. $model_goods = Model('goods');
  436. $condition = array();
  437. $condition['store_id'] = $_SESSION['store_id'];
  438. $condition['goods_name'] = array('like', '%'.$_GET['keyword'].'%');
  439. $goods_list = $model_goods->getGoodsOnlineList($condition, '*', 10);
  440. Tpl::output('goods_list', $goods_list);
  441. Tpl::output('show_page', $model_goods->showpage());
  442. Tpl::showpage('store_decoration_module.goods', 'null_layout');
  443. }
  444. /**
  445. * 更新商品模块的商品价格
  446. */
  447. private function _update_module_goods_info($decoration_id, $store_id) {
  448. $model_store_decoration = Model('store_decoration');
  449. $condition = array();
  450. $condition['decoration_id'] = $decoration_id;
  451. $condition['block_module_type'] = 'goods';
  452. $condition['store_id'] = $store_id;
  453. $block_list_goods = $model_store_decoration->getStoreDecorationBlockList($condition);
  454. if(!empty($block_list_goods) && is_array($block_list_goods)) {
  455. foreach ($block_list_goods as $block) {
  456. $goods_array = unserialize($block['block_content']);
  457. foreach ($goods_array as $goods_key => $goods_value) {
  458. //商品信息
  459. $goods_info = Model('goods')->getGoodsOnlineInfoByID($goods_value['goods_id']);
  460. $new_goods_price = $goods_info['goods_price'];
  461. //抢购
  462. if (C('groupbuy_allow')) {
  463. $groupbuy_info = Model('groupbuy')->getGroupbuyInfoByGoodsCommonID($goods_info['goods_commonid']);
  464. if (!empty($groupbuy_info)) {
  465. $new_goods_price = $groupbuy_info['groupbuy_price'];
  466. }
  467. }
  468. //限时折扣
  469. if (C('promotion_allow') && empty($groupbuy_info)) {
  470. $xianshi_info = Model('p_xianshi_goods')->getXianshiGoodsInfoByGoodsID($goods_value['goods_id']);
  471. if (!empty($xianshi_info)) {
  472. $new_goods_price = $xianshi_info['xianshi_price'];
  473. }
  474. }
  475. $goods_array[$goods_key]['goods_price'] = $new_goods_price;
  476. }
  477. //更新块数据
  478. $update = array();
  479. $update['block_content'] = serialize($goods_array);
  480. $model_store_decoration->editStoreDecorationBlock($update, array('block_id' => $block['block_id']));
  481. }
  482. }
  483. }
  484. /**
  485. * 装修预览
  486. */
  487. public function decoration_previewOp() {
  488. $decoration_id = intval($_GET['decoration_id']);
  489. $model_store_decoration = Model('store_decoration');
  490. $decoration_info = $model_store_decoration->getStoreDecorationInfoDetail($decoration_id, $_SESSION['store_id']);
  491. if($decoration_info) {
  492. $this->_output_decoration_info($decoration_info);
  493. } else {
  494. showMessage(L('param_error'), '', 'error');
  495. }
  496. //店铺信息
  497. $model_store = Model('store');
  498. $store_info = $model_store->getStoreOnlineInfoByID($_SESSION['store_id']);
  499. Tpl::output('store_info', $store_info);
  500. Tpl::output('store_theme', 'default');
  501. Tpl::setLayout('store_layout');
  502. Tpl::showpage('store_decoration.preview');
  503. }
  504. /**
  505. * 装修静态文件生成
  506. */
  507. public function decoration_buildOp() {
  508. //静态文件路径
  509. $html_path = BASE_UPLOAD_PATH.DS.ATTACH_STORE.DS.'decoration'.DS.'html'.DS;
  510. if(!is_dir($html_path)){
  511. if (!@mkdir($html_path, 0755)){
  512. $data = array();
  513. $data['error'] = '页面生成失败';
  514. echo json_encode($data);die;
  515. }
  516. }
  517. $decoration_id = intval($_GET['decoration_id']);
  518. //更新商品数据
  519. $this->_update_module_goods_info($decoration_id, $_SESSION['store_id']);
  520. $model_store_decoration = Model('store_decoration');
  521. $decoration_info = $model_store_decoration->getStoreDecorationInfoDetail($decoration_id, $_SESSION['store_id']);
  522. if($decoration_info) {
  523. $this->_output_decoration_info($decoration_info);
  524. } else {
  525. showMessage(L('param_error'), '', 'error');
  526. }
  527. $file_name = md5($_SESSION['store_id']);
  528. ob_start();
  529. Tpl::showpage('store_decoration.preview', 'null_layout');
  530. $result = file_put_contents($html_path . $file_name . '.html', ob_get_clean());
  531. if($result) {
  532. $data['message'] = '页面生成成功';
  533. } else {
  534. $data['error'] = '页面生成失败';
  535. }
  536. echo json_encode($data);die;
  537. }
  538. /**
  539. * 用户中心右边,小导航
  540. *
  541. * @param string $menu_type 导航类型
  542. * @param string $menu_key 当前导航的menu_key
  543. * @return
  544. */
  545. private function profile_menu($menu_key='') {
  546. $menu_array = array(
  547. 1=>array('menu_key'=>'decoration_setting','menu_name'=>'店铺装修','menu_url'=>urlShop('store_decoration', 'decoration_setting')),
  548. 2=>array('menu_key'=>'decoration_album','menu_name'=>'装修图库','menu_url'=>urlShop('store_decoration', 'decoration_album')),
  549. );
  550. Tpl::output('member_menu',$menu_array);
  551. Tpl::output('menu_key',$menu_key);
  552. }
  553. }