在这篇文章: 中,我们制作了一个组件的框架,然后除了后台的手动管理功能外,这个组件还没有实际的功能,在这篇文章中我们来给组件添加根据文章编号,生成相应文章的标签功能。
第一步,我们要先在/components/com_tags目录中,建一个assets/lib的目录,将织梦分词算法pub_splitword_www.php和data/dede_www.csv词频文件放在相应的目录下。
第二步,在controller.php 中引入库文件,代码如下:
require_once(JPATH_BASE.DS.'components'.DS.'com_tags'.DS.'assets'.DS.'lib'.DS.'pub_splitword_www.php');
require_once(JPATH_BASE.DS.'components'.DS.'com_content'.DS.'helpers'.DS.'route.php');
第一行是因为分词的类文件,第二行是引入文章的SEF函数。
第三步,我们在controller.php中添加一个函数 createTags,对应与task=createTags的任务。函数的代码如下:
function createTags(){
$db =& JFactory::getDBO();
$article_id = JRequest::getVar('aid',1);
$query = 'select * from #__content where id='.$article_id;
$db->setQuery( $query );
$row = $db->loadObject();
if($row){
$query = 'select * from #__tags where articleid='.$article_id;
$db->setQuery( $query );
$item = $db->loadObject();
if($item){
return JError::raiseError( 404, 'error created' );
}
$sp = new SplitWord();
$words=strip_tags($row->title).' '.strip_tags($row->introtext);
$words=@iconv('utf-8','gb2312',$words);
$words=$sp->GetIndexText($sp->SplitRMM($words));
$words=@iconv('gb2312','utf-8',$words);
if(strlen($words)>0){
$slug = '';
$catslug = '';
$query = 'select * from #__categories id='.$row->catid;
$db->setQuery( $query );
$item = $db->loadObject();
if($item){
if($item->alias){
$catslug=$row->catid.':'.$item->alias;
}
else{
$catslug=$row->catid;
}
}
if($row->alias){
$slug = $row->id.':'.$row->alias;
}
else{
$slug = $row->id;
}
$sectionid= $row->sectionid;
$url = JRoute::_(ContentHelperRoute::getArticleRoute($slug, $catslug, $sectionid));
$ws = explode(" ",$words);
$count = 0;
foreach($ws as $w)
{
$query = 'insert into #__tags(tag,articleid,url) values ("'.$w.'",'.$row->id.',"'.$url.'")';
echo $query;
$db->Execute($query);
$count = $count+1;
if($count>=5) break;
}
$msg = 'tags created';
$this->setRedirect('/index.php?option=com_tags&view=tags&aid='.$row->id,$msg);
}
else{
return JError::raiseError( 404, 'no tags create' );
}
}
else{
return JError::raiseError( 404, JText::sprintf( 'Article # not found', $articleid) );
}
}
这段函数首先检查是否有这样编号的文章,如果有,则查找tags表中,是否已经有关于这篇文章的标签,如果没有的情况下,则生成标签。最后将生成的标签分别保存在tags表中。具体的代码含义我就不详细描述了。
接下来我们修改一下models文件,以显示某一篇文章的标签。models/tags.php getData()函数修改为:
function getData()
{
$db =& JFactory::getDBO();
$article_id = JRequest::getVar('aid',1);
$query='select * from #__tags where articleid='.$article_id;
$db->setQuery( $query );
$items = $this->_getList( $query );
return $items;
}
现在你就可以通过浏览器,来生成并显示某一文章的标签了。比如:
http://www.maycode.com/index.php?option=com_tags&view=tags&task=createTags&aid=520
注意将aid换成你自己某篇文章的编号。执行后显示的效果如下:

你可以注意这段代码中有一些瑕疵,比如,我们在代码中写死了只选择前5个关键词,同时对于错误处理也不够严谨,然而总之能够靠程序来生成标签了,是吧!这段代码我们在以后的过程中还要完善。
你还可能注意到,实际上生成的标签中,"我们","需要"等可能并不是你需要的,这个可以通过修改织梦分词算法来实现,以后有时间再处理吧,当然你也可以登陆后台,删除你不喜欢的标签。
我们同时修改一下tags.xml文件,在site中,添加两行:
<filename>assets/lib/pub_splitword_www.php</filename>
<filename>assets/lib/data/dede_wwwdic.csv</filename>
附件中是修改后的com_tags组件,再安装来试试吧。
Attatchments: 您还没有登录,登录后方能下载,如果您还没有注册,请点击
免费注册