国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

ThinkPHP添加更新標簽的方法

2024-05-04 23:28:37
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了ThinkPHP添加更新標簽的方法,在前文所述刪除blog標簽的基礎上實現同步更新標簽,是ThinkPHP非常實用的技巧,需要的朋友可以參考下
 
 

本文實例講述了ThinkPHP添加更新標簽的方法。分享給大家供大家參考。具體分析如下:

我們知道,thinkphp的拓展案例blog,只告訴我們怎樣去添加標簽tag,卻沒有刪除和更新標簽的方法,我在前面的《徹底刪除thinkphp3.1案例blog標簽的方法》為拓展案例blog寫了一個刪除標簽的方法,接下來將寫一個標簽的更新方法.

一般情況下,我們寫博客后,很少去改動標簽了,但是如果我們改動標簽如,刪除,添加,減少標簽怎么辦呢?這無疑造成think_tag和think_tagged兩個表垃圾信息的積累,好了,言歸正轉.

在更新標簽時我們來了解兩個參數:

$oldtags:更新前,存在thinphp_tag表中標簽

$newstags:更新時,插入thinphp_tag之前,表單提交過來的標簽

更新文章時,標簽可能會有以下幾種變化:

1、$newstags與$oldtags部分相同-> 添加或減少或修改標簽,標簽的個數和名稱和原來部分相同。

2、$newstags與$oldtags完全相同->不修改標簽

3、$newstags與$oldtags完全不同 ->添加或減少標簽,并且標簽的個數和名稱和原來完全不同

對于2我們只要通過判斷比較過濾即可,對于1、3通過判斷比較后,再作刪除或添加處理:

刪除:要刪除的標簽名,在thinphp_tag已存在,當標簽的count=1時,就把它刪除掉,當count>1時,就減少1(count-1).

添加:要添加的標簽名稱,如果thinphp_tag表中已存在則count(count >1)在原來的基礎上+1即count+1,如果不存在(count =0),則添加新標簽,count+1.具體函數如下:

復制代碼代碼如下:
public function updateTag($vo,$module) {  
 $recordId= trim($vo['id']);  
  
if($vo['keywords']==''){//如果沒有標簽,則把原來的標簽刪除  
     $this->deltag($recordId);      
   }else{  
      $newtags = explode(' ', $vo['keywords']);//獲取更新的標簽并轉為數組(keywords是這里的標簽字段,在thinkphp的拓展案例blog為tags,注意)
  
   $condition['recordId'] = $recordId;//當有多個標簽時,將查詢多篇日記,而不是一篇  
  
 $tagged=M('Tagged');  
  
  $tag=M('Tag');           
  
  $taggedlist= $tagged->where($condition)->select();  
  
if($taggedlist !==false){  
  
foreach ($taggedlist as $key => $value) {  
  
  $tagId=trim($value['tagId']);  
  
  $tagvo=$tag->where('id='.$tagId)->find();  
  
  $oldtags[]=$tagvo['name'];//獲取原來的標簽  
  
  }     
  
   $result=count(array_diff(array_diff($newtags,$oldtags),array_diff($oldtags,$newtags)));      
  
   $result1=count(array_diff($newtags,$oldtags));//返回更新前后TAG的差值數  
  
  $result2=count(array_diff($oldtags,$newtags));//返回更新前后TAG的差值數 
  
  if(($result1 !== $result2) || ($result !==0)){//2與原來的完全相同->過濾掉             
  
   $array_intersect=array_intersect($oldtags,$newtags);//取得交值  
  
   $oldtags_diff=array_diff($oldtags,$array_intersect);//原來的標簽,被更新后已無用,需要刪除的  
  
    $newtags_diff=array_diff($newtags,$array_intersect);//修改的標簽,需要添加的  
  
//刪除或者count-1     
  
     if(count($oldtags_diff) !==0){   
  
     foreach ($oldtags_diff as $name) {  
  
     $tagvo=$tag->where("module='$module' and name='$name'")->find();  
  
     $count=intval($tagvo['count']);//獲取標簽的數量  
  
if($count==1){  
  
    $tag->where('id='.$tagvo['id'])->delete();  
  
    $tagged->where('tagId='.$tagvo['id'].' and recordId='.$recordId)->delete();  
  
 }elseif($count > 1){  
   $tag->where('id='.$tagvo['id'])->setDec('count',1);//標簽數量減1  
  
   $tagged->where('tagId='.$tagvo['id'].' and recordId='.$recordId)->delete();//刪除tagged中相關數據   
 } 
  } 
}  
//添加更新的標簽    
  
if(count($newtags_diff) !==0){  
  
   foreach ($newtags_diff as $v) {  
  
       $v = trim($v);           
  
       if (!emptyempty($v)) {  
  
        // 記錄已經存在的標簽  
  
     $map['module'] = $module;  
  
        $map['name'] = $v;  
  
        $tagg = $tag->where($map)->find();  
  
       if ($tagg) {//如果現在保存的標簽與之前相同的標簽累加  
  
       $tagId = $tagg['id'];  
  
          $tag->where('id=' . $tagg["id"])->setInc('count', 1);//count統計加1(這個函數有三個參數,默認加1)  
  
          } else {//如果是新添的標簽,標簽+1  
  
                   $t = array();  
  
                   $t["name"] = $v;  
  
                   $t["count"] = 1;  
  
                   $t["module"] = $module;  
  
                   $result = $tag->add($t);  
  
                   $tagId = $result;  
  
            }  
      }  
                 //記錄tag信息  
    $t = array();  
  
      $t["module"] = $module;  
  
      $t["recordId"] = $recordId;//保存news的ID  
  
      $t["tagTime"] = time();  
  
      $t["tagId"] = $tagId;//保存tag的ID  
  
      $tagged->add($t);  
  
     }  
  
    }   
     }  
     }  
     }  
}

使用方法:
復制代碼代碼如下:
public  function update() {  
$Blog=D('Blog');  
$vo=$Blog->create();  
$this->updateTag($vo,'Blog');//更新前調用  
if (false === $vo) {  
 $this->error($Blog->getError());  
     }  
   // 更新數據  
   $list = $Blog->save();  
   if (false !== $list) {  
     //print_r($list);  
       
     $this->success('編輯成功!');  
   } else {  
       //錯誤提示  
       $this->error('編輯失敗!');  
   }  
}

 

希望本文所述對大家基于ThinkPHP框架的PHP程序設計有所幫助。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 资中县| 珠海市| 怀安县| 营口市| 泗洪县| 菏泽市| 宝应县| 南雄市| 铅山县| 蒲江县| 达日县| 台北市| 视频| 阜城县| 卓资县| 安福县| 苏尼特右旗| 阳新县| 鹤庆县| 霞浦县| 玛沁县| 瑞安市| 永川市| 长海县| 浙江省| 左贡县| 张北县| 大石桥市| 景德镇市| 宁波市| 米脂县| 延安市| 周至县| 英德市| 醴陵市| 永泰县| 青神县| 广西| 安达市| 枣阳市| 邵阳县|