|  | 
 
| DEDECMS自帶的{dede:channelartlist}標(biāo)簽只能獲取當(dāng)前欄目的子欄目的內(nèi)容列表,在首頁模板中就是頂級欄目的內(nèi)容列表,在做垃圾站的時候表現(xiàn)不夠靈活。假如我要在一個沒有下級欄目的欄目中使用{dede:channelartlist}標(biāo)簽的話就不會獲得任何內(nèi)容。有時候我們會發(fā)現(xiàn)網(wǎng)站在列表頁和內(nèi)容頁內(nèi)容不夠充實,又怕麻煩去手動添加一些內(nèi)容列表(所添加的常見內(nèi)容也不過是最新、熱門、推薦文檔等這些全局標(biāo)簽),又不想去制作多個列表和內(nèi)容頁模板使其內(nèi)容豐富起來,如果你非要做的話,其做法不過就是使用arclist標(biāo)簽讀取一些指定欄目的內(nèi)容,這種做法的缺點就是如果你要鏈接到你指定的欄目就要手動在HTML代碼里寫出來,不夠機動。 
 假如有一個全局標(biāo)簽,能用于網(wǎng)站模板的任意位置,隨機列出指定數(shù)目的網(wǎng)站欄目及內(nèi)容列表,豈不使你的垃圾站內(nèi)容更加豐富多彩哈。
 
 于是我自制的全局標(biāo)簽{dede:randomartlist}誕生了
 它可以在任意模板位置列出你指定數(shù)目(標(biāo)簽里的row參數(shù))的隨機欄目,并且這些只能非隱藏、文章模型、不是封面和外鏈的欄目(既此欄目會有實實在在的文章內(nèi)容),且排除自身(如果用于欄目列表和文章內(nèi)容顯示頁面)。不過如果你要在首頁調(diào)用欄目內(nèi)容列表的話還是推薦使用{dede:channelartlist}標(biāo)簽。
 
 使用方法:
 
 一、在任意模板位置中切入標(biāo)簽:
 {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}復(fù)制代碼
 標(biāo)簽唯一的一個參數(shù)row為要隨機顯示的欄目數(shù)目
 標(biāo)簽里面的內(nèi)置html代碼可以自行修改,里面的其他標(biāo)簽相信用過DEDE的都很熟悉,如果該標(biāo)簽沒有內(nèi)置模板的話(即用法為:{dede:randomartlist row=3}{/dede:randomartlist})將會使用{dede:channelartlist}標(biāo)簽的系統(tǒng)默認模板(模板目錄/system/part_channelartlist.htm),因為這個標(biāo)簽我是從{dede:channelartlist}修改過來的,所以也就沒有重新配置,建議大家都自己定義。
 
 二、在 include/taglib目錄里添加如下標(biāo)簽代碼文件randomartlist.lib.php:
 <?php
 /**
 * [全局]隨機任意調(diào)用欄目內(nèi)容列表,DEDE現(xiàn)有的channelartlist標(biāo)簽只能在首頁調(diào)用頂級欄目和欄目頁調(diào)用其子欄目列表
 * 本標(biāo)簽是對channelartlist的修改,去除了它的上下文環(huán)境,標(biāo)簽可用于任意模板位置
 * @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;
 
 //處理標(biāo)記屬性、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總數(shù)的信息
 $typeids = array();
 //只讀取內(nèi)容模型為文章的欄目[且欄目不是封面和外部鏈接,非隱藏欄目]
 $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);
 }
 //注銷環(huán)境變量,以防止后續(xù)調(diào)用中被使用
 $GLOBALS['envs']['typeid'] = $_sys_globals['typeid'];
 $GLOBALS['envs']['reid'] = '';
 return $artlist;
 }
 ?>復(fù)制代碼
 當(dāng)然你也可以在DEDECMS后臺 -> 模板 -> 標(biāo)簽源碼管理  添加這個新的標(biāo)簽,然后你就可以在任意模板位置使用{dede:randomartlist}標(biāo)簽調(diào)用隨機欄目了
 | 
 |