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, '');
        }
    我生活的地方,我为何要生活。
  • 相关阅读:
    HTML <input> 标签的 maxlength 属性
    HTTP 方法:GET 对比 POST
    怎么在html页面和js里判断是否是IE浏览器
    一行神奇的javascript代码
    c# 数据库批量插入数据SqlBulkCopy 示例
    c# 多线程调用窗体上的控件 示例
    sqlserver查找使用了某个字段的所有存储过程
    SQL Server 数据库性能优化
    SQL语句的执行过程
    Sql Server- 性能优化辅助指标SET STATISTICS TIME ON和SET STATISTICS IO ON
  • 原文地址:https://www.cnblogs.com/hsd1727728211/p/6062492.html
Copyright © 2011-2022 走看看