dedecms织梦的arclist标签的二次开发,增加参数

首先官网的开发文档

http://help.dedecms.com/manual/tagmanual/DedeTagmanual_Finnal/arclist.htm

我们增加 mydata参数
形式如下

 {dede:arclist row=14 titlelen=32  mydata="params"}

修改文件 \include\taglib\arclist.lib.php

1)增加参数获取 在 function lib_arclist( &$ctag, &$refObj ) 函数里面

$mydata = $ctag->GetAtt(‘mydata’);

2)传递参数到 函数 lib_arclistDone

return 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,$mydata
           );
}

3) 函数 lib_arclistDone定义处增加 mydata

function lib_arclistDone(&$refObj, &$ctag, $typeid=0, $row=10, $col=1, $titlelen=30, $infolen=160,
        $imgwidth=120, $imgheight=90, $listtype='all', $orderby='default', $keyword='',
        $innertext='', $arcid=0, $idlist='', $channelid=0, $limit='', $att='', $order='desc', $subday=0, $noflag='',$tagid='', $pagesize=0, $isweight='N',$mydata='')

4) 在 函数 lib_arclistDone 里面为所欲为吧

  $mydata = AttDef($mydata,'默认参数');
  if($mydata == '默认参数')
  {
   //您的需求实现代码
  }

dedecms重整dede_arctiny表

症状: dede:list 标签出现混淆,一些分类的文章没有显示,原因是删除文章的时候只删除了dede_archives 表,而dede_arctiny表没做相应的删除行,你会发现有些文章id在dede_arctiny表里依然存在,而dedecms原本为了加快速度的dede_arctiny表反而导致了错误。

select id from dede_arctiny where not exists(select * from dede_archives where dede_arctiny.id=dede_archives.id);

这个语句就可以看出来存在于dede_arctiny表里的多余数据,但是并不保证缺失数据

删除dede_arctiny里面的无效数据的sql语句为

delete from dede_arctiny where not exists(select * from dede_archives where dede_arctiny.id=dede_archives.id);

================================================================

下面是我们写的查缺补漏的全部重新生成最新鲜数据dede_arciny表的方法:

dedecms 织梦的dede_arctiny表的重整

truncate table `dede_arctiny`;
insert into `dede_arctiny`(`id`,`typeid`,`typeid2`,`arcrank`,`channel`,`senddate`,`sortrank`,`mid`) select `id`,`typeid`,`typeid2`,`arcrank`,`channel`,`senddate`,`sortrank`,`mid` from `dede_archives` where `arcrank` > -1 order by `id` asc ;

dedecms 生成栏目html缓慢的一个可能原因

在dede\makehtml_list_action.php 的文件行 101 处
//$lv->CountRecord();
有这样一处注释掉的代码,似乎DEDECMS的程序猿同学欲言又止
这一个计算某个栏目类有多少分页的代码居然不运行,从而导致后面一行

if($lv->TypeLink->TypeInfos[‘ispart’]==0 && $lv->TypeLink->TypeInfos[‘isdefault’]!=-1) $ntotalpage = $lv->TotalPage;
else $ntotalpage = 1;

导致这里面的 $ntotalpage 根本得不到值 (NULL),
因为 $lv->TotalPage 是在$lv->CountRecord  函数里面赋值
所以感觉特别奇怪。

从而想到,取消此处注释,让栏目生成HTML 分批进行

 //如果栏目的文档太多,分多批次更新
    if($ntotalpage <= $maxpagesize || $lv->TypeLink->TypeInfos['ispart']!=0 || $lv->TypeLink->TypeInfos['isdefault']==-1)
    {
        $reurl = $lv->MakeHtml('', '', $isremote);
        $finishType = TRUE;
    }
    else
    {
// 让代码进入此执行才是分批生成html
        $reurl = $lv->MakeHtml($mkpage, $maxpagesize, $isremote);
        $finishType = FALSE;
        $mkpage = $mkpage + $maxpagesize;
        if( $mkpage >= ($ntotalpage+1) ) $finishType = TRUE;
    }