tag表

models\Tag.php中增加几个function
/**
* 将字符串转化为数组形式
*
* @param string $tags
* @return array
*/
public static function string2array($tags)
{
return preg_split('/\s*,\s*/',$tags,-1,PREG_SPLIT_NO_EMPTY);
}
/**
* 将数组转化为字符串形式
*
* @param array $tags
* @return string
*/
public static function array2string($tags)
{
return implode(',',$tags);
}
/**
* 增加Tag标签
*
* @param array $tags
*/
public static function addTags($tags)
{
if(empty($tags)) return;
foreach($tags as $name)
{
$aTag = Tag::find()->where(['name'=>$name])->one();
$aTagCount = Tag::find()->where(['name'=>$name])->count();
if(!$aTagCount){ //如果是新Tag标签
$tag = new Tag;
$tag->name = $name;
$tag->frequency = 1;
$tag->save();
}
else //如果已有该值
{
$aTag->frequency +=1;
$aTag->save();
}
}
}
public static function removeTags($tags)
{
if(empty($tags)) return;
foreach($tags as $name)
{
$aTag = Tag::find()->where(['name'=>$name])->one();
$aTagCount = Tag::find()->where(['name'=>$name])->count();
if($aTagCount)
{
if($aTagCount && $aTag->frequency<= 1)//如果存在这个标签且<=1
{
$aTag->delete();
}
else
{
$aTag->frequency -= 1;
$aTag->save();
}
}
}
}
public static function updateFrequency($oldTags,$newTags)
{
if(!empty($oldTags) || !empty($newTags))
{
$oldTagsArray = self::string2array($oldTags);
$newTagsArray = self::string2array($newTags);
self::addTags(array_values(array_diff($newTagsArray,$oldTagsArray)));
self::removeTags(array_values(array_diff($oldTagsArray,$newTagsArray)));//Tag标签计数-1 或 直接删除该Tag
}
}
models\Post.php中增加一个私有变量以及改写几个function
private $_oldTags;
public function afterFind()
{
//找到数据之后,将原来的tag赋值给oldTags
parent::afterFind();
$this->_oldTags = $this->tags;
}
public function afterSave($insert,$changedAttributes)//这两个参数是固定写法
{
parent::afterSave($insert,$changedAttributes);
Tag::updateFrequency($this->_oldTags,$this->tags);
}
public function afterDelete()
{
parent::afterDelete();
Tag::updateFrequency($this->tags,'');
}
浙公网安备 33010602011771号