You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

386 lines
16 KiB

3 years ago
<?php
namespace apps\article\controllers;
use apps\base\controllers\FrontendController;
class IndexController extends FrontendController
{
private $parameter = array();
/**
* 文章index
*/
public function actionIndex()
{
$article_nav = $this->db->query(
'select cat_id, cat_name from {pre}article_cat where cat_id <> 1 and parent_id = 0 order by sort_order,cat_id asc');
foreach ($article_nav as $key => $vo) {
$article_nav[$key]['url'] = build_uri('article_cat', array('acid' => $vo['cat_id']));
$article_nav[$key]['list'] = get_cat_articles($vo['cat_id'], 1, 10);
}
$this->assign('data', $article_nav);
if(I('keyword')){
$where = " AND title LIKE '%".I('keyword')."%'";
$article_index_new = $this->db->query(
'select article_id,cat_id,title,author,content,add_time,link from {pre}article where is_open = 1 '.$where.' order by add_time desc');
}else{
$cat_id = I('cat_id');
if($cat_id){
$article_index_new = $this->db->query(
'select article_id,cat_id,title,author,content,add_time,link from {pre}article where cat_id = '.$cat_id.' and is_open = 1 order by add_time desc');
}else{
$article_index_new = $this->db->query(
'select article_id,cat_id,title,author,content,add_time,link from {pre}article where is_open = 1 order by add_time desc');
}
}
$article_index_new=array_slice($article_index_new,0,10);
if(IS_AJAX){
foreach($article_index_new as $key => $val){
$article_index_new[$key]['add_time'] = local_date("Y-m-d H-i-s", $val['add_time']);
$article_index_new[$key]['url'] = U('article/index/detail',array('id'=>$val['article_id']));
preg_match_all("/<img.*>/isU",$val['content'],$match);
$match = $match[0];
foreach ($match as $k => $v){
$first_src = strpos($v,"src=\"");
$match[$k] = substr($v,($first_src +5));
$match[$k] = strchr($match[$k],"\"",true);
$match[$k] = substr($match[$k],1);
$match[$k] = strchr($match[$k],"/");
if(file_exists(ROOT_PATH.get_image_path($match[$k]))){
$arr = getimagesize(ROOT_PATH.get_image_path($match[$k]));
if($arr[0]<300 || $arr[1]<200){
unset($match[$k]);
}
}
}
if (empty($val['author']) || $val['author'] == '_SHOPHELP')
{
$article_index_new[$key]['author'] = $GLOBALS['_CFG']['shop_name'];
}
if(strpos(get_image_path($match[0]),'no_image')){
$article_index_new[$key]['first_img'] = '';
}else{
$article_index_new[$key]['first_img'] = get_image_path($match[0]);
}
$article_index_new[$key]['comment'] = $this->db->query(
'select content from {pre}comment where id_value = '.$val['article_id'].' and comment_type = 1 AND status = 1');
$article_index_new[$key]['comment_count'] = count($article_index_new[$key]['comment']);
$res = $this->db->query(
'SELECT likenum,click FROM {pre}article_extend WHERE article_id = '.$val['article_id'].' ');
if(!$res){
$data['article_id'] = $val['article_id'];
$this->model->table('article_extend')->data($data)->insert();
}
foreach($res as $ky=>$vv){
$vv['likenum']=$vv['likenum']?$vv['likenum']:0;
$vv['click']=$vv['click']?$vv['click']:0;
$article_index_new[$key]['like'] = $vv['likenum'];
$article_index_new[$key]['views'] = $vv['click'];
}
if($_COOKIE[$val['article_id'].'islike'] == '1'){
$article_index_new[$key]['islike'] = '1';
}else{
$article_index_new[$key]['islike'] = '0';
}
}
$show = count($article_index_new)>0 ? 1 : 0;
die(json_encode(array('article_index_new'=>$article_index_new,'show'=>$show)));
}
$this->assign('page_title', '文章频道');
// $this->assign('article_index_new', $article_index_new);
$this->display('article');
}
/**
* 点赞
*/
public function actionLike()
{
$article_id = I('article_id');
if(IS_AJAX){
if( $_COOKIE[$article_id.'islike'] == '1' ){
$sql = "UPDATE {pre}article_extend SET likenum=likenum-1 WHERE article_id ='$article_id'";
$this->db->query($sql);
$like_num = $this->db->getOne(
'SELECT likenum FROM {pre}article_extend WHERE article_id = '.$article_id.' ');
if(!$like_num){
$like_num = 0;
}
setcookie($article_id.'islike','0',gmtime()-86400);
echo json_encode(array('like_num' => $like_num,'is_like'=>0,'article_id'=>$article_id ));
}else{
$sql = "UPDATE {pre}article_extend SET likenum=likenum+1 WHERE article_id ='$article_id'";
$res = $this->db->query($sql);
if($res == true){
$like_num = $this->db->getOne(
'SELECT likenum FROM {pre}article_extend WHERE article_id = '.$article_id.' ');
}
setcookie($article_id.'islike','1',gmtime()+86400);
echo json_encode(array('like_num' => $like_num ,'is_like'=>1,'article_id'=>$article_id));
}
}
}
/**
* 文章详情
*/
public function actionDetail()
{
$article_id = $_REQUEST['id'];
if (isset($_REQUEST['cat_id']) && $_REQUEST['cat_id'] < 0) {
$article_id = $this->db->getOne("SELECT article_id FROM " . $this->ecs->table('article') . " WHERE cat_id = '" . intval($_REQUEST['cat_id']) . "' ");
}
/* 文章详情 */
$article = get_article_info($article_id);
if (empty($article)) {
ecs_header("Location: ./\n");
exit;
}
$res = $this->db->query(
'SELECT likenum,click FROM {pre}article_extend WHERE article_id = '.$article_id.' ');
if(!$res){
$data['article_id'] = $article_id;
$this->model->table('article_extend')->data($data)->insert();
$like_num = 0;
}else{
$like_num = $res[0]['likenum'];
}
if(empty($_COOKIE[$article_id.'isclick'])){
$sql = "UPDATE {pre}article_extend SET click=click+1 WHERE article_id ='$article_id'";
$this->db->query($sql);
}
setcookie($article_id.'isclick','1',gmtime()+86400);
$this->assign('like_num',$like_num);
$islike = $_COOKIE[$article_id.'islike']?$_COOKIE[$article_id.'islike']:'0';
$this->assign('islike',$islike);
if (!empty($article['link']) && $article['link'] != 'http://' && $article['link'] != 'https://') {
ecs_header("location:$article[link]\n");
exit;
}
$comment = $this->db->getAll("SELECT user_id,user_name,content,comment_id,add_time FROM " . $this->ecs->table('comment') . " WHERE id_value = '" .$article['article_id']. "'
and parent_id = 0 and comment_type = 1 AND status = 1 order by add_time desc");
foreach($comment as $ke => $val){
$parent_id = $comment[$ke]['comment_id'];
$comment[$ke]['second'] = $this->db->getAll("SELECT user_id,user_name,content,add_time FROM " . $this->ecs->table('comment') . " WHERE id_value = '" .$article['article_id']. "'
and parent_id =$parent_id and comment_type = 1 AND status = 1 order by add_time desc");
$comment[$ke]['user_picture'] = get_image_path($this->db->getOne("SELECT user_picture FROM " . $this->ecs->table('users') . " WHERE user_id = '" .$val['user_id']. "' "));
$comment[$ke]['count'] = count($comment[$ke]['second']);
$comment[$ke]['comment_time'] = mdate($val['add_time']);
}
$this->assign('commentfirst', $comment);
$this->assign('article_categories', article_categories_tree($article_id)); //文章分类树
$this->assign('best_goods', get_recommend_goods('best')); // 推荐商品
$this->assign('new_goods', get_recommend_goods('new')); // 最新商品
$this->assign('hot_goods', get_recommend_goods('hot')); // 热点文章
$this->assign('promotion_goods', get_promote_goods()); // 特价商品
$this->assign('related_goods', article_related_goods($_REQUEST['id'])); // 特价商品
$this->assign('id', $article_id);
$this->assign('username', $_SESSION['user_name']);
$this->assign('email', $_SESSION['email']);
$this->assign('type', '1');
$this->assign('promotion_info', get_promotion_info());
$this->assign('article', $article);
$this->assign('keywords', htmlspecialchars($article['keywords']));
$this->assign('description', htmlspecialchars($article['description']));
$catlist = array();
foreach (get_article_parent_cats($article['cat_id']) as $k => $v) {
$catlist[] = $v['cat_id'];
}
assign_template('a', $catlist);
$position = assign_ur_here($article['cat_id'], $article['title']);
$this->assign('page_title', $position['title']); // 页面标题
$this->assign('ur_here', $position['ur_here']); // 当前位置
$this->assign('comment_type', 1);
/* 相关商品 */
$sql = "SELECT a.goods_id, g.goods_name " .
"FROM " . $this->ecs->table('goods_article') . " AS a, " . $this->ecs->table('goods') . " AS g " .
"WHERE a.goods_id = g.goods_id " .
"AND a.article_id = '$_REQUEST[id]' ";
$acticle_goods = $this->db->getAll($sql);
if(!$acticle_goods){
$acticle_goods = get_recommend_goods('new');
$this->assign('acticle_goods', $acticle_goods[0]);
}else{
$this->assign('acticle_goods', $acticle_goods[0]);
}
assign_dynamic('article');
if ($article['cat_id'] > 2) {
$this->display('article_detail');
} else {
$this->display('special');
}
}
/**
* 提交评论
*/
public function actionCommnet(){
if(I('content')){
$user_id = $_SESSION['user_id'];
$user_name = $_SESSION['user_name'];
$user_ip = $_SERVER['REMOTE_ADDR'];
$parent_id = I('cid')?I('cid'):0;
if(!empty($user_id)){
$article_id = I('article_id');
if(IS_POST){
$data['content'] = I('content');
$data['user_id'] = $user_id;
$data['user_name'] = $user_name;
$data['id_value'] = $article_id;
$data['comment_type'] = '1';
$data['parent_id'] = $parent_id;
$data['status'] = '1';
$data['add_time'] = gmtime();
$data['ip_address'] = $user_ip;
if(!empty($data['content'])){
$res = $this->model->table('comment')->data($data)->insert();
if($res == true){
echo json_encode(U('article/index/Detail',array('id'=>$article_id)));
}
}
}
}else{
echo json_encode(U('user/index/login'));
}
}
}
/**
* 微信图文详情
*/
public function actionWechatNewsInfo() {
/* 文章详情 */
$news_id = intval(I('get.id'));
$data = $this->db->table('wechat_media')->field('title, content')->where(array('id'=>$news_id))->find();
$data['content'] = htmlspecialchars_decode($data['content']);
$this->assign('page_title', $data['title']);
$this->assign('article', $data);
$this->display('wechat_article');
}
/**
* 列表页面
*/
public function actionCategory()
{
/* 获得指定的分类ID */
if (!empty($_GET['id'])) {
$cat_id = intval($_GET['id']);
} elseif (!empty($_GET['category'])) {
$cat_id = intval($_GET['category']);
} else {
ecs_header("Location: ./\n");
exit;
}
$page = !empty($_REQUEST['page']) && intval($_REQUEST['page']) > 0 ? intval($_REQUEST['page']) : 1;
assign_template('a', array($cat_id));
$position = assign_ur_here($cat_id);
$condition['cat_id'] = $cat_id;
$cat_info = $this->db->table('article_cat')->where($condition)->find();
$this->assign('page_title', $cat_info['cat_name']); // 页面标题
$this->assign('ur_here', $position['ur_here']); // 当前位置
$this->assign('cat_info', $cat_info);
$this->assign('categories', get_categories_tree(0)); // 分类树
$this->assign('article_categories', article_categories_tree($cat_id)); //文章分类树
$this->assign('helps', get_shop_help()); // 网店帮助
$this->assign('top_goods', get_top10()); // 销售排行
$this->assign('best_goods', get_recommend_goods('best'));
$this->assign('new_goods', get_recommend_goods('new'));
$this->assign('hot_goods', get_recommend_goods('hot'));
$this->assign('promotion_goods', get_promote_goods());
$this->assign('promotion_info', get_promotion_info());
/* Meta */
$meta = $this->db->getRow("SELECT keywords, cat_desc FROM " . $this->ecs->table('article_cat') . " WHERE cat_id = '$cat_id'");
if ($meta === false || empty($meta)) {
/* 如果没有找到任何记录则返回首页 */
ecs_header("Location: ./\n");
exit;
}
$this->assign('keywords', htmlspecialchars($meta['keywords']));
$this->assign('description', htmlspecialchars($meta['cat_desc']));
//异步输出
if (IS_AJAX) {
/* 获得文章总数 */
$size = isset($_CFG['article_page_size']) && intval($_CFG['article_page_size']) > 0 ? intval($_CFG['article_page_size']) : 20;
$count = get_article_count($cat_id);
$pages = ($count > 0) ? ceil($count / $size) : 1;
if ($page > $pages) {
$page = $pages;
}
$pager['search']['id'] = $cat_id;
$keywords = '';
$goon_keywords = ''; //继续传递的搜索关键词
/* 获得文章列表 */
if (isset($_REQUEST['keywords'])) {
$keywords = addslashes(htmlspecialchars(urldecode(trim($_REQUEST['keywords']))));
$pager['search']['keywords'] = $keywords;
$search_url = substr(strrchr($_POST['cur_url'], '/'), 1);
$this->assign('search_value', stripslashes(stripslashes($keywords)));
$this->assign('search_url', $search_url);
$count = get_article_count($cat_id, $keywords);
$pages = ($count > 0) ? ceil($count / $size) : 1;
if ($page > $pages) {
$page = $pages;
}
$goon_keywords = urlencode($_REQUEST['keywords']);
}
$last = intval($_POST['last']);
$size = intval($_POST['amount']);
$page = $last <= 0 ? 1 : ($last + 1) / $size;
$artciles_list = get_cat_articles($cat_id, $page, $size, $keywords);
$this->response($artciles_list);
}
$this->assign('cat_id', $cat_id);
$this->display('category');
}
/**
* 处理参数便于搜索商品信息
*/
private function parameter()
{
$page_size = C('shop.article_number');
$this->parameter['size'] = $page_size > 0 ? $page_size : 10;
$this->parameter['page'] = I('page') ? I('page', 'intval') : 1;
$this->parameter['cat_id'] = I('id', 'intval');
$this->parameter['keywords'] = I('keywords');
}
}