在使用Dedecms进行网站开发时,有时我们需要让列表页的首页与第二页及后续页面样式不同。直接修改dede:list标签可能难以达到理想效果。本文将介绍一种简单的方法,通过为首页单独指定模板来实现这一需求。


// 打开 include/arc.listview.class.php 文件
if ($this->PageNo > 1) {
    $tempfile = $GLOBALS['cfg_basedir'].$GLOBALS['cfg_templets_dir']."/".$GLOBALS['cfg_df_style']."/list_article2.htm";
    $this->dtp->LoadTemplate($tempfile);
}
    

首先,打开include目录下的arc.listview.class.php文件,找到Display函数(大约在397行)。在$this->ParseTempletsFirst();代码上方添加上述代码。这样,在页数大于1时,Dedecms将调用list_article2.htm作为列表页模板。


接着,生成栏目静态HTML页后,如果未达到预期效果,需搜索以下代码:


$this->ParseDMFields($this->PageNo, 1);
    

在这句代码上方添加类似代码:


if ($this->PageNo > 1) {
    $tempfile = $GLOBALS['cfg_basedir'].$GLOBALS['cfg_templets_dir']."/".$GLOBALS['cfg_df_style']."/list_article2.htm";
    $this->dtp->LoadTemplate($tempfile);
    $this->ParseTempletsFirst();
}
    

完成以上步骤后,无论是静态页还是动态页都能实现预期效果。


若一个栏目有多个列表页模板,如何避免每个栏目的第二页都使用list_article2.htm?解决方法如下:


$tmpdir = $GLOBALS['cfg_basedir'].$GLOBALS['cfg_templets_dir'];
$tempfile = str_replace("{tid}", $this->TypeID, $this->Fields['templist']);
$tempfile = str_replace("{cid}", $this->ChannelUnit->ChannelInfos['nid'], $tempfile);
$tempfile = $tmpdir."/".$tempfile;
$tmpfile2 = substr($tempfile, 0, -4);
$tempfile = $tmpfile2."2.htm";
    

这样设置后,系统会自动获取列表页模板后面加了“2”的模板。例如,如果列表页模板是list_image.htm,那么第二页的模板将是list_image2.htm


通过上述方法,您可以更灵活地为不同页面指定不同的模板,从而提升网站的用户体验和设计灵活性。