zoukankan      html  css  js  c++  java
  • [moka同学笔记]二、Yii2.0课程笔记(魏曦老师教程)

    一、在标签tags的model中

        //使用正则表达式,把标签字符串转换成数组
        public static  function string2array($tags)
        {
            return preg_split('/s*,s*/',trim($tags),-1,PREG_SPLIT_NO_EMPTY);
        }
    
        //把数组转换成字符串
        public static  function array2string($tags)
        {
            return implode(', ',$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 = 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)
                    {
                        $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)));
            }
        }
        

    二、标签model的使用位置分析

    在post的model中

    class Post extends yiidbActiveRecord
    {
        private $_oldTags;    
    
    public function afterFind()
        {
            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, '');
        }
    我生活的地方,我为何要生活。
  • 相关阅读:
    VS项目如何运用svn的忽略列表
    Hyper-V如何应用新的网卡
    android:Layout_weight的深刻理解
    使用WebView出现web page not available
    如何在android模拟器中导入搜狗输入法?
    ASP.Net生成静态HTML页
    微软URLRewriter.dll的url重写的简单使用(实现伪静态)
    servlet中获得tomcat项目根目录的绝对路径
    Log4j使用指南
    处理URL传递中文乱码问题
  • 原文地址:https://www.cnblogs.com/hsd1727728211/p/6062492.html
Copyright © 2011-2022 走看看