public function testSearchAll() { $indexer = new TagArticles(); $tag = 'iphone'; $tag_id = Tag::fetch($tag)->id; $rows = $indexer->search($tag_id); $this->assertEquals(2, count($rows)); $row = $rows[0]; $pk = array('site_id' => $row['site_id'], 'news_id' => $row['news_id']); $article = ArticleTags::model()->findByPk($pk); if ($article) { $tags = $article->str2arr($article->tags); $this->assertTrue(in_array($tag, $tags)); } }
/** * 根据文章ID,获取文章的Tags * @param string $site * @param string $news_id * @param array $tags * @return boolean 设置成功与否 **/ public function setNewsTags($site, $news_id, $tags) { $key = $this->genKey('NewsTags', $site, $news_id); $site_id = TagsSite::getSiteId($site); $model = ArticleTags::model()->findByPk(array($site_id, $news_id)); if ($model == null) { $model = new ArticleTags(); $model->site_id = $site_id; $model->news_id = $news_id; $result = $model->saveTags($tags); } else { $result = $model->updateTags($tags); } if ($result) { $cache = $this->CP->CData->CCache; $cache->set($key, json_encode($tags), 3600); } return $result; }
$id = $query('id'); $tags_str = trim($query('tags')); $errors = array(10 => '参数错误: site或Id未提供', 11 => '参数错误:未指定标签', 90 => '处理错误: 设定标签失败'); try { if (empty($site) || empty($id)) { throw new CmsInterfaceException(10); _log("参数错误 site:{$site};id:{$id};tags_str:{$tags_str}", 'DEBUG'); } if (empty($tags_str)) { throw new CmsInterfaceException(11); _log("未指定标签, site:{$site};id:{$id}", 'DEBUG'); } //过滤输入, 转义输出 $tags_str = strip_tags($tags_str); $tags_str = project_convert_input($prj, $tags_str); $tags = ArticleTags::model()->str2arr($tags_str); $controller = $prj->rs->data->ext['tags']; $db = $prj->CData->CDb->w; WF_Registry::set('db', $db); $result = $controller->setNewsTags($site, $id, $tags); if (!$result) { throw new CmsInterfaceException(90); _log("标签设定失败, site:{$site}; id:{$id}; tags:{$tags_str}", 'ERROR'); } $prj->fw->interface->out(0, 'success', '', true); } catch (CmsInterfaceException $e) { project_output_error($prj, $e, $errors); } catch (Exception $e) { $this->fw->interface->out($e->getCode(), $e->getMessage(), '', ''); } function _log($msg, $level = 'ERROR')
public function testTagsIndex() { $tags = array('iphone', 'ipad'); $site_id = TagSite::getSiteId('news'); //'news'; $news_id = util_genId(51); $article = new ArticleTags(); $article->setAttributes(array('site_id' => $site_id, 'news_id' => $news_id, 'time' => util_time(23), 'type' => 0)); $result = $article->saveTags($tags); $this->assertTrue($result); $indexer = new TagArticles(); $tag_id = Tag::fetch('iphone')->id; $rows = $indexer->search($tag_id, 0, 0, 'web', 1); $this->assertEquals(1, count($rows)); $this->assertEquals($news_id, $rows[0]['news_id']); $article = ArticleTags::model()->findByPk(array($site_id, $news_id)); }