您好,欢迎来到菜鸟吧源码网-本站资源仅供学习与参考,禁止用于商业或违法行为!
  • 首 页
  • 下载APP
  • 公告:菜鸟吧APP于2024.9.15正式上线,请首页右上角进入下载,本站资源均来源于互联网及会员投稿发布,所有资源仅供学习参考研究使用,请勿商用或其它非法用途,商用请购买正版,否则产生一切后果由用户自行承担!谢谢!

     

    当前位置:主页 > 站长学堂 > dede教程 >
    dedecms源码分析之文章列表arclist_lib.php
    时间:2020-03-01 11:47 作者:菜鸟哥 浏览:收藏 挑错 打印

    这个文件负责显示文章的列表。
    包括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<$line; $i++)这个大循环里面。
    找到
    $liststr = $dtp2->GetResult();            
    $artlist .= $liststr."\r\n";
    GetResult()返回一篇文章的信息,具体内容跟你采用的模板有关。

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

    郑重声明:
    本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,不存在任何商业目的与商业用途。 若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。
    我们不承担任何技术及版权问题,且不对任何资源负法律责任。
    如无法下载,联系站长索要。
    如有侵犯您的版权,请给我们来信:cainiaovip8@qq.com,我们尽快处理。

    织梦中TAG标签字数长度限制解决方法织梦中TAG标签字数长度限制解决方法
    织梦后台突然打不开或打开后空白的解决方法织梦后台突然打不开或打开后空白的解决
    织梦系统解决后台“DEDECMS安全提示”的方法织梦系统解决后台“DEDECMS安全提示”