DEDECMS文章系统另类内链方法

来源:互联网 发布:日语网络教育 编辑:程序博客网 时间:2024/06/01 09:26

很多站长都喜欢DEDECMS,因为它提供了非常多功能。。今天我们就聊一聊内链系统。

大家常用的无非就是推荐,热门,文章关联等,今天小编就介绍一种另类的内链方法。利用arclist标签打造另类文章系统内链。

DEDECMS的arclist标签大家应该非常熟悉,功能也就不多作介绍了,我们知道arclist标签有个属性是idlist。这个属性就是让arclist标签只调用idlist属性指定的ID。没错,小编要利用的就是idlist属性来打造另类的内链。且听小编一一道来。

当我们打开一篇文档的链接。而我们的文章又多,怎么让更多的文章有展示的机会呢。推荐?热门?时间排序?点击排序?手工推送。NO。这些太麻烦。

先听听小编的思路、

假设最第一条记录id为1,最后一条ID为99.

当打开一篇文档。假设文档ID是1,那么就自动推送出ID为1的后面的文章,如2,3,4,5,6....如果不中间有断层,也就是说我们中间删除过文文章。那么就一直后推。比方我们之前删除过5,7文档。那么就显示2,3,4,6,8等等。如果当前打开的文档ID是数据库的最后一条记录,比方说是99.那么自动推送出99前的文章,如...95,96,97,98等等,

也可以反过来。最后一篇文章则显示1,2,3,4,5,.第一篇文章则显示最后的5篇如、97,98,99

代码如下:

一、给arclist 的idlist属性自定义一个值。小编是给的是remark 那么完整的标签应该为:{dede:arclist row='10' idslist='renark' orderby='pubdate'}

二、修改标签代码,打开include/taglib/arclist.lib.php。

在189行位置增加如下代码:

if($idlist == 'remark')
{
        $idlist = get_arc_id($arcid,$line);
 }

这段代码的功能就是重新给$idlist变量赋值,并且不会和系统原来的定义冲突。

三、自定义函数get_arc_id($arcid,$line)

名称可以自行定义,参数$arcid表示当前文档ID。$line表示调用的数量。

在文件最后面添加函数

function get_arc_id($id,$line)
{
    global $dsql;   //定义全局数据库操作对象
    $ilist = '';//初始化变量,用来存储符合条件的ID
    $count = 0;//初始化变量,用来统计符合条件ID 的数量
   $flag = 0;//初始化变量。循环退出变量
    $row = $dsql->GetOne("select count(id) as total from `#@__archives` where arcrank>-1 and id<".$id." and channel=1");

    //统计数据库ID小于当前文档ID一共有多少篇文档,

    $count=$row['total'];    //将总数赋值给$count
    while(true)  ///开始循环,循环变量是true,也就是个死循环,在循环体内用条件判断退出
    {
        if($count>=$line)
        {
             $id--; //如果小于ID的文档小于等调用的数量。那么当前文档的ID就自增1,
        }
        else
        {
             $id++;////如果小于ID的文档大于调用的数量。那么当前文档的ID就自增1,
        }
        $row=$dsql->GetOne("SELECT `id` as cid FROM `#@__archives` where id=".$id);

//类似自增后的ID是数据库是否存在,如果存在,就表示这条记录是符合要求。开始累加给变量$ilist

        if(is_array($row))
        {
          
            if($ilist=='')
            {
                $ilist.=$row['cid'];
            }
            else
            {
                $ilist.=",".$row['cid'];
            }

//累加,结果类似1,2,3,4等

            if($flag>=$line)
            {
                break;//获取的数量大于等于调用数量。退出循环。

            }
        }
        else
        {
            continue;//不够,继续循环。再次匹配
        }
    }    
    return $ilist;//返回匹配结果。
}


实例参考:http://www.qwgx.cn/ 文章内容页 你可能感兴趣模板

0 0
原创粉丝点击