关于本文演示效果请到孚锐网查看。
更多Thinkcmf功能实现,使用教程,请关注孚锐网(91freeweb.com)。
<hr/>
首先看下具体呈现效果,如下图红色框所示部分,(也可以到91孚锐网®查看)根据关键词数量动态呈现关键词大小。
鼠标点击每个关键词后,自动搜索对应关键词的文章。


更多Thinkcmf功能实现,使用教程,请关注孚锐网(91freeweb.com)。
怎么样?是不是和我们平时简单的标签云效果很类似?那么接下来看看我是怎么实现的。
1,后台文章post关键词输入。为了一篇文章对应多个关键词,我在录入关键词的时候每个关键词以英文“,”分隔。这里我想说的是,分隔符一旦使用了某一种类型,以后的文章分隔符也必须用这种,这个很重要。

2,前台实现关键词呈现,并确保每个关键词都能找到文章。
为了确保功能扩展代码跟随主题一起使用,将在对应主题的function.html文件中扩展方法,云标签功能就是在此处扩展了一个
function _sp_sql_keywords_bypostcatid($cid,$splitChar,$topCount) 方法,其中
参数:$cid- 需要展现标签关键词的文章分类id;
参数:$splitChar- 就是前面提到的你录入关键词时候的分隔符;
参数:$topCount- 需要展现标签关键词的数量;
方法代码如下截图:

/*获取对应分类下所有子分类和文章的关键词,全站这分类ID为0即可; */
/*$cid, 分类id */
/*$splitChar,分隔符 */
/*$topCount,获取关键词数量 */
/*返回 */
/*关键词数组及关联文章数量 */
function _sp_sql_keywords_bypostcatid($cid,$splitChar,$topCount){
$catIDS=array();
$terms=M("Terms")->field("term_id")->where("status=1 and term_id=$cid or path like '%-$cid-%'")->order('term_id asc')->select();
foreach($terms as $item){
$catIDS[]=$item['term_id'];
}
if(!empty($catIDS)){
$catIDS=implode(",", $catIDS);
$catIDS="cid:$catIDS;";
}else{
$catIDS="";
}
$posts= sp_sql_posts($catIDS);
$keywords=array();
foreach( $posts as $post)
{
$tags=explode($splitChar,$post['post_keywords']);
$tagarrlength=count($tags);
$keywordsarrlength=count($keywords);
for($x=0 ; $x < $tagarrlength ;$x++ )
{
$haskeywords=false;
foreach($keywords as $w=>$w_value)
{
if($tags[$x]==$w){
$haskeywords=true;
$keywords[$w]=$w_value+1;
break;}
}
if($haskeywords==false and trim($tags[$x])!=""){ $keywords[trim($tags[$x])]=1;}
}
}
arsort($keywords);//降序排序
$max=array_slice($keywords,0,1,false);//max关键词收录的次数
foreach($max as $x=>$x_value) {
$max=$x_value;break;
}
$min=array_slice($keywords,$topCount-2,$topCount-1,false);//max关键词收录的次数
foreach($min as $x=>$x_value) {
$min=$x_value;break;
}
$keywordsarrlength=count($keywords);
if($keywordsarrlength > $topCount){
$keywords=array_slice($keywords,0,$topCount);
}
ksort($keywords);
return array($keywords,$max,$min);
}
方法有了,剩下的就是在需要显示的地方调用这个_sp_sql_keywords_bypostcatid方法了。
当然,调用这个方法前,记得在调用页面通过以下代码:
<tc_include file=":function"/>
引用下你的function.html文件;
这样就基本ok了。
==========================
补充下,实际测试中,发现部分关键词在搜索的时候并不能被找到,后来仔细研究下代码,发现文章搜索是搜索的文章标题,这样就好办了,有两种方式实现:
方法1,通过标签云检索的时候,修改检索方法为post关键词。
方法2,在添加文章时候将关键词加入到文章内容里面 通过css控制display:none;然后修改系统搜索为所有post内容,就可以啦。
孚锐网原创文章,转载请注明出处。
关于本文演示效果请到孚锐网查看。
更多Thinkcmf功能实现,使用教程,请关注孚锐网(91freeweb.com)。
0.话题发布后没及时显示,请联系官方QQ群管理;
1.话题支持代码,qq截屏直接粘贴,和QQ群一样;
2.问题描述清,比如服务器版本,程序版本;
3.能上代码,就不用文字;
4.把问题发到话题后再发QQ群;
5.如果感觉回复者解答的不错,可以发红包!
6.多帮助别人也是对自己的锻炼!
7.付费讨论中只有提问者和付费用户才可以查看回复
1.评论积分+1;每天最多10次奖励
2.发布话题积分+1;每天最多5次奖励
3.垃圾评论积分-500;
4.黄色,暴力,违反我国法律评论直接封号