[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 \yii\db\ActiveRecord
{
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, '');
}
[moka同学笔记]二、Yii2.0课程笔记(魏曦老师教程)的更多相关文章
- [moka同学笔记]三、Yii2.0课程笔记(魏曦老师教程)关联字段增加搜索
关联字段增加搜索 post表关联adminuser表,通过post.author_id adminuser.id关联,在YII2.0生成搜索,关联字段搜索时,需要输入关联字段author的id才能搜 ...
- [moka同学笔记]一、Yii2.0课程笔记(魏曦老师教程)
第一节 第二节 课程内容
- [moka同学笔记]八、Yii2.0课程笔记(魏曦老师教程)[授权]
数据库表创建 在执行yii rbac/init之前,需要在 \console\controllers\RbacController.php中 <?php namespace console\co ...
- [moka同学笔记]七、Yii2.0课程笔记(魏曦老师教程)[新增管理员,重置密码]
- [moka同学笔记]六、Yii2.0课程笔记(魏曦老师教程)[徽章气泡]
- [moka同学笔记]五、Yii2.0课程笔记(魏曦老师教程)[审核功能]
- [moka同学笔记]四、Yii2.0课程笔记(魏曦老师教程)[匿名函数的使用操作]
在评论页面中index.php中 [ 'attribute'=>'status', 'value'=>'status0.name', 'filter'=>Commentstatus: ...
- Yii2.0学习笔记:创建登录表单
第一步:在model层创建一个EntryForm.php文件 复制以下代码,注意model的文件.方法.类的命名规范(大小写) <?php namespace app\models; use Y ...
- Yii2.0学习笔记:第一个页面Saying Hello
Controller目录下创建TestController.php 复制下面代码,yii跟tp一样,全程命名空间 <?php namespace app\controllers; use yii ...
随机推荐
- Linux下chkconfig命令详解 这个简单明了啊
chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息.谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接. 使用语法:chkconfig [--ad ...
- salesforce 零基础学习(二十八)使用ajax方式实现联动
之前的一篇介绍过关于salesforce手动配置关联关系实现PickList的联动效果,但是现实的开发中,很多数据不是定死的,应该通过ajax来动态获取,本篇讲述通过JavaScript Remoti ...
- salesforce 零基础学习(十七)Trigger用法
看本篇之前可以相应阅读以下Trigger相关文章: 1.https://developer.salesforce.com/page/Trigger_Frameworks_and_Apex_Trigge ...
- ASP.NET 如何判断当前请求是否是Ajax请求
/// <summary> /// Description:验证用户是否登陆 /// Author:xucixiao /// Date:2013- ...
- AngularJS中Directive指令系列 - scope属性的使用
文章是转的,我做下补充.原文地址:https://segmentfault.com/a/1190000002773689 每当一个指令被创建的时候,都会有这样一个选择,是继承自己的父作用域(一般是外部 ...
- Eclipse 启动时提示“发现了以元素'd:skin'开头的无效内容,此处不应含有子元素“
今天打开 Eclipse 时遇到了这个提示,如图所示: 关闭后发现控制台也有提示: [2016-04-19 11:11:20 - Android SDK] Error when loading the ...
- CCNA网络工程师学习进程(4)网络设备的基本配置和详细介绍
网络设备(路由器.交换机和防火墙等)与计算机一样需要操作系统.网络设备采用专用的操作系统,统称为IOS(Internetwork Operating System,网络操作系统). ( ...
- Python之函数与变量
本节内容 函数介绍及其作用 函数的定义与调用 函数的参数说明 全局变量与局部变量 值传递和引用传递 一.函数的介绍及其作用 编程语言中的函数与数学中的函数是有区别的:数学中的函数有参数(输入),就会有 ...
- Reporting Service 没有权限登陆
在配置好Reporting Service之后,登陆Report Mananger( http://localhost/Reports/Pages/Folder.aspx)出现一个异常,本地用户没有权 ...
- javascript类型系统——字符串String类型
× 目录 [1]定义 [2]引号 [3]反斜线[4]特点[5]转字符串 前面的话 javascript没有表示单个字符的字符型,只有字符串String类型,字符型相当于仅包含一个字符的字符串 字符串S ...