THINKCMF功能扩展-手把手打造文章标签云教程


关于本文演示效果请到孚锐网查看。

更多Thinkcmf功能实现,使用教程,请关注孚锐网(91freeweb.com)。

<hr/>

首先看下具体呈现效果,如下图红色框所示部分,(也可以到91孚锐网®查看)根据关键词数量动态呈现关键词大小。

鼠标点击每个关键词后,自动搜索对应关键词的文章。  

更多Thinkcmf功能实现,使用教程,请关注孚锐网(91freeweb.com)。更多Thinkcmf功能实现,使用教程,请关注孚锐网(91freeweb.com)。


更多Thinkcmf功能实现,使用教程,请关注孚锐网(91freeweb.com)。

怎么样?是不是和我们平时简单的标签云效果很类似?那么接下来看看我是怎么实现的。

1,后台文章post关键词输入。为了一篇文章对应多个关键词,我在录入关键词的时候每个关键词以英文“,”分隔。这里我想说的是,分隔符一旦使用了某一种类型,以后的文章分隔符也必须用这种,这个很重要。 

更多Thinkcmf功能实现,使用教程,请关注孚锐网(91freeweb.com)。

2,前台实现关键词呈现,并确保每个关键词都能找到文章。

     为了确保功能扩展代码跟随主题一起使用,将在对应主题的function.html文件中扩展方法,云标签功能就是在此处扩展了一个

function _sp_sql_keywords_bypostcatid($cid,$splitChar,$topCount) 方法,其中

参数:$cid- 需要展现标签关键词的文章分类id;

参数:$splitChar- 就是前面提到的你录入关键词时候的分隔符;

参数:$topCount- 需要展现标签关键词的数量;

方法代码如下截图:

更多Thinkcmf功能实现,使用教程,请关注孚锐网(91freeweb.com)。

/*获取对应分类下所有子分类和文章的关键词,全站这分类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文件;

更多Thinkcmf功能实现,使用教程,请关注孚锐网(91freeweb.com)。 

这样就基本ok了。

==========================

补充下,实际测试中,发现部分关键词在搜索的时候并不能被找到,后来仔细研究下代码,发现文章搜索是搜索的文章标题,这样就好办了,有两种方式实现:

方法1,通过标签云检索的时候,修改检索方法为post关键词。

方法2,在添加文章时候将关键词加入到文章内容里面 通过css控制display:none;然后修改系统搜索为所有post内容,就可以啦。


孚锐网原创文章,转载请注明出处。


关于本文演示效果请到孚锐网查看。

更多Thinkcmf功能实现,使用教程,请关注孚锐网(91freeweb.com)。


打赏

评论

暂时关闭,稍后恢复~
文档请看10遍以上!有问题可加QQ群!
发表话题

源素材推荐

提问必知

0.话题发布后没及时显示,请联系官方QQ群管理;
1.话题支持代码,qq截屏直接粘贴,和QQ群一样;
2.问题描述清,比如服务器版本,程序版本;
3.能上代码,就不用文字;
4.把问题发到话题后再发QQ群;
5.如果感觉回复者解答的不错,可以发红包!
6.多帮助别人也是对自己的锻炼!
7.付费讨论中只有提问者和付费用户才可以查看回复

积分规则

1.评论积分+1;每天最多10次奖励
2.发布话题积分+1;每天最多5次奖励
3.垃圾评论积分-500;
4.黄色,暴力,违反我国法律评论直接封号


ThinkCMF 8.0.0发布啦!祝大家节日快乐! 立即体验!