《PHP編程:ThinkPHP添加更新標簽的方法》要點:
本文介紹了PHP編程:ThinkPHP添加更新標簽的方法,希望對您有用。如果有疑問,可以聯系我們。
PHP學習本文實例講述了ThinkPHP添加更新標簽的辦法.分享給大家供大家參考.具體分析如下:
PHP學習我們知道,thinkphp的拓展案例blog,只告訴我們怎樣去添加標簽tag,卻沒有刪除和更新標簽的辦法,我在前面的《徹底刪除thinkphp3.1案例blog標簽的辦法》為拓展案例blog寫了一個刪除標簽的辦法,接下來將寫一個標簽的更新辦法.
PHP學習一般情況下,我們寫博客后,很少去改動標簽了,但是如果我們改動標簽如,刪除,添加,減少標簽怎么辦呢?這無疑造成think_tag和think_tagged兩個表垃圾信息的積累,好了,言歸正轉.
PHP學習在更新標簽時我們來了解兩個參數:
PHP學習$oldtags:更新前,存在thinphp_tag表中標簽
PHP學習$newstags:更新時,插入thinphp_tag之前,表單提交過來的標簽
PHP學習更新文章時,標簽可能會有以下幾種變化:
PHP學習1、$newstags與$oldtags部分相同-> 添加或減少或修改標簽,標簽的個數和名稱和原來部分相同.
PHP學習2、$newstags與$oldtags完全相同->不修改標簽
PHP學習3、$newstags與$oldtags完全不同 ->添加或減少標簽,并且標簽的個數和名稱和原來完全不同
PHP學習對于2我們只要通過判斷比較過濾即可,對于1、3通過判斷比較后,再作刪除或添加處理:
PHP學習刪除:要刪除的標簽名,在thinphp_tag已存在,當標簽的count=1時,就把它刪除掉,當count>1時,就減少1(count-1).
PHP學習添加:要添加的標簽名稱,如果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('編輯失敗!');?
?? }?
}
PHP學習希望本文所述對大家基于ThinkPHP框架的PHP程序設計有所幫助.
《PHP編程:ThinkPHP添加更新標簽的方法》是否對您有啟發,歡迎查看更多與《PHP編程:ThinkPHP添加更新標簽的方法》相關教程,學精學透。維易PHP學院為您提供精彩教程。
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/13455.html