西安做网站_西安网站建设公司_西安网页制作_西安网页设计_西安网站制作设计公司

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1757|回复: 0

自制的全局标签{dede:randomartlist} 可以在任意模板位置列出...

[复制链接]
发表于 2014-4-7 13:35:01 | 显示全部楼层 |阅读模式
DEDECMS自带的{dede:channelartlist}标签只能获取当前栏目的子栏目的内容列表,在首页模板中就是顶级栏目的内容列表,在做垃圾站的时候表现不够灵活。假如我要在一个没有下级栏目的栏目中使用{dede:channelartlist}标签的话就不会获得任何内容。有时候我们会发现网站在列表页和内容页内容不够充实,又怕麻烦去手动添加一些内容列表(所添加的常见内容也不过是最新、热门、推荐文档等这些全局标签),又不想去制作多个列表和内容页模板使其内容丰富起来,如果你非要做的话,其做法不过就是使用arclist标签读取一些指定栏目的内容,这种做法的缺点就是如果你要链接到你指定的栏目就要手动在HTML代码里写出来,不够机动。

假如有一个全局标签,能用于网站模板的任意位置,随机列出指定数目的网站栏目及内容列表,岂不使你的垃圾站内容更加丰富多彩哈。

于是我自制的全局标签{dede:randomartlist}诞生了
它可以在任意模板位置列出你指定数目(标签里的row参数)的随机栏目,并且这些只能非隐藏、文章模型、不是封面和外链的栏目(既此栏目会有实实在在的文章内容),且排除自身(如果用于栏目列表和文章内容显示页面)。不过如果你要在首页调用栏目内容列表的话还是推荐使用{dede:channelartlist}标签。

使用方法:

一、在任意模板位置中切入标签:
{dede:randomartlist row=3}
<h3><a href="{dede:field name='typeurl'/}" title="{dede:field name='typename'/}">{dede:field name='typename'/}</a></h3><span><a href="{dede:field name='typeurl'/}">更多</a></span>
<ul>
{dede:arclist titlelen=40 row='8'}
    <li><a href="[field:arcurl/]" title="[field:fulltitle/]">[field:title/]</a></li>
{/dede:arclist}
</ul>
{/dede:randomartlist}复制代码
标签唯一的一个参数row为要随机显示的栏目数目
标签里面的内置html代码可以自行修改,里面的其他标签相信用过DEDE的都很熟悉,如果该标签没有内置模板的话(即用法为:{dede:randomartlist row=3}{/dede:randomartlist})将会使用{dede:channelartlist}标签的系统默认模板(模板目录/system/part_channelartlist.htm),因为这个标签我是从{dede:channelartlist}修改过来的,所以也就没有重新配置,建议大家都自己定义。

二、在 include/taglib目录里添加如下标签代码文件randomartlist.lib.php:
<?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}标签调用随机栏目了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|Archiver|西安网站建设

GMT+8, 2018-8-17 17:00 , Processed in 0.078205 second(s), 21 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表