发布时间:2020-06-24 14:40:59 人气:
今天有雅兴将关键词调取相关文章进行优化了一下,代码适合帝国cms内容页和列表页模板使用,如果有条件的话帝国后台安装百度分词插件,将标题进行分词处理后放入调取tag栏中(此tag栏是自建字段)。
首先在后台系统设置里新建一个tag字段,用于调取标题关键词使用,有人说为何不用原有关键词那一项呢,这里可以负责人的告诉你,调取文章标题是分词后的关键词,如:SEO赚钱培训教程是否可以赚钱;这个标题分词后:SEO,赚钱,培训,教程,是,可以 等这样分词,百度分词功能也是这样分的,如果这样的关键词填入原理的关键词项里对页面优化也不好,如果是推荐到TAG标签里的话也太杂乱;如果只添加一个关键词呢调取又不是很精准。
所以我单独增加字段专门用于调取文章使用,这样比较精准些,怎么自建字段在前面文章写过,这里不写了。
代码如下:
<?
$keyboard=$navinfor[tag] ; //获取tag字段里的关键词,不限数量,关键词用逗号隔开(这个适合内容页模板)
$keyboard=ReturnClassAddField($bqr[classid],tag) ; //这个是列表页使用获取自定义关键词tag字段的
$keyboard=str_replace("," , ",", $keyboard); //如果里面有中文逗号替换成英文逗号
$keyboard=explode(",",$keyboard); //分隔成数组
$arr_len= count($keyboard); //关键词总数
for($i=0; $i<=($arr_len-1); $i++) //循环遍历赋值,有多少个就循环多少次
{ ${"tag" . $i}=$keyboard[$i];}
$wherelist = array();
for($i=0; $i<=($arr_len-1); $i++)
{
if(!empty(${"tag".$i})){
$wherelist[] = "title REGEXP '${"tag".$i}'"; //将关键词赋值使用regexp函数查询,也可以使用like
}
}
//print_r($wherelist);
if(count($wherelist)>0){
$where = implode(' and ', $wherelist); //合并and,如果不需要过于精准可以使用or
$where = " where ". $where; //在前面增加where
}
$where = isset($where) ? $where : '';?> //判断如果为空则显示空,下面查询最新文章
[e:loop={"select * from [!db.pre!]ecms_news $where order by id desc limit 20",0,24,0}]
<? if($navinfor[id]==$bqr['id']){echo "";} else { ?> //判断查询的文章id和本文ID相同则不显示
<li><a href="<?=$bqr['titleurl']?>" target="_self" title="<?=$bqr['title']?>"><?=$bqr['title']?></a></li>
<? } ?>
[/e:loop]
本次代码优化了关键词的限制,以前写过一个只能识别3个关键词但是也足够用了,现在为了更精准标题词义,所以调取时需要多个关键词实现,因为分词多了,所以优化了有多少关键词都循环出来。
重点:本代码使用regexp函数查询,可以采用正规表达式方式,在tag栏添加调取关键词时可以多条件查询添加,如:我查询 SEO和创业的标题文章还有SEO赚钱的标题文章,那么就可以这样填:SEO,创业|赚钱 这里|在查询时是或的意思,逗号,是和的意思,上面的填写就是包含SEO和创业或者SEO和赚钱的文章,比帝国自带的灵活多。如果你站内文章较多可以采用标题相似度的调取代码,在网站上有。