螞蟻分類資訊系統仿織夢增加新聞文章tag標籤功能
阿新 • • 發佈:2021-03-20
螞蟻分類資訊系統仿織夢增加新聞文章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端文章詳情列出標籤
單個標籤所有文章列表
所有標籤列表