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,'');
    }

 

posted on 2018-10-24 22:47  longzhankunlun  阅读(147)  评论(0)    收藏  举报