1. 程式人生 > 其它 >螞蟻分類資訊系統仿織夢增加新聞文章tag標籤功能

螞蟻分類資訊系統仿織夢增加新聞文章tag標籤功能

螞蟻分類資訊系統仿織夢增加新聞文章tag標籤功能

TAG標籤是一種由您自己定義的,比分類更準確、更具體,可以概括文章主要內容的關鍵詞。熟練的運用可以使你發表的文章更容易被搜尋到,更有利於SEO優化。

基於上述的優點,為螞蟻分類資訊系統增加新聞文章的TAG標籤功能,基本功能和織夢類似,包括
1.釋出新聞文章時可以自定義新增標籤,
2.修改新聞文章時可以自定義修改標籤
3.PC端新聞詳情頁列出標籤列表
4.PC端單個標籤列出所有新聞文章
5.PC端所有標籤列表
6.後臺新增新聞文章標籤管理模組
7.新聞文章標籤列表 顯示標籤名稱 文章數量 點選數量 新增時間
8.後臺標籤管理可以單獨修改一個標籤
9.後臺支援批量修改標籤包括 批量新增 批量刪除 刪除所有新聞文章標籤
10.支援按新聞文章分類 文章ID範圍 批量操作新聞標籤

實現過程,列出關鍵功能程式碼,供參考
1 新聞news表增加tags欄位,儲存標籤

2 新增tags表

3 tags表索引

4 後臺news.php 增加新增 編輯 新聞操作標籤的功能

<?php
/**  新增2個函式  **/
function myTrim($str)
{
    $search = array(" "," ","\n","\r","\t"
,","); $replace = array("","","","","",","); return str_replace($search, $replace, $str); } function str_replace_multiple_consecutive($search, $replace, $subject) { return (string)preg_replace("/[" . $search .
"]+/i", $replace, $subject); } /** 驗證引數 **/ if(!empty($tags)){ $tags = trim(myTrim($tags),','); $tags = str_replace_multiple_consecutive(',',',',$tags); $tagsArr = explode(',', $tags); $tagsArr = array_unique($tagsArr); $tags = implode(',',$tagsArr); $tags_store = ','.$tags.','; }else{ $tags_store = $tags = ''; } if($isjump == 1){ $do_mymps = $db->query("INSERT INTO `{$db_mymps}news` (title,cityid,catid,redirect_url,isjump,isbold,iscommend,begintime,introduction,author,source,keywords,tags) VALUES ('$title','$cityid','$catid','$redirect_url','1','$isbold','$iscommend','$timestamp','$introduction','$author','$from','$keywords','$tags_store')"); }else{ $redirect_url = ''; if($ifout == 'bodyimg'){ $imgpath = bodyimg(mystripslashes($content)); } $do_mymps = $db->query("INSERT INTO `{$db_mymps}news` (title,cityid,keywords,tags,catid,isbold,iscommend,content,hit,perhit,begintime,introduction,author,source,imgpath) VALUES ('$title','$cityid','$keywords','$tags_store','$catid','$isbold','$iscommend','$content','$hit','$perhit','$timestamp','$introduction','$author','$from','$imgpath')"); } //處理標籤 if(!empty($tags)) { $tagsArr = explode(',', $tags); $tagsNum = count($tagsArr); if($tagsNum>0){ foreach($tagsArr as $k=>$v) { $v = trim($v); if(!empty($v)){ $sql = "INSERT INTO `{$db_mymps}tags`(tag,num,addtime,hit)VALUES('".$v."',1,'".time()."',0) ON DUPLICATE KEY UPDATE num=num+1"; $db->query($sql); } } } } /** 編輯新聞 **/ $tags_ori = $db->getOne("SELECT `tags` FROM `{$db_mymps}news` WHERE id = '$id'"); if(!empty($tags)){ $tags = trim(myTrim($tags),','); $tags = str_replace_multiple_consecutive(',',',',$tags); $tagsArr = explode(',', $tags); $tagsArr = array_unique($tagsArr); $tags = implode(',',$tagsArr); $tags_store = ','.$tags.','; }else{ $tags_store = $tags = ''; } if(!$tags_ori){ if(!empty($tags)) { $tagsArr = explode(',', $tags); $tagsNum = count($tagsArr); if($tagsNum>0){ foreach($tagsArr as $k=>$v) { $v = trim($v); if(!empty($v)) { $sql = "INSERT INTO `{$db_mymps}tags`(tag,num,addtime,hit)VALUES('" . $v . "',1,'".time()."',0) ON DUPLICATE KEY UPDATE num=num+1"; $db->query($sql); } } } } }else{ $tags_ori = trim($tags_ori,','); if($tags_ori != $tags){ $tags_ori_arr = explode(',', $tags_ori); $tags_ori_num = count($tags_ori_arr); if(empty($tags)){ if($tags_ori_num>0){ foreach($tags_ori_arr as $k=>$v) { $v = trim($v); if(!empty($v)) { $tag_num = $db->getOne("SELECT `num` FROM `{$db_mymps}tags` WHERE `tag` = '$v'"); if (intval($tag_num) == 1) { $sql = "DELETE FROM `{$db_mymps}tags` WHERE `tag` = '" . $v . "'"; } else { $sql = "UPDATE `{$db_mymps}tags` SET `num` = `num`-1 WHERE `tag` = '$v' "; } $db->query($sql); } } } }else{ $tagsArr = explode(',', $tags); $tags_del = array_diff($tags_ori_arr,$tagsArr); if(count($tags_del)>0){ foreach($tags_del as $k=>$v) { $v = trim($v); if(!empty($v)) { $tag_num = $db->getOne("SELECT `num` FROM `{$db_mymps}tags` WHERE `tag` = '$v'"); if (intval($tag_num) == 1) { $sql = "DELETE FROM `{$db_mymps}tags` WHERE `tag` = '" . $v . "'"; } else { $sql = "UPDATE `{$db_mymps}tags` SET `num` = `num`-1 WHERE `tag` = '$v' "; } $db->query($sql); } } } $tags_add = array_diff($tagsArr,$tags_ori_arr); if(count($tags_add)>0){ foreach($tags_add as $k=>$v) { $v = trim($v); if(!empty($v)) { $sql = "INSERT INTO `{$db_mymps}tags`(tag,num,addtime,hit)VALUES('" . $v . "',1,'".time()."',0) ON DUPLICATE KEY UPDATE num=num+1"; $db->query($sql); } } } } }else{ } } ?>

5後臺編輯標籤

<?php
	$tag_ori = $db->getOne("SELECT `tag` FROM `{$db_mymps}tags` WHERE id = '$id'");

        $tag = trim($tag);
        if(!empty($tag)){
            $tag = str_replace_multiple_consecutive(',','',$tag);
            $tag = str_replace_multiple_consecutive(',','',$tag);
            $tag = trim($tag);
        }

        if($tag_ori != $tag){
            if(empty($tag)){
                $sql = "UPDATE `{$db_mymps}news` SET `tags` = REPLACE(`tags`, ',".$tag_ori.",', ',') WHERE LOCATE(',".$tag_ori.",', `tags`)>0";
                $db->query($sql);
                $sql = "UPDATE `{$db_mymps}news` SET `tags` = '' WHERE `tags` = ','";
                $db->query($sql);
                $message = "刪除標籤".$tag_ori."成功";
            }else{
                $sql = "SELECT COUNT(*) FROM `{$db_mymps}news` WHERE LOCATE(',".$tag_ori.",', `tags`)>0";
                $art_num = $db->getOne($sql);
                if($art_num>0){
                    $sql = "UPDATE `{$db_mymps}news` SET `tags` = REPLACE(`tags`, ',".$tag_ori.",', ',".$tag.",')
                    WHERE LOCATE(',".$tag_ori.",', `tags`)>0";
                    if($db->query($sql)){
                        $sql = "INSERT INTO `{$db_mymps}tags`(tag,num,addtime,hit)VALUES('" . $tag . "',$art_num,'".time()."',0) ON DUPLICATE KEY UPDATE num=num+".$art_num;
                        $db->query($sql);
                    }
                    $message = "標籤【".$tag_ori."】替換成【".$tag."】,共".$art_num."篇文章";
                }else{
                    $message = "沒有查到標籤【".$tag_ori."】相關文章";
                }

            }
            $sql = "DELETE FROM `{$db_mymps}tags` WHERE `tag` = '".$tag_ori."'";
            $db->query($sql);
        }else{
            $message = "您沒有修改標籤";
        }


?>

6後臺批量操作標籤

<?php

switch ($opt_type){
            case 'add':
                foreach ($tagsArr as $value){
                    $sql = "SELECT COUNT(*) FROM `{$db_mymps}news`
                            WHERE LOCATE(',".$value.",', `tags`)<=0
                            ".$where;
                    $art_num = $db->getOne($sql);
                    if($art_num>0){
                        $sql = "UPDATE `".$db_mymps."news` SET `tags` = 
                            CASE WHEN CHAR_LENGTH(`tags`)>0 THEN CONCAT(`tags`,'".$value.",') ELSE CONCAT(`tags`,',".$value.",') END
                            WHERE LOCATE(',".$value.",', `tags`)<=0
                            ".$where;
                        $db->query($sql);
                        $sql = "INSERT INTO `{$db_mymps}tags`(tag,num,addtime,hit)VALUES('" . $value . "',$art_num,'".time()."',0) ON DUPLICATE KEY UPDATE `num`=`num` + ".$art_num;
                        $db->query($sql);
                        $message .= "標籤【".$value."】新新增".$art_num."篇文章<br/>";
                    }else{
                        $message .= "標籤【".$value."】沒有文章新增<br/>";
                    }
                }
                break;
            case 'del':
                foreach ($tagsArr as $value){
                    $sql = "SELECT COUNT(*) FROM `{$db_mymps}news`
                            WHERE LOCATE(',".$value.",', `tags`)>0
                            ".$where;
                    $art_num = $db->getOne($sql);
                    if($art_num>0){
                        $sql = "UPDATE `".$db_mymps."news` SET `tags` = REPLACE(`tags`, ',".$value.",', ',')
                            WHERE LOCATE(',".$value.",', `tags`)>0
                            ".$where;
                        $db->query($sql);
                        $sql = "UPDATE `{$db_mymps}tags` SET `num` = `num`-$art_num WHERE `tag` = '$value' ";
                        $db->query($sql);
                        $message .= "標籤【".$value."】刪除".$art_num."篇文章<br/>";
                    }else{
                        $message .= "標籤【".$value."】沒有相關文章<br/>";
                    }
                }
                $sql = "UPDATE `{$db_mymps}news` SET `tags` = '' WHERE `tags` = ','";
                $db->query($sql);
                $sql = "DELETE FROM `{$db_mymps}tags` WHERE `num`<=0";
                $db->query($sql);
                break;
            case 'del_all':
                $sql = "SELECT COUNT(*) FROM `{$db_mymps}news` WHERE `tags`!='' ".$where;
                $art_num = $db->getOne($sql);
                if($art_num>0){
                    $sql = "SELECT `tags` FROM `{$db_mymps}news` WHERE `tags`!='' ".$where;
                    $tags_info = $db->getAll($sql);
                    if($tags_info){
                        $tagsArr = [];
                        foreach ($tags_info as $kk=>$vv){
                            $vv['tags'] = trim($vv['tags'],',');
                            $tagsArr = array_merge($tagsArr,explode(',',$vv['tags']));
                        }
                        $tagsArr = array_unique($tagsArr);
                        foreach ($tagsArr as $value){
                            $sql = "SELECT COUNT(*) FROM `{$db_mymps}news`
                            WHERE LOCATE(',".$value.",', `tags`)>0
                            ".$where;
                            $art_num = $db->getOne($sql);
                            if($art_num>0){
                                $sql = "UPDATE `".$db_mymps."news` SET `tags` = REPLACE(`tags`, ',".$value.",', ',')
                            WHERE LOCATE(',".$value.",', `tags`)>0
                            ".$where;
                                $db->query($sql);
                                $sql = "UPDATE `{$db_mymps}tags` SET `num` = `num`-$art_num WHERE `tag` = '$value' ";
                                $db->query($sql);
                                $message .= "標籤【".$value."】刪除".$art_num."篇文章<br/>";
                            }else{
                                $message .= "標籤【".$value."】沒有相關文章<br/>";
                            }
                        }
                        $sql = "UPDATE `{$db_mymps}news` SET `tags` = '' WHERE `tags` = ','";
                        $db->query($sql);
                        $sql = "DELETE FROM `{$db_mymps}tags` WHERE `num`<=0";
                        $db->query($sql);

                    }
                }else{
                    $message .= "沒有標籤需要操作<br/>";
                }
                break;
        }


?>

效果如下
文章新增、編輯標籤

新聞標籤列表

編輯單個標籤

批量操作標籤

PC端文章詳情列出標籤

單個標籤所有文章列表

所有標籤列表