/*以下是文章页面用来调用相关文章的代码(其实就是$likearticle这个函数的输出)*/
<h3>相关文章</h3>
<ul class="list1 pd10">
<?php echo $likearticle;?>
</ul>
以上这段代码一般是放在article.php页面上的,也就是手机文章内容页面上的代码,我们只要找到wap.php(一般在根目录)文件中内容页代码段里的$likearticle是怎么定义的,就很容易进行修改了。一般模板里的代码是这样:
以上这段代码一般是放在article.php页面上的,也就是手机文章内容页面上的代码,我们只要找到wap.php(一般在根目录)文件中内容页代码段里的$likearticle是怎么定义的,就很容易进行修改了。一般模板里的代码是这样:
if($keyword!='')
{
$query2="SELECT id,title FROM `dede_archives` where arcrank>-1 OR (keyword) ORDER BY id desc limit 0,8";
}
else
{
$query2="SELECT id,typeid,title FROM `dede_archives` where arcrank>-1 ORDER BY id desc limit 0,8";
}
$dsql->SetQuery($query2);
$dsql->Execute();
while($row=$dsql->GetObject())
{
$likearticle.="<li><a href='wap.php?action=article&id={$row->id}'>".cut_str(ConvertStr($row->title),18)."</a></li>";
}
这段代码是关键,从开头的if函数可以知道,这个模板上定义相关文章是根据关键词(keyword)来定义的,但是通常每篇文章的关键词不可能只是一个,也不可能相同,所以一旦单凭关键词来调用相关文章,能匹配到的文章很少,所以我们选择,只要是同一个栏目下的,都算是相关文章,那么怎么来改呢,
首先要先读懂上面的代码的意思,开头是if语句,括号里对关键词函数进行判别,如果$keyword不等于空,就执行第一个$query2函数,给它赋值,具体代码是:
$query2="SELECT id,title FROM `dede_archives` where arcrank>-1 OR (keyword) ORDER BY id desc limit 0,8";
等号后面的意思大体是:从全站(FROM)已经审核(arcrank)的文章中调用或者(OR)keyword相同的文章中调用(这里有错),分别调用这些文章的id和title,按照(ORDER)文章id 降序排序,调用数量为8篇。有些参数可以自己改的。
我们发现,这样调用后的结果就是所有文章对应的相关文章都是整站的最新文章,这样就非常不精准,而我们要的是同栏目的文章,所以这里的if语句的判断就显得多余,不过我们尽量不要大量改动不熟悉的代码,减少出错概率,现在我们知道这两个$query2是什么意思了之后,将两个$query2后面的代码改成这样:
这段代码是关键,从开头的if函数可以知道,这个模板上定义相关文章是根据关键词(keyword)来定义的,但是通常每篇文章的关键词不可能只是一个,也不可能相同,所以一旦单凭关键词来调用相关文章,能匹配到的文章很少,所以我们选择,只要是同一个栏目下的,都算是相关文章,那么怎么来改呢,
首先要先读懂上面的代码的意思,开头是if语句,括号里对关键词函数进行判别,如果$keyword不等于空,就执行第一个$query2函数,给它赋值,具体代码是:
$query2="SELECT id,title FROM `dede_archives` where arcrank>-1 OR (keyword) ORDER BY id desc limit 0,8";
等号后面的意思大体是:从全站(FROM)已经审核(arcrank)的文章中调用或者(OR)keyword相同的文章中调用(这里有错),分别调用这些文章的id和title,按照(ORDER)文章id 降序排序,调用数量为8篇。有些参数可以自己改的。
我们发现,这样调用后的结果就是所有文章对应的相关文章都是整站的最新文章,这样就非常不精准,而我们要的是同栏目的文章,所以这里的if语句的判断就显得多余,不过我们尽量不要大量改动不熟悉的代码,减少出错概率,现在我们知道这两个$query2是什么意思了之后,将两个$query2后面的代码改成这样:
if($keyword!='')
{
$query2="SELECT id,typeid,title FROM `dede_archives` where arcrank>-1 And typeid='$typeid' And id<>'$id' ORDER BY id desc limit 0,8";
}
else
{
$query2="SELECT id,typeid,title FROM `dede_archives` where arcrank>-1 And typeid='$typeid' And id<>'$id' ORDER BY id desc limit 0,8";
}
$dsql->SetQuery($query2);
$dsql->Execute();
while($row=$dsql->GetObject())
{
$likearticle.="<li><a href='wap.php?action=article&id={$row->id}'>".cut_str(ConvertStr($row->title),18)."</a></li>";
}
细心的朋友就会发现,这两个$query2 我都改成了一样,所以无论上面if语句判断是什么结果,反正输出的文章都一样,不受keyword的值影响,其实就是调用多了一个typeid(栏目ID)函数,去掉keyword函数,同时对调用的文章的栏目ID进行判断,同一个栏目的文章才要,即 typeid='$typeid',后面接着的条件是id<>'$id',是过滤当前文章的意思,<>是不等于,避免重复出现,当前相关文章就不要再出现当前这篇文章了。
好了,到此就讲完啦。比较啰嗦,不过这也是自己的一个爱好,比较喜欢研究这些,虽然自己的水平还是入门级的,但弄明白之后感觉非常充实非常有成就感,感觉又进步了,所以以后还会有更多这种详细讲解的文章哦,敬请期待。大家还可以加我们的微信公众号:站长百事。有更多精彩内容。