芝麻web文件管理V1.00
编辑当前文件:/home2/sdektunc/yii/demos/blog/protected/models/Tag.php
true), array('name', 'length', 'max'=>128), ); } /** * @return array relational rules. */ public function relations() { // NOTE: you may need to adjust the relation name and the related // class name for the relations automatically generated below. return array( ); } /** * @return array customized attribute labels (name=>label) */ public function attributeLabels() { return array( 'id' => 'Id', 'name' => 'Name', 'frequency' => 'Frequency', ); } /** * Returns tag names and their corresponding weights. * Only the tags with the top weights will be returned. * @param integer the maximum number of tags that should be returned * @return array weights indexed by tag names. */ public function findTagWeights($limit=20) { $models=$this->findAll(array( 'order'=>'frequency DESC', 'limit'=>$limit, )); $total=0; foreach($models as $model) $total+=$model->frequency; $tags=array(); if($total>0) { foreach($models as $model) $tags[$model->name]=8+(int)(16*$model->frequency/($total+10)); ksort($tags); } return $tags; } /** * Suggests a list of existing tags matching the specified keyword. * @param string the keyword to be matched * @param integer maximum number of tags to be returned * @return array list of matching tag names */ public function suggestTags($keyword,$limit=20) { $tags=$this->findAll(array( 'condition'=>'name LIKE :keyword', 'order'=>'frequency DESC, Name', 'limit'=>$limit, 'params'=>array( ':keyword'=>'%'.strtr($keyword,array('%'=>'\%', '_'=>'\_', '\\'=>'\\\\')).'%', ), )); $names=array(); foreach($tags as $tag) $names[]=$tag->name; return $names; } 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 function updateFrequency($oldTags, $newTags) { $oldTags=self::string2array($oldTags); $newTags=self::string2array($newTags); $this->addTags(array_values(array_diff($newTags,$oldTags))); $this->removeTags(array_values(array_diff($oldTags,$newTags))); } public function addTags($tags) { $criteria=new CDbCriteria; $criteria->addInCondition('name',$tags); $this->updateCounters(array('frequency'=>1),$criteria); foreach($tags as $name) { if(!$this->exists('name=:name',array(':name'=>$name))) { $tag=new Tag; $tag->name=$name; $tag->frequency=1; $tag->save(); } } } public function removeTags($tags) { if(empty($tags)) return; $criteria=new CDbCriteria; $criteria->addInCondition('name',$tags); $this->updateCounters(array('frequency'=>-1),$criteria); $this->deleteAll('frequency<=0'); } }