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

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

概述这个文件负责显示文章的列表。 包括GetArclistCache(),lib_arclist(),lib_arclistDone(),lib_GetAutoChannelID(),list_sort_by()五个函数。 这五个函数的调用关系是 lib_arclist()-lib_GetAutoChannelID ; lib_arclist()-lib_arclistDone(); lib_GetAutoChan 这个文件负责显示文章的列表。
包括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,sans-serif; Font-size: 16px;'>             $ctag->GetAtt('keyword'),$innertext,$envs['aID'],$ctag->GetAtt('IDList'),$channelID,sans-serif; Font-size: 16px;'>             $ctag->GetAtt('limit'),$flag,$ctag->GetAtt('orderway'),$ctag->GetAtt('subday'),$ctag->GetAtt('noflag'),sans-serif; Font-size: 16px;'>             $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,sans-serif; Font-size: 16px;'>        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<$line; $i++)这个大循环里面。
找到
$Liststr = $dtp2->GetResult();            
$artList .= $Liststr."\r\n";
GetResult()返回一篇文章的信息,具体内容跟你采用的模板有关。
到这一步,lib_arcListDone函数就基本结束了,后面的都是跟缓存什么的有关的。 总结

以上是内存溢出为你收集整理的dedecms源码分析之文章列表arclist_lib.php全部内容,希望文章能够帮你解决dedecms源码分析之文章列表arclist_lib.php所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/1066018.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存