_filter($map); $model = D('News'); $count = $model->getListForCount($map); $per_page = C('ADMIN_PER_PAGE_NUM', null, false); if ($per_page === false) { $page = new \Gy_Library\GyPage($count); } else { $page = new \Gy_Library\GyPage($count, $per_page); } $get_data = I('get.'); $topic_id = $get_data['topic_id']; $order = 'sort asc,start_date desc,id desc'; if (!empty($get_data['click_time']) && $get_data['click_time'] === 'asc') { $order = 'click_time asc,sort asc,start_date desc'; } elseif (!empty($get_data['click_time']) && $get_data['click_time'] === 'desc') { $order = 'click_time desc,sort asc,start_date desc'; } $data_list = $model->getListForPage($map, $page->nowPage, $page->listRows, $order); //时间戳的转换 foreach ($data_list as &$value) { $value['title'] = cutLength($value['title'], 20); $value['author'] = cutLength($value['author'], 10); $value['in_date'] = date('Y-m-d', $value['in_date']); $value['start_date'] = date('Y-m-d', $value['start_date']); $value['cate_name'] = $model->extractNumberGetName($value['cate_id'], D('NewsCate')->where(['status' => DBCont::YES_BOOL_STATUS])->order('sort asc,id desc')->getField('id,name', true)); $value['keywords'] = cutLength($model->extractNumberGetNameForCondition($value['keywords_id'], 'Keywords', 'id', 'name'), 25); } // 使用Builder快速建立列表页面。 $builder = new ListBuilder(); if (!empty($topic_id)) { $builder->addTopButton('self', array('title' => '勾选提交', 'class' => 'btn btn-success ajax-post confirm', 'href' => U('chooseNews', ['topic_id' => $topic_id]))); if ($topic_id === 'month') { $builder->addTopButton('self', array('title' => '返回', 'class' => 'btn btn-info', 'href' => U('Month/index'))) ->setMetaTitle('请勾选月榜所需新闻')->setSearchUrl(U('', ['topic_id' => $topic_id])) ->setNIDByNode(MODULE_NAME, 'Month', 'index'); } elseif ($topic_id === 'season') { $builder->addTopButton('self', array('title' => '返回', 'class' => 'btn btn-info', 'href' => U('Season/index'))) ->setMetaTitle('请勾选季度榜所需新闻')->setSearchUrl(U('', ['topic_id' => $topic_id])) ->setNIDByNode(MODULE_NAME, 'Season', 'index'); } else { $builder->addTopButton('self', array('title' => '返回', 'class' => 'btn btn-info', 'href' => U('TopicFromNews/index', ['topic_id' => $topic_id]))) ->setMetaTitle('请勾选榜所需新闻')->setSearchUrl(U('', ['topic_id' => $topic_id])) ->setNIDByNode(MODULE_NAME, 'Topic', 'index'); } } else { $builder->addTopButton('addnew'); $builder->addTopButton('save', array('title' => '保存排序')) ->addTopButton('export', ['title' => '导出新闻列表', 'data-url' => U('export'), 'data-filename' => "新闻列表", 'data-streamrownum' => "500"]) ->addTopButton('forbid') ->addTopButton('resume') ->setExtraHtml($this->fetch('News/index_extra')) ->setNIDByNode(MODULE_NAME, CONTROLLER_NAME, 'index'); $builder = $builder->setMetaTitle('内容管理'); // 设置页面标题 } $builder ->addSearchItem('click_time', 'select', '点击量排序', array('asc' => '点击量正序', 'desc' => '点击量倒序')) ->addSearchItem('cate_id', 'select', '所属分类', D('NewsCate')->where(['status' => DBCont::YES_BOOL_STATUS])->getField('id,name', true)) ->addSearchItem('title', 'select_text', '单行输入', array('title' => '标题', 'author' => '作者', 'keyword' => '关键词')) ->addTableColumn('title', '标题') ->addTableColumn('cate_name', '所属分类') ->addTableColumn('keywords', '关键词') ->addTableColumn('author', '作者') // ->addTableColumn('start_date', '首发时间') ->addTableColumn('click_time', '点击量'); if (empty($topic_id)) { $builder->addTableColumn('sort', '排序', '', '', true); } $builder->addTableColumn('status', '状态', 'status', '', false); if (empty($topic_id)) { $builder->addTableColumn('right_button', '操作', 'btn'); } $builder ->setTableDataList($data_list) // 数据列表 ->setTableDataPage($page->show()) // 数据列表分页 ->addRightButton('edit', array('href' => U('edit', ['page' => I('get.page'), 'id' => '__data_id__']), 'data-id' => '__data_id__')) // 添加编辑按钮 ->addRightButton('delete') // 添加删除按钮 ->addRightButton('forbid') // 添加禁用按钮 ->display(); } public function add() { if (IS_POST) { parent::autoCheckToken(); $data = I('post.'); $data['in_date'] = !empty($data['in_date']) ? $data['in_date'] : date('Y-m-d', time()); $data['start_date'] = !empty($data['start_date']) ? $data['start_date'] : date('Y-m-d', time()); $data['content_res'] = strip_tags(htmlspecialchars_decode($data['content'])); $keyword_ids = D('Keywords')->checkKeywords($data['keywords_id'] ? $data['keywords_id'] : []); if ($keyword_ids === false) { $this->error(D('Keywords')->getError()); } $data['keywords_id'] = implode(',', $keyword_ids ? $keyword_ids : []); $data['cate_id'] = implode(',', $data['cate_id'] ? $data['cate_id'] : []); $model = D('News'); $r = $model->createAdd($data); if ($r === false) { $this->error($model->getError()); } else { // sysLogs('新增内容id:' . $r); $this->success(l('add') . l('success'), U(CONTROLLER_NAME . '/index')); } } else { // 使用FormBuilder快速建立表单页面。 $builder = new FormBuilder(); $data_list = array( "status" => 1, ); if ($data_list) { $builder->setFormData($data_list); } $subBuilder = new \Qscmf\Builder\SubTableBuilder(); $subBuilder = $subBuilder->addTableHeader('关键词', '30%', '输入关键词可以搜索添加现有关键词,输入@+关键词可以新增') ->addFormItem('keywords_id', 'select2', [ 'tags' => true, 'options' => D('Keywords')->order('id desc')->getField('id, name', true), ]); $builder->setMetaTitle('添加内容') //设置页面标题 ->setNIDByNode(MODULE_NAME, CONTROLLER_NAME, 'index') ->setPostUrl(U('add')) //设置表单提交地址 ->addFormItem('title', 'text', '*标题') ->addFormItem('cate_id', 'checkbox', '*选择文章分类', '', D('NewsCate')->getField('id,name', true)) ->addFormItem('cover_id', 'picture', '*封面图', '尺寸为240*135px,格式JPG、PNG、JPEG') ->addFormItem('author', 'text', '*作者') ->addFormItem('keywords_id', 'self', '关键词', '', $subBuilder->makeHtml()) ->addFormItem('sort', 'num', '排序') ->addFormItem('status', 'select', '状态', '', DBCont::getStatusList()) ->addFormItem('in_date', 'date', '入库时间') ->addFormItem('start_date', 'date', '首发时间') ->addFormItem('url', 'text', '原文链接') ->addFormItem('recommendation', 'textarea', '*入库推荐语') ->addFormItem('content', 'ueditor', '内容详情') ->display(); } } public function save() { if (IS_POST) { $data = I('post.'); foreach ($data['id'] as $k => $v) { $save_data['sort'] = $data['sort'][$k]; D('News')->where('id=' . $v)->save($save_data); } $this->success('保存成功', U('index')); } } public function export() { $this->_filter($map); $ids = I('get.ids'); if (!empty($ids)) { $map['id'] = ['in', $ids]; } $page = I('get.page'); $rownum = I('get.rownum'); $excel_list = D('News')->getExportList($map, $page, $rownum); $this->ajaxReturn($excel_list); } private function _filter(&$map) { $map = []; $get_data = I('get.'); if (isset($get_data['key']) && $get_data['word'] && $get_data['key'] !== 'keyword') { $map[$get_data['key']] = array('like', '%' . $get_data['word'] . '%'); } if (!empty($get_data['word']) && $get_data['key'] === 'cate_name') { $map1['name'] = array('like', '%' . $get_data['word'] . '%'); $map['cate_id'] = D('NewsCate')->where($map1)->getField('id'); } if (!empty($get_data['cate_id'])) { $map['_string'] = "FIND_IN_SET({$get_data['cate_id']},cate_id)"; } if (!empty($get_data['word']) && $get_data['key'] === 'keyword') { $map1['name'] = array('like', '%' . $get_data['word'] . '%'); $keywords_ids = D('Keywords')->where($map1)->getField('id', true); $r = ''; foreach ($keywords_ids as $k => $ent) { if (empty($k)) { $r = "(,{$ent},)"; } else { $r .= "|(,{$ent},)"; } } if ($keywords_ids) { $map['_string'] && $map['_string'] .= " AND keywords_id REGEXP '{$r}'"; !$map['_string'] && $map['_string'] = "keywords_id REGEXP '{$r}'"; } else { $map['_string'] = '1=0'; } } $topic_id = $get_data['topic_id']; if (!empty($topic_id) && $topic_id === 'month') { $news_id = D('Month')->where(['status' => DBCont::YES_BOOL_STATUS])->getField('news_id', true); } elseif (!empty($topic_id) && $topic_id === 'season') { $news_id = D('Season')->where(['status' => DBCont::YES_BOOL_STATUS])->getField('news_id', true); } elseif (!empty($topic_id)) { $news_id = D('TopicFromNews')->where(['topic_id' => $topic_id, 'status' => DBCont::YES_BOOL_STATUS])->getField('news_id', true); } if (!empty($news_id)) { $map['id'] = ['NOT IN', $news_id]; } } public function edit($id) { if (IS_POST) { parent::autoCheckToken(); $m_id = I('post.id'); $data = I('post.'); $keyword_ids = D('Keywords')->checkKeywords($data['keywords_id'] ? $data['keywords_id'] : []); if ($keyword_ids === false) { $this->error(D('Keywords')->getError()); } $data['keywords_id'] = implode(',', $keyword_ids ? $keyword_ids : []); $data['cate_id'] = implode(',', $data['cate_id'] ? $data['cate_id'] : []); $data['content_res'] = strip_tags(htmlspecialchars_decode($data['content'])); $model = D('News'); if (!$m_id) { E('缺少内容ID'); } $ent = $model->getOne($m_id); if (!$ent) { E('不存在内容'); } $ent['title'] = $data['title']; $ent['cate_id'] = $data['cate_id']; $ent['cover_id'] = $data['cover_id']; $ent['author'] = $data['author']; $ent['content'] = $data['content']; $ent['content_res'] = $data['content_res']; $ent['keywords_id'] = $data['keywords_id']; $ent['sort'] = $data['sort']; $ent['status'] = $data['status']; $ent['in_date'] = $data['in_date']; $ent['start_date'] = $data['start_date']; $ent['url'] = $data['url']; $ent['recommendation'] = $data['recommendation']; if ($model->createSave($ent) === false) { $this->error($model->getError()); } else { $this->success('修改成功', U('index', ['page' => $data['page']])); } } else { $info = D('News')->getOne($id); $builder = new FormBuilder(); $info['page'] = !empty(I('get.page')) ? I('get.page') : 1; $info['keywords_id'] = explode(',', $info['keywords_id']); $subBuilder = new \Qscmf\Builder\SubTableBuilder(); $subBuilder->setData(D('Keywords')->genKeywordId($info['keywords_id'])); $subBuilder->addTableHeader('关键词', '30%', '输入关键词可以搜索添加现有关键词,输入@+关键词可以新增'); $subBuilder->addFormItem('keywords_id', 'select2', [ 'tags' => true, 'options' => D('Keywords')->order('id desc')->getField('id, name', true) ]); $builder->setMetaTitle('编辑' . $info['title']) ->setPostUrl(U('edit')) // ->setExtraHtml($this->fetch('News/detail')) ->setNIDByNode(MODULE_NAME, CONTROLLER_NAME, 'index') ->addFormItem('id', 'hidden', 'ID') ->addFormItem('page', 'hidden', 'PAGE', '', $info['page']) ->addFormItem('title', 'text', '*标题') ->addFormItem('cate_id', 'checkbox', '*选择文章分类', '', D('NewsCate')->getField('id,name', true)) // ->addFormItem('cover_id', 'picture_intercept', '封面图','尺寸为750*450px,格式JPG、PNG、JPEG', ['width' => 750, 'height' => 450]) ->addFormItem('cover_id', 'picture', '*封面图', '尺寸为240*135px,格式JPG、PNG、JPEG') // ->addFormItem('content', 'ueditor', '内容详情','',$this->toolbars(), '', 'data-forcecatchremote="true"') ->addFormItem('author', 'text', '*作者') ->addFormItem('keywords_id', 'self', '关键词', '', $subBuilder->makeHtml()) // ->addFormItem('keywords_id', 'tags', '关键词','',$keyword_options) ->addFormItem('sort', 'num', '排序') ->addFormItem('status', 'select', '状态', '', DBCont::getStatusList()) ->addFormItem('in_date', 'date', '入库时间') ->addFormItem('start_date', 'date', '首发时间') ->addFormItem('url', 'text', '原文链接') ->addFormItem('recommendation', 'textarea', '*入库推荐语') ->addFormItem('content', 'ueditor', '内容详情') ->setFormData($info) ->display(); } } public function forbid() { $ids = I('ids'); if (!$ids) { $this->error('请选择要禁用的数据'); } $r = parent::_forbid($ids); if ($r !== false) { D('TopicFromNews')->where(['news_id' => ['in', $ids]])->setField('status', DBCont::NO_BOOL_STATUS); // sysLogs('新闻分类id: ' . $ids . ' 禁用'); $this->success('禁用成功', U(CONTROLLER_NAME . '/index')); } else { $this->error($this->_getError()); } } public function resume() { $ids = I('ids'); if (!$ids) { $this->error('请选择要启用的数据'); } $r = parent::_resume($ids); if ($r !== false) { D('TopicFromNews')->where(['news_id' => ['in', $ids]])->setField('status', DBCont::YES_BOOL_STATUS); $this->success('启用成功', U(CONTROLLER_NAME . '/index')); } else { $this->error($this->_getError()); } } public function delete() { $ids = I('ids'); if (!$ids) { $this->error('请选择要删除的数据'); } $r = parent::_del($ids); $tf_ids = D('TopicFromNews')->where(['news_id' => ['in', $ids]])->getField('id', true); D('TopicFromNews')->del($tf_ids); $m_ids = D('Month')->where(['news_id' => ['in', $ids]])->getField('id', true); D('Month')->del($m_ids); $s_ids = D('Season')->where(['news_id' => ['in', $ids]])->getField('id', true); D('Season')->del($s_ids); if ($r === false) { $this->error($this->_getError()); } else { $this->success('删除成功', U(MODULE_NAME . '/' . CONTROLLER_NAME . '/index')); } } public function toolbars() { return [ 'toolbars' => [ [ 'undo', 'redo', 'bold', 'italic', 'underline', 'fontborder', 'strikethrough', 'superscript', 'subscript', 'removeformat', 'formatmatch', 'autotypeset', 'blockquote', 'pasteplain', '|', 'forecolor', 'backcolor', 'insertorderedlist', 'insertunorderedlist', 'selectall', 'cleardoc', '|', 'rowspacingtop', 'rowspacingbottom', 'lineheight', '|', 'customstyle', 'paragraph', 'fontfamily', 'fontsize', '|', 'indent', '|', 'justifyleft', 'justifycenter', 'justifyright', 'justifyjustify', '|', 'link', 'unlink', 'anchor', '|', 'imagenone', 'imageleft', 'imageright', 'imagecenter', '|', 'simpleupload', 'insertimage', '|', 'horizontal', 'spechars', 'wordimage', '|', 'inserttable', 'deletetable', 'insertparagraphbeforetable', 'insertrow', 'deleterow', 'insertcol', 'deletecol', 'mergecells', 'mergeright', 'mergedown', 'splittocells', 'splittorows', 'splittocols', 'charts', '|', 'fullscreen', 'source', '|', 'attachment' ] ] ]; } public function chooseNews($topic_id) { $ids = I('ids'); if (!$ids) { $this->error('请选择要勾选的新闻'); } if ($topic_id === 'month') { $r = D('Month')->addNews($ids); if ($r === false) { $this->error(D('Month')->getError()); } else { $this->success('添加月榜成功', U('Month/index')); } } elseif ($topic_id === 'season') { $r = D('Season')->addNews($ids); if ($r === false) { $this->error(D('Season')->getError()); } else { $this->success('添加季度榜成功', U('Season/index')); } } else { $r = D('TopicFromNews')->addNews($topic_id, $ids); if ($r === false) { $this->error(D('TopicFromNews')->getError()); } else { $this->success('添加成功', U('TopicFromNews/index', ['topic_id' => $topic_id])); } } } }