spec.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356
  1. <?php
  2. /**
  3. * 规格栏目管理
  4. *
  5. *
  6. *
  7. ***/
  8. defined('InShopNC') or exit('Access Invalid!');
  9. class specControl extends SystemControl {
  10. const EXPORT_SIZE = 5000;
  11. public function __construct(){
  12. parent::__construct();
  13. Language::read('spec');
  14. }
  15. /**
  16. * 规格管理
  17. */
  18. public function specOp(){
  19. $lang = Language::getLangContent();
  20. $model_spec = Model('spec');
  21. $page = new Page();
  22. $page->setEachNum(10);
  23. $page->setStyle('admin');
  24. $spec_list = $model_spec->specList(array('order'=>'sp_sort asc'), $page);
  25. Tpl::output('spec_list',$spec_list);
  26. Tpl::output('page',$page->show());
  27. Tpl::showpage('spec.index');
  28. }
  29. /**
  30. * 添加规格
  31. */
  32. public function spec_addOp(){
  33. $lang = Language::getLangContent();
  34. $model_spec = Model('spec');
  35. if (chksubmit()){
  36. $obj_validate = new Validator();
  37. $obj_validate->validateparam = array(
  38. array("input"=>$_POST["s_name"], "require"=>"true", "message"=>$lang['spec_add_name_no_null'])
  39. );
  40. $error = $obj_validate->validate();
  41. if ($error != ''){
  42. showMessage($error);
  43. }else {
  44. $spec = array();
  45. $spec['sp_name'] = $_POST['s_name'];
  46. $spec['sp_type'] = intval($_POST['sp_type']);
  47. $spec['sp_sort'] = intval($_POST['s_sort']);
  48. $spec['class_id'] = $_POST['class_id'];
  49. $spec['class_name'] = $_POST['class_name'];
  50. $return = $model_spec->addSpec($spec);
  51. if($return) {
  52. $url = array(
  53. array(
  54. 'url'=>'index.php?act=spec&op=spec_add',
  55. 'msg'=>$lang['spec_index_continue_to_dd']
  56. ),
  57. array(
  58. 'url'=>'index.php?act=spec&op=spec',
  59. 'msg'=>$lang['spec_index_return_type_list']
  60. )
  61. );
  62. $this->log(L('nc_add,spec_index_spec_name').'['.$_POST['s_name'].']',1);
  63. showMessage($lang['nc_common_save_succ'], $url);
  64. }else {
  65. $this->log(L('nc_add,spec_index_spec_name').'['.$_POST['s_name'].']',0);
  66. showMessage($lang['nc_common_save_fail']);
  67. }
  68. }
  69. }
  70. // 一级商品分类
  71. $gc_list = Model('goods_class')->getGoodsClassListByParentId(0);
  72. Tpl::output('gc_list', $gc_list);
  73. Tpl::showpage('spec.add');
  74. }
  75. public function spec_value_addOp()
  76. {
  77. $lang = Language::getLangContent();
  78. $model_spec = Model('spec');
  79. if(chksubmit()) {
  80. $obj_validate = new Validator();
  81. $obj_validate->validateparam = array(
  82. array("input"=>$_POST["sp_value"], "require"=>"true", "message"=>$lang['spec_add_name_no_null'])
  83. );
  84. $error = $obj_validate->validate();
  85. if ($error != ''){
  86. showMessage($error);
  87. }else {
  88. $sp_value = [];
  89. $sp_value['sp_value_name'] = $_POST["sp_value"];
  90. $sp_value['sp_value_sort'] = intval($_POST['s_sort']);
  91. $sp_value['sp_id'] = intval($_POST['sp_id']);
  92. $sp_value['gc_id'] = $model_spec->spec_gc_id($sp_value['sp_id']);
  93. $add_new = $model_spec->addSpecValue($sp_value);
  94. if($add_new) {
  95. $url = array(
  96. array(
  97. 'url'=>'index.php?act=spec&op=spec_value_add',
  98. 'msg'=>"继续添加规格值"
  99. ),
  100. array(
  101. 'url'=>'index.php?act=spec&op=spec',
  102. 'msg'=>$lang['spec_index_return_type_list']
  103. )
  104. );
  105. $this->log(L('nc_add,spec_index_spec_name').'['.$_POST['s_name'].']',1);
  106. showMessage($lang['nc_common_save_succ'], $url);
  107. } else {
  108. $this->log(L('nc_add,spec_index_spec_name').'['.$_POST['s_name'].']',0);
  109. showMessage($lang['nc_common_save_fail']);
  110. }
  111. }
  112. }
  113. // 获取平台通用规格
  114. $sp_list = $model_spec->specPlatformList();
  115. Tpl::output('sp_list', $sp_list);
  116. Tpl::showpage('sp_value.add');
  117. }
  118. /**
  119. * 编辑规格
  120. */
  121. public function spec_editOp() {
  122. $lang = Language::getLangContent();
  123. if(empty($_GET['sp_id'])) {
  124. showMessage($lang['param_error']);
  125. }
  126. /**
  127. * 规格模型
  128. */
  129. $model_spec = Model('spec');
  130. /**
  131. * 编辑保存
  132. */
  133. if (chksubmit()) {
  134. $obj_validate = new Validator();
  135. $obj_validate->validateparam = array(
  136. array("input"=>$_POST["s_name"], "require"=>"true", "message"=>$lang['spec_add_name_no_null'])
  137. );
  138. $error = $obj_validate->validate();
  139. if ($error != '') {
  140. showMessage($error);
  141. } else {
  142. //更新规格表
  143. $param = array();
  144. $param['sp_name'] = trim($_POST['s_name']);
  145. $param['sp_sort'] = intval($_POST['s_sort']);
  146. $param['class_id'] = $_POST['class_id'];
  147. $param['class_name'] = $_POST['class_name'];
  148. $return = $model_spec->specUpdate($param, array('sp_id'=>intval($_POST['s_id'])), 'spec');
  149. if ($return) {
  150. $url = array(
  151. array(
  152. 'url'=>'index.php?act=spec&op=spec',
  153. 'msg'=>$lang['spec_index_return_type_list']
  154. )
  155. );
  156. $this->log(L('nc_edit,spec_index_spec_name').'['.$_POST['s_name'].']',1);
  157. showMessage($lang['nc_common_save_succ'], $url);
  158. } else {
  159. $this->log(L('nc_edit,spec_index_spec_name').'['.$_POST['s_name'].']',0);
  160. showMessage($lang['nc_common_save_fail']);
  161. }
  162. }
  163. }
  164. //规格列表
  165. $spec_list = $model_spec->getSpecInfo(intval($_GET['sp_id']));
  166. if(!$spec_list){
  167. showMessage($lang['param_error']);
  168. }
  169. // 一级商品分类
  170. $gc_list = Model('goods_class')->getGoodsClassListByParentId(0);
  171. Tpl::output('gc_list', $gc_list);
  172. Tpl::output('sp_list',$spec_list);
  173. Tpl::showpage('spec.edit');
  174. }
  175. /**
  176. * 删除规格
  177. */
  178. public function spec_delOp(){
  179. $lang = Language::getLangContent();
  180. if(empty($_GET['del_id'])) {
  181. showMessage($lang['param_error']);
  182. }
  183. //规格模型
  184. $model_spec = Model('spec');
  185. if(is_array($_GET['del_id'])){
  186. $id = "'".implode("','", $_GET['del_id'])."'";
  187. }else{
  188. $id = intval($_GET['del_id']);
  189. }
  190. //规格列表
  191. $spec_list = $model_spec->specList(array('in_sp_id'=>$id));
  192. if(is_array($spec_list) && !empty($spec_list)){
  193. // 删除类型与规格关联表
  194. $return = $model_spec->delSpec('type_spec', array('in_sp_id'=>$id));
  195. if(!$return){
  196. showMessage($lang['nc_common_save_fail']);
  197. }
  198. //删除规格值表
  199. $return = $model_spec->delSpec('spec_value',array('in_sp_id'=>$id));
  200. if(!$return){
  201. showMessage($lang['nc_common_save_fail']);
  202. }
  203. //删除规格表
  204. $return = $model_spec->delSpec('spec',array('in_sp_id'=>$id));
  205. if(!$return){
  206. showMessage($lang['nc_common_save_fail']);
  207. }
  208. $this->log(L('nc_delete,spec_index_spec_name').'[ID:'.$id.']',1);
  209. showMessage($lang['nc_common_del_succ']);
  210. }else{
  211. $this->log(L('nc_delete,spec_index_spec_name').'[ID:'.$id.']',0);
  212. showMessage($lang['param_error']);
  213. }
  214. }
  215. /**
  216. * ajax操作
  217. */
  218. public function ajaxOp(){
  219. //规格模型
  220. $model_spec = Model('spec');
  221. switch ($_GET['branch']){
  222. case 'sort':
  223. // case 'name':
  224. $return = $model_spec->specUpdate(
  225. array($_GET['column']=>trim($_GET['value'])),
  226. array('sp_id'=>intval($_GET['id'])),
  227. 'spec'
  228. );
  229. if($return){
  230. $this->log(L('spec_index_spec_name,nc_sort').'[ID:'.intval($_GET['id']).']',1);
  231. echo 'true';exit;
  232. }else{
  233. echo 'false';exit;
  234. }
  235. break;
  236. }
  237. }
  238. public function ajax_spec_valuesOp()
  239. {
  240. $sp_id = intval($_GET['sp_id']);
  241. $mod_spec = Model('spec');
  242. $spec_values = $mod_spec->getSpecValueList(['sp_id'=>$sp_id]);
  243. if(!empty($spec_values)) {
  244. echo json_encode($spec_values);exit;
  245. } else {
  246. echo '';exit;
  247. }
  248. }
  249. public function ajax_edit_spec_valueOp()
  250. {
  251. $sp_value_id = intval($_GET['sp_value_id']);
  252. $mod_spec = Model('spec');
  253. $sp_id = $mod_spec->spec_value_belong_to($sp_value_id);
  254. $where = ['sp_value_id'=>$sp_value_id];
  255. $update = [
  256. 'sp_id' => $sp_id,
  257. 'sp_value_name' => $_GET['sp_value_name'],
  258. 'sp_value_sort' => intval($_GET['sp_value_sort']),
  259. ];
  260. $update = $mod_spec->editSpecValue($update, $where);
  261. echo json_encode($update);exit;
  262. }
  263. public function ajax_del_spec_valueOp()
  264. {
  265. $sp_value_id = intval($_GET['sp_value_id']);
  266. $del = Model('spec')->delSpecValue(['sp_value_id'=>$sp_value_id]);
  267. echo json_encode($del);exit;
  268. }
  269. /**
  270. * 规格导出
  271. */
  272. public function export_step1Op(){
  273. $model_spec = Model('spec');
  274. $page = new Page();
  275. $page->setEachNum(self::EXPORT_SIZE);
  276. $spec_list = $model_spec->specList(array('order'=>'sp_sort asc'), $page);
  277. if (!is_numeric($_GET['curpage'])){
  278. $count = $page->getTotalNum();
  279. $array = array();
  280. if ($count > self::EXPORT_SIZE ){ //显示下载链接
  281. $page = ceil($count/self::EXPORT_SIZE);
  282. for ($i=1;$i<=$page;$i++){
  283. $limit1 = ($i-1)*self::EXPORT_SIZE + 1;
  284. $limit2 = $i*self::EXPORT_SIZE > $count ? $count : $i*self::EXPORT_SIZE;
  285. $array[$i] = $limit1.' ~ '.$limit2 ;
  286. }
  287. Tpl::output('list',$array);
  288. Tpl::output('murl','index.php?act=spec&op=spec');
  289. Tpl::showpage('export.excel');
  290. }else{ //如果数量小,直接下载
  291. $this->createExcel($spec_list);
  292. }
  293. }else{ //下载
  294. $this->createExcel($spec_list);
  295. }
  296. }
  297. /**
  298. * 生成excel
  299. *
  300. * @param array $data
  301. */
  302. private function createExcel($data = array()){
  303. Language::read('export');
  304. import('libraries.excel');
  305. $excel_obj = new Excel();
  306. $excel_data = array();
  307. //设置样式
  308. $excel_obj->setStyle(array('id'=>'s_title','Font'=>array('FontName'=>'宋体','Size'=>'12','Bold'=>'1')));
  309. //header
  310. $excel_data[0][] = array('styleid'=>'s_title','data'=>L('exp_spec'));
  311. $excel_data[0][] = array('styleid'=>'s_title','data'=>L('exp_sp_content'));
  312. foreach ((array)$data as $k=>$v){
  313. $tmp = array();
  314. $tmp[] = array('data'=>$v['sp_name']);
  315. $tmp[] = array('data'=>$v['sp_value']);
  316. $excel_data[] = $tmp;
  317. }
  318. $excel_data = $excel_obj->charset($excel_data,CHARSET);
  319. $excel_obj->addArray($excel_data);
  320. $excel_obj->addWorksheet($excel_obj->charset(L('exp_spec'),CHARSET));
  321. $excel_obj->generateXML($excel_obj->charset(L('exp_spec'),CHARSET).$_GET['curpage'].'-'.date('Y-m-d-H',time()));
  322. }
  323. }