php文章列表源码,dedecms源码分析之文章列表arclist_lib.php

这个文件负责显示文章的列表。

包括GetArclistCache(),lib_arclist(),lib_arclistDone(),lib_GetAutoChannelID(),list_sort_by()五个函数。

这五个函数的调用关系是

lib_arclist()->lib_GetAutoChannelID ;

lib_arclist()->lib_arclistDone();

lib_GetAutoChannelID ->GetArclistCache ();

lib_GetAutoChannelID ->list_sort_by();

整个文件中 lib_arclistDone()函数体的代码最多最复杂,看起来很复杂,因为里面有很多的if语句。

lib_arclist()函数最先被调用,代码比较少,主要是做一些基本参数的判断和取值,为下面被调用的lib_arclistDone函数的形参列表做准备。这个函数里面有一个地方应该比较重要,可以决定什么时候调用什么模板。下面是代码。

if(trim($ctag->GetInnerText()) != '')

$innertext = $ctag->GetInnerText();

else if($tagname=='imglist')

$innertext = GetSysTemplets('part_imglist.htm');

else if($tagname=='imginfolist')

$innertext = GetSysTemplets('part_imginfolist.htm');

else

$innertext = GetSysTemplets("part_arclist.htm");

GetSysTemplets()函数是其他地方的函数,通过它可以获得相应的模板。这里只需知道它的功能,不去研究它怎么来的和具体怎么实现的。

需要的参数准备就绪以后,就开始调用lib_arclistDone函数了,lib_arclistDone函数做了绝大部分工作,最重要的是根据传进来的参数构成sql语句,然后使用dedesqli的    SetQuery,Execute方法从数据库里面取数据,然后根据调用的模板返回文章列表的字符串。这个文件也只有这个函数需要解释的。

回到lib_arclist()调用lib_arclistDone()的地方。

lib_arclistDone

(

$refObj, $ctag, $typeid, $ctag->GetAtt('row'), $ctag->GetAtt('col'), $titlelen, $infolen,

$ctag->GetAtt('imgwidth'), $ctag->GetAtt('imgheight'), $listtype, $orderby,

$ctag->GetAtt('keyword'), $innertext, $envs['aid'], $ctag->GetAtt('idlist'), $channelid,

$ctag->GetAtt('limit'), $flag,$ctag->GetAtt('orderway'), $ctag->GetAtt('subday'), $ctag->GetAtt('noflag'),

$tagid,$pagesize,$isweight

);

看到了吧,如此之多的参数,每个参数的具体含义我就不说了,源码注释里面有。

lib_arclistDone函数对这些参数进行了处理,比如$titlelen = AttDef($titlelen,30)是将标题限制在30 以内;$innertext = trim($innertext)是将显示文章列表的字符串去掉首尾空白。

接下来是设定sql语句的查询条件和排序方式。

此处省略若干字,实在没什么好讲的。我们直接看查询数据库的sql语句是什么样子

$query = "SELECT arc.*,tp.typedir,tp.typename,tp.corank,tp.isdefault,tp.defaultname,tp.namerule,

tp.namerule2,tp.ispart,tp.moresite,tp.siteurl,tp.sitepath

$addfieldsSql

FROM `$maintable` arc LEFT JOIN `jcode_arctype` tp on arc.typeid=tp.id

$addfieldsSqlJoin

$orwhere $ordersql $limitsql";

其中maintable在这里一般是archives这个表

然后执行这个sql语句:

$dsql->SetQuery($query);

$dsql->Execute('al');

到了lib_arclistDone的最后一个步骤了,就是讲文章列表结果保存在$artlist里面,我们只是研究代码的大概执行过程,所以这里只抓住一条主线,那就是一般文章列表的显示过程,artlist变量的赋值分为很多种情况,包括是否页数大于0的情况,分两栏显示的情况等,一般情况下,直接跳到for($i=0; $i

找到

$liststr = $dtp2->GetResult();

$artlist .= $liststr."\r\n";

GetResult()返回一篇文章的信息,具体内容跟你采用的模板有关。

到这一步,lib_arclistDone函数就基本结束了,后面的都是跟缓存什么的有关的。

免责声明:本站所有文章和图片均来自用户分享和网络收集,文章和图片版权归原作者及原出处所有,仅供学习与参考,请勿用于商业用途,如果损害了您的权利,请联系网站客服处理。

本站vip会员 请加入织梦58 VIP②群 PS:加入时备注用户名或昵称

普通注册会员或访客 请加入织梦58 技术交流②群

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值