|
DEDECMS自带的{dede:channelartlist}标签只能获取当前栏目的子栏目的内容列表,在首页模板中就是顶级栏目的内容列表,在做垃圾站的时候表现不够灵活。假如我要在一个没有下级栏目的栏目中使用{dede:channelartlist}标签的话就不会获得任何内容。有时候我们会发现网站在列表页和内容页内容不够充实,又怕麻烦去手动添加一些内容列表(所添加的常见内容也不过是最新、热门、推荐文档等这些全局标签),又不想去制作多个列表和内容页模板使其内容丰富起来,如果你非要做的话,其做法不过就是使用arclist标签读取一些指定栏目的内容,这种做法的缺点就是如果你要链接到你指定的栏目就要手动在HTML代码里写出来,不够机动。
假如有一个全局标签,能用于网站模板的任意位置,随机列出指定数目的网站栏目及内容列表,岂不使你的垃圾站内容更加丰富多彩哈。
于是我自制的全局标签{dede:randomartlist}诞生了
它可以在任意模板位置列出你指定数目(标签里的row参数)的随机栏目,并且这些只能非隐藏、文章模型、不是封面和外链的栏目(既此栏目会有实实在在的文章内容),且排除自身(如果用于栏目列表和文章内容显示页面)。不过如果你要在首页调用栏目内容列表的话还是推荐使用{dede:channelartlist}标签。
使用方法:
一、在任意模板位置中切入标签:
{dede:randomartlist row=3}
更多
{/dede:randomartlist}复制代码
标签唯一的一个参数row为要随机显示的栏目数目
标签里面的内置html代码可以自行修改,里面的其他标签相信用过DEDE的都很熟悉,如果该标签没有内置模板的话(即用法为:{dede:randomartlist row=3}{/dede:randomartlist})将会使用{dede:channelartlist}标签的系统默认模板(模板目录/system/part_channelartlist.htm),因为这个标签我是从{dede:channelartlist}修改过来的,所以也就没有重新配置,建议大家都自己定义。
二、在 include/taglib目录里添加如下标签代码文件randomartlist.lib.php:
/**
* [全局]随机任意调用栏目内容列表,DEDE现有的channelartlist标签只能在首页调用顶级栏目和栏目页调用其子栏目列表
* 本标签是对channelartlist的修改,去除了它的上下文环境,标签可用于任意模板位置
* @author Summer 2009.04.15 qq 10256288
*/
if(!defined('DEDEINC')) exit('Request Error!');
require_once(DEDEINC.'/arc.partview.class.php');
function lib_randomartlist(&$ctag,&$refObj)
{
global $dsql,$envs,$_sys_globals;
//处理标记属性、innertext
$attlist = 'typeid|0,row|10';
FillAttsDefault($ctag->CAttribute->Items,$attlist);
extract($ctag->CAttribute->Items, EXTR_SKIP);
$innertext = trim($ctag->GetInnerText());
if($innertext=='') $innertext = GetSysTemplets('part_channelartlist.htm');
$totalnum = $row;
if(empty($totalnum)) $totalnum = 20;
//获得类别ID总数的信息
$typeids = array();
//只读取内容模型为文章的栏目[且栏目不是封面和外部链接,非隐藏栏目]
$tpsql = "id<>".$_sys_globals['typeid']." AND ispart=0 And ishidden<>1 And channeltype=1";
$dsql->SetQuery("Select id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath from `#@__arctype` where $tpsql order by rand() limit $totalnum");
$dsql->Execute();
while($row = $dsql->GetArray()) {
$typeids[] = $row;
}
if(!isset($typeids[0])) return '';
$artlist = '';
$GLOBALS['itemindex'] = 0;
$GLOBALS['itemparity'] = 1;
for($i=0;isset($typeids[$i]);$i++)
{
$GLOBALS['itemindex']++;
$pv = new PartView($typeids[$i]['id']);
$pv->Fields['typeurl'] = GetOneTypeUrlA($typeids[$i]);
$pv->SetTemplet($innertext,'string');
$artlist .= $pv->GetResult();
$GLOBALS['itemparity'] = ($GLOBALS['itemparity']==1 ? 2 : 1);
}
//注销环境变量,以防止后续调用中被使用
$GLOBALS['envs']['typeid'] = $_sys_globals['typeid'];
$GLOBALS['envs']['reid'] = '';
return $artlist;
}
?>复制代码
当然你也可以在DEDECMS后台 -> 模板 -> 标签源码管理 添加这个新的标签,然后你就可以在任意模板位置使用{dede:randomartlist}标签调用随机栏目了 |
|