关于本文演示效果请到孚锐网查看。
更多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.黄色,暴力,违反我国法律评论直接封号