414 lines
19 KiB
PHP
Executable File
414 lines
19 KiB
PHP
Executable File
<?php
|
|
|
|
namespace Admin\Controller;
|
|
|
|
use Common\Model\MenuModel;
|
|
use Gy_Library\DBCont;
|
|
use Gy_Library\GyListController;
|
|
use ExportExcelByXlsx;
|
|
|
|
use Qscmf\Builder\FormBuilder;
|
|
use Qscmf\Builder\ListBuilder;
|
|
|
|
use Qscmf\Builder\TSubBuilder;
|
|
|
|
|
|
//新闻
|
|
class NewsController extends GyListController
|
|
{
|
|
use TSubBuilder;
|
|
|
|
public function index()
|
|
{
|
|
$this->_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]));
|
|
}
|
|
}
|
|
}
|
|
}
|